(转)racle 9i 数据库设计指引全集(4)

     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 备份恢复设计原则
  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 "alter system archive log current";
  
  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 from '/data/backup/COMMDB_SPFILE_20030411_9_1.bak';
  
  SQL> startup
  
  ORA-00205: error in identifying controlfile, check alert log for more info
  
  RMAN> restore controlfile from 'd:\DB92_CTL_20031113_9_1.BAK';
  
  Mout database:
  
  RMAN> recover database;
  
  RMAN> alter database open resetlogs;
  
  注意:对数据库设定控制文件保存备份信息为365天,具体语句如下。
  
  alter system set control_file_record_keep_time=365 SCOPE=BOTH;
  
  3.3.2 Archive Log
  
  设置Archive Log 的位置,确保存储介质有足够的空间来保留指定时间内archive log的总量。建设定期对RMAN进行全备份,删除冗余归档日志文件。
  
  3.3.3 全备份策略
  
  对于小容量数据库,可以采用全备份策略。对于大容量数据库,必须制定全备份策略方案,备份时对archive log进行转储,同时冷备份catalog 数据库。
  
  3.3.4 增量备份策略
  
  对于大容量数据库,必须制定增量备份、累积备份和全备份的周期,备份时对archive log进行转储,同时冷备份catalog 数据库。
  
  3.3.5 恢复原则
  
  采用Rman脚本进行数据库恢复。数据库恢复有以下几种:
  
  3.3.5.1 局部恢复
  
  主要用于恢复表空间、数据文件,一般不影响数据库其他操作。
  
  3.3.5.2 完全恢复
  
  数据库恢复到故障点,由catalog当前数据库决定。
  
  3.3.5.3 不完全恢复
  
  恢复到数据库的某一时间点或备份点。
  
  恢复catalog数据库。
  
  恢复数据库control file 。
  
  恢复到数据库某一时间点。
  
  重设日志序列。
  
  3.4 备用数据库原则
  数据库系统在以下情况下可以考虑采用备用数据库data guard原则:
  
  数据库容量适中。
  
  数据库严格要求7*24不间断,或间断时间要求控制在最小范围内。
  
  数据库要求有异地备份冗余。
  
  3.5 一些小经验
  使用oemc的oms时,首选项要求是节点和数据库分别加入系统用户(如:administrator)和数据库DBA用户(system)。节点的系统用户必须有批处理作业登录的权限
  
  agent 不能启动,lisnter修改后都要手动删除oracle\ora9\network\agent 中的*.q文件
  
  oracle\admin\my9i\bdump 中是用户的出错日志
  
  改变表的空间的方式alter table hr.ssss move TABLESPACE example(要重建索引); 或用imp导入时,设定导入用户只有某一表空间的使用权,无RESOURCE角色和UNLIMITED TABLESPACE权限
  
  aleter system set log_checkpoint_to_alter=true,后可报警文件发现checkpoint的起动和结束时间。
  
  3.6 系统调优知识
  3.6.1.1 生成状态报表(statspack的使用)
  
  使用(存放位置@?\rdbms\admin\)的文件生成报表用户
  
  @?\rdbms\admin\Spcreate.sql建表
  
  将timed_statistics设定true
  
  使用生成的perfstat用户登录,执行以下语句手动收集信息
  
  Exex statspack.snap
  
  Exec statspack.snap(I_SNAP_LEVEL=>0,I_MODEFY_PRAMETER=>TRUE) 0级,最少10最大
  
  使用下面的语句生成状态报表
  
  @?\rdbms\admin\Spreport.sql
  
  其他相关文件
  
  delete stats$snapshot ;清原来记录数据
  
  @?\rdbms\admin\Saputo.sql
  
  select job from user_jobs 取用户作业号
  
  exec dbms_remove(作业号)
  
  timed_statistics=true要求
  
  @?\rdbms\admin\spdrop.sql ;
  
  3.6.1.2 sql追踪
  
  设定全部用户跟踪
  
  alter system set sql_trace=true;
  
  用户级别跟踪
  
  alter session set sql_trace=true;
  
  用户的跟踪文件生成在 admin\{pid}\udump\{pid} _ora_{ SPID}.trc 中,spid从下面语句得到
  
  SELECT b.name bkpr, s.username, p.spid,s.sid,s.serial# FROM v$bgprocess b, v$session s, v$process p WHERE p.addr = b.paddr(+) AND p.addr = s.paddr and s.username=user;
  
  DBA对特定用户跟踪
  
  exec dbms_system_set_Sql_trace_in_session(sid,serial#,true)
  
  信息从下面得到
  
  SELECT b.name bkpr, s.username, p.spid,s.sid,s.serial#,osuser,s.program
  
  FROM v$bgprocess b, v$session s, v$process p
  
  WHERE p.addr = b.paddr(+)
  
  AND p.addr = s.paddr;
  
  /*p.spid用于sql_trace时日志编号,dbms_system.set_sql_trace_in_session(sid,erial#,true)*/
  
  用户的跟踪文件生成在 admin\{pid}\udump 中
  
  系统的跟踪文件生成在admin\{pid}\bdump\alert_{pid}.log
  
  tkprof.exe将log文件生成格式化文本
  
  在av Rd(ms) 20以上说明表空间使用过用频繁,考虑将表分开其他表空间上
  
  系统变量fast_start_mttr_target的值要大到不产生log等待,当然也可通过加log组使其不等待
  
  reao log大小应为每30分钟切换一次
  
  建议表空间的利用率不超80%
  
  buffer hit 要达80%以上为好
  
  3.6.1.3 内存调整
  
  一般的内存分配原则
  
  SGA 50%(其中80% DATA BUFFER,15% SHARE POOL,5其他)
  
  PGA30%
  
  OS 20%
  
  例如:2G的WINDOWS的平台,OS 300M,SAG 1.2G,PGA 500M内存

 

posted @ 2009-02-27 15:16  AK47+  阅读(295)  评论(0编辑  收藏  举报