2.5 SQL编写
2.5.1 字符类型数据
SQL中的字符类型数据应该统一使用单引号。特别对纯数字的字串,必须用单引号,否则会导致内部转换而引起性能问题或索引失效问题。利用trim(),lower()等函数格式化匹配条件。
2.5.2 复杂sql
对于非常复杂的sql(特别是有多层嵌套,带子句或相关查询的),应该先考虑是否设计不当引起的。对于一些复杂SQL可以考虑使用程序实现。
USER_TAB_COMMENTS 数据字典
Comment on 可加注解
2.5.3 高效性
2.5.3.1 避免In子句
使用In 或 not In子句时,特别是当子句中有多个值时,且查询数据表数据较多时,速度会明显下降。可以采用连接查询或外连接查询来提高性能。
Char 比 varchar 查询时高询
在进行查询及建立索引时,char比varchar的效率要高,当然varchar在存储上比char要好
2.5.3.2 避免嵌套的Select子句
这个实际上是In子句的特例。
2.5.3.3 避免使用Select * 语句
如果不是必要取出所有数据,不要用*来代替,应给出字段列表,注:不含select count(*)。
2.5.3.4 避免不必要的排序
不必要的数据排序大大的降低系统性能。
2.5.4 健壮性
2.5.4.1 Insert语句
使用Insert语句一定要给出要插入值的字段列表,这样即使更改了表结构加了字段也不会影响现有系统的运行。
2.5.4.2 Count(*)、Count(*)、count(distinct id)的区别
Select count(*) from testtab
得到表testtab的记录数
select count(id) from testtab
得到表testtab id字段非空记录数
select count(distinct id) from testtab
得到表testtab id字段值非相同记录数
2.5.4.3 Not null 为字段类型性质的约束
本约束功能在后期无语法使期失效,可使用修改字段类型方式
alter table modify 字段名 类型 not null
alter table modify 字段名 类型
2.5.4.4 外键值可用null的问题
外键列如没有明确说明not null,可插入null记录(而null是在外部表的记录中没有的),如无可插null记录的想法,要对外键字段加not null约束。
2.5.4.5 序列 sequence 跳号的问题
sequence 因回滚,系统崩溃(使用cache 内的值将认为已用),多表引用都将使其跳号,所以不能用于为连续序号 utl_row.cast_to_row
2.5.4.6 unicn\\ intersect\\ minus
使用ordey by的注意事项
以上语句进行连表操作,而表同表的字段顺序的类型相同但字段标题名可不同,使用ordey by时后面如果是字段名,要求所有的表的字段标题名相同,否则用字段的顺序号
select id,name,year from user1 union select no,name,to_number(null) year from user2 order by 1,name,year
2.5.5 安全性
2.5.5.1 Where 条件
无论在使用Select,还是使用破坏力极大的Update和Delete语句时,一定要检查Where条件判断的完整性,不要在运行时出现数据的重大丢失。如果不确定,最好先用Select语句带上相同条件来果一下结果集,来检验条件是否正确。
2.5.6 完整性
有 依赖关系的表,例如主外键关系表,在删除父表时必须级联删除其子表相应数据,或则按照某种业务规则转移该数据。9I中表中字段缩小及变类型,字段为空或表 空,varchar和char长度不变可任意改,字段名和表名可字段可用 ALTER TABLE table SET UNUSED (column) 设定为不可用,注意无命令再设为可用
备份恢复设计原则
3.1 数据库exp/imp备份恢复
Oracle数据库的Exp、Imp提供了数据快速的备份和恢复手段,提供了数据库级、用户级和表级的数据备份恢复方式。这种方法一般作为数据库辅助备份手段。
3.1.1 数据库级备份原则
在数据库的数据量比较小,或数据库初始建立的情况下采用。不适合7*24的在线生产环境数据库备份。
3.1.2 用户级备份原则
在用户对象表数据容量比较小、或则用户对象初始建立的情况下使用。
3.1.3 表级备份原则
主要在以下场合采用的备份方式:
参数表备份
静态表备份
分区表的分区备份。
3.2 数据库冷备份原则
数据库冷备份必须符合以下原则:
数据库容量比较小。
数据库允许关闭的情况。
3.3 Rman备份恢复原则
这种方式适用于7*24环境下的联机热备份情形。
3.3.1 Catalog数据库
单独建立备份恢复用的数据库实例,尽可能与生产环境的数据库分开,确保catalog与生产数据库的网络连接良好。在9I系统使用良好的备份策略以可,支持完全使用控制文件保存catalog信息,备份策略如下:
backup spfile format '/data/backup/%d_SPFILE_%T_%s_%p.bak'; sql \ backup archivelog all format '/data/backup/%d_ARC_%T_%s_%p.bak' delete all input; backup current controlfile format '/data/backup/%d_CTL_%T_%s_%p.bak'; 在spfile、控制文件、数据库全丢的情况下可通过下面的方式恢复 RMAN> connect target connected to target database (not started) RMAN> startup RMAN> restore spfile '/data/backup/COMMDB_SPFILE_20030411_9_1.bak'; from