新人安装Oracle常见的问题是规划不合理,如果是个人或者开发用或者可以,但如果放在线上生产环境,常带来可靠性和性能的隐患,给运维增加成本。
例如:
1.oracle控制文件和在线重做日志没有实现多路镜像,导致数据库可靠性降低。
2.没有依据IO负载 对数据文件进行调整,导致各磁盘IO不均衡,个别磁盘IO过高。
Av Av Tablespace Reads Reads/s Writes Writes/s -------------- ------- ------ -- -------- --------- DATALIST 539,798 152 101,605 29 TEMP 187,745 53 110,712 31 INDEXFLUX 125,182 35 25,469 7 DATAFLUX 55,270 16 852 0 DATACFG 48,725 14 5,365 2 UNDOTBS1 1,463 0 39,789 11 INDEXLIST 11,268 3 15,265 4 INDEXCFG 13,359 4 4,512 1 SYSTEM 6,557 2 325 0 DATAEXAM 3,016 1 451 0 SYSAUX 2,231 1 386 0 INDEXPATH 671 0 278 0 INDEXEXAM 405 0 19 0 DATAPATH 326 0 84 0
1. 规划原则:
- 将控制文件分别部署到不同的磁盘。
-
a) Alter system set control_files='/oradata1/dbnms/ control01.ctl, /oradata2/dbnms/ control02.ctl' scope=spfile; b) 关闭数据库 c) 物理移动控制文件到指定目录
- 在线重做日志至少分为三个组,每组至少两个成员,分别部署到不同的磁盘上。
-
(1)增加日志组: ALTER DATABASE ADD LOGFILE GROUP <n> ‘日志文件’ SIZE <n>; (2)删除日志组: ALTER DATABASE DROP LOGFILE GROUP <n>; (3)增加日志成员: ALTER DATABASE ADD LOGFILE MEMBER ‘日志文件’ TO GROUP <n>; (4)删除日志成员: ALTER DATABASE DROP LOGFILE MEMBER ‘日志文件’ ;
- 将表空间按照IO负载高低均衡分布到不同的磁盘上。
- 重做日志和回滚表空间文件和临时表空间要放到IO速度快的磁盘上,raid10的IO比raid5好。
[现场]
SYS AS SYSDBA> archive log list
数据库日志模式 非存档模式
自动存档 禁用
[问题]
数据库无法恢复的风险非常高。多次数据库故障由于没有开启归档,导致恢复时间从半小时以内延长到了几个小时甚至几天。
2. 开启归档日志
- 开启数据库归档模式
1.关闭数据库
SQL> shutdown immediate;
2.启动数据库为mount模式
SQL> startup mount
3.显示和修改归档模式
SQL> archive log list
SQL> alter database archivelog;
SQL> alter database open
4.设置归档日志的格式
SQL>alter system set log_archive_format='ARC%s%t%r.log' scope=spfile;
6.强制切换归档日至
SQL>alter system switch logfile;
7.取消归档
SQL>alter database noarchivelog;
- 修改数据库参数,将归档日志目录设置在空间大的磁盘分区上
设置归档日志的存放路径
SQL>alter system set log_archive_dest='+data/arcl' scope=spfile;
SQL>shutdown immediate
SQL>startup
- 设置好归档日志自动清除脚本,归档日志保留时间越久越好。
- 启动闪回数据库
http://blog.sina.com.cn/s/blog_a3813a410101066l.html
SQL>select FLASHBACK_ON from v$database;
FLASHBACK_ON
------------------------------------
YES
SQL>startup mount
SQL>alter database flashback on;
数据库已更改。
SQL> alter database open;
数据库已更改。
- 设置闪回数据库参数
如果设置了闪回恢复区,则log_archive_dest和log_archive_duplex_dest将不可用
- oracle中log_archive_dest_n和log_archive_dest不能共存
SYS AS SYSDBA> show parameters flash
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440
SYS AS SYSDBA> show parameters recover
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /oracle/flash_recovery_area
db_recovery_file_dest_size big integer 2G
- 监控闪回数据库空间利用
SQL> select * from v$flash_recovery_area_usage;
增加闪回区(Flash Recovery Area)的大小。
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE =20G SCOPE=BOTH SID='*';
3. 数据库模式
专有模式和共享模式中要 优先选择专有模式
4. 参数调整
dbfiles -> 2000 数据库的数据文件总数
processes -> 2000 数据库支持的服务进程数
sessions ->3000 数据库支持的session上限
shared_servers -> 0 专有|共享模式开关,0-〉专有
db_recovery_file_dest /oracle/flash_recovery_area
sga_max_size ->物理内存的50%
sga_target -> 物理内存的50%
pga_aggregate_target -> 2M*预计session数
cursor_sharing -> EXACT
db_writer_processes -> cpu核数/2
job_queue_processes -> 5 如果等于0,oracle的job不执行