分类: Oracle
Oracle开启归档模式及修改归档路径

Oracle10G和11G默认的日志归档路径为闪回恢复区($ORACLE_BASE/flash_recovery_area)。对于这个路径,ORACLE有一个限制,就是默认只有2G的空间,而且不只是归档日志的默认路径,也是备份文件和闪回日志的默认地址,这样的话归档日志锁使用的空间就达不到2G,在没有设置好这个路径大小的情况下,很多系统都遇到过 归档日志满而无法归档导致数据库夯住的问题。
切换到归档模式之前,做一次完全备份,因为非归档日志模式下产生的备份日志对于归档模式已经不可用了.

查看是否为归档模式

SQL> archive log list
Database log mode              No Archive Mode     #数据库日志模式             非存档模式
Automatic archival             Disabled            #自动存档             禁用
Archive destination            USE_DB_RECOVERY_FILE_DEST    #存档终点            USE_DB_RECOVERY_FILE_DES
Oldest online log sequence     13            #最早的联机日志序列        13
Current log sequence           15            #当前日志序列             15

上面的存档终点USE_DB_RECOVERY_FILE_DEST默认就是闪回恢复区($ORACLE_BASE/flash_recovery_area),可以通过下面的SQL查看闪回恢复区的信息。

SQL> show parameter db_recove

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /data/app/oracle/flash_recover
                                                 y_area
db_recovery_file_dest_size           big integer 3882M

通过上面的SQL结果可以看到,闪回恢复区为/data/app/oracle/flash_recover,大小为3882M,这个大小安装时可以设置调整;
默认情况下,归档日志会存放到闪回恢复区(D:oracleflash_recovery_area)内,如果闪回恢复区已经使用到3882M,归档日志就有可能无法继续归档,数据库卡住,通常的解决方法是增大闪回恢复区

alter system set db_recovery_file_dest_size = 10G;        #调整归档日志空间大小为10G

System altered.

用这种方法解决的当前燃眉之急,但是如果备份策略不是很完善,数据库非常繁忙的情况下,还有可能遇到这种情况,通常需要修改归档日志的路径,将归档日志放到其他不受限制的路径下来解决这个问题,可通过下面的SQL来修改归档日志的存放路径。
先用oracle账号创建目录

mkdir -p /data/app/oracle/archive_log
SQL> alter system set log_archive_dest_1='location=/data/app/oracle/archive_log';

System altered.

然后将数据库启动到MOUNT状态,将数据库修改为归档模式后建数据库启动到OPEN状态。

SQL> shutdown immediate;    (立即关闭数据库)
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;    (启动实例并加载数据库,但不打开)
ORACLE instance started.

Total System Global Area 3290345472 bytes
Fixed Size                  2217832 bytes
Variable Size            1795164312 bytes
Database Buffers         1476395008 bytes
Redo Buffers               16568320 bytes
Database mounted.
SQL> alter database archivelog;     (更改数据库为归档模式) 

Database altered.

SQL> alter database open;    (打开数据库) 

Database altered.

SQL> alter system archive log start; (启用自动归档)  
再次查看数据库的归档情况

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /data/app/oracle/archive_log
Oldest online log sequence     13
Next log sequence to archive   15
Current log sequence           15
SQL> show parameter db_recove

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /data/app/oracle/flash_recover
                                                 y_area
db_recovery_file_dest_size           big integer 10G

至此归档模式已启用,归档空间大小为10G,归档目录为 /data/app/oracle/flash_recover

可以通过切换日志,查看归档路径下是否有归档日志产生来验证归档路径设置是否正确,可以通过下面的命令切换日志

SQL> alter system switch logfile;

System altered.
查看归档日志已经产生了

[oracle@CentOS6 archive_log]$ ll /data/app/oracle/archive_log/
total 32280
-rw-r-----. 1 oracle oinstall 31155712 Jul 27 10:02 1_15_950205032.dbf
改变归档模式到非归档模式:
1)SQL>SHUTDOWN NORMAL/IMMEDIATE;    
2)SQL>STARTUP MOUNT;    
3)SQL>ALTER DATABASE NOARCHIVELOG;    
4)SQL>ALTER DATABASE OPEN;
3.归档相关命令

archive log stop; 
archive log start; 
archive log list; 

show parameters; 
show parameters log_archive_start; 
show parameters log_archive_max_process; #归档进程数 
alter system set log_archive_max_process=5; #将归档进程数改为5 
select * from v$bgprocess; #检察后台进程 


相关博文:

发表新评论