oracle如何设置归档到指定路径不使用闪回区?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle如何设置归档到指定路径不使用闪回区?相关的知识,希望对你有一定的参考价值。

oracle版本11g

可以alter system 用户登录数据库后发出
alter system set log_archive_dest_1='location=路径' scope=both(或memory,不使用该参数时全变更spfile 和memory);
即可变更。
在mount或open状态都可以。我在linux下修改成功。
参考技术A 0版本的ORACLE 1-开启归档功能,使数据库处于归档模式下 先关闭数据库:shutdown immediate 启动到mount状态:startup mount 开启归档功能:alter database 参考技术B 试试改下这个参数看看,db_recovery_file_dest,手头没有环境所以不太确定

单纯修改oracle归档路径需要关闭数据库吗

更改ORACLE归档路径及归档模式

在ORACLE10g和11g版本,ORACLE默认的日志归档路径为闪回恢复区($ORACLE_BASE/flash_recovery_area)。对于这个路径,ORACLE有一个限制,就是默认只有2G的空间,而且不只是归档日志的默认路径,也是备份文件和闪回日志的默认地址,这样的话归档日志锁使用的空间就达不到2G,在没有设置好这个路径大小的情况下,很多系统都遇到过归档日志满而无法归档导致数据库夯住的问题,可以使用下面的SQL语句去查看归档信息。

SQL> archive log list
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 321
当前日志序列 326。

上面的存档终点USE_DB_RECOVERY_FILE_DEST默认就是闪回恢复区($ORACLE_BASE/flash_recovery_area),可以通过下面的SQL查看闪回恢复区的信息。
www.2cto.com
SQL> show parameter db_recover
NAME TYPE VALUE
-------------------------- ----------- ----------------------------
db_recovery_file_dest string D:\\oracle\\flash_recovery_area
db_recovery_file_dest_size big integer 2G

通过上面的SQL结果可以看到,闪回恢复区为D:\\oracle\\flash_recovery_area,大小为2G,也可以通过查询v$recovery_file_dest视图查看闪回恢复的限制信息。

SQL> select name,SPACE_LIMIT,SPACE_USED from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED
------------------------------ ----------- ----------
D:\\oracle\\flash_recovery_area 2147483648 21225472

默认情况下,归档日志会存放到闪回恢复区(D:\\oracle\\flash_recovery_area)内,如果闪回恢复区已经使用到2G,归档日志就有可能无法继续归档,数据库夯住,通常的解决方法是增大闪回恢复区,可以用以下SQL实现。

SQL> alter system set db_recovery_file_dest_size=3G;
系统已更改。

即使用这种方法解决的当前燃眉之急,虽然闪回恢复区ORACLE会自动管理,如果闪回恢复区空间不足就会清理掉没用的数据,但是如果备份策略不是很完善,数据库非常繁忙的情况下,还有可能遇到这种情况,通常需要修改归档日志的路径,将归档日志放到其他不受限制的路径下来解决这个问题,可通过下面的SQL来修改归档日志的存放路径。

SQL> alter system set log_archive_dest_1=\'location=D:\\arch\';
系统已更改。 www.2cto.com

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

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。

再次查看数据库的归档情况。

SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 D:\\arch
最早的联机日志序列 321
下一个存档日志序列 326
当前日志序列 326

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

SQL> alter system switch logfile;
系统已更改。 www.2cto.com

查看归档路径(D:\\arch)下是否有归档路径产生。

D:\\arch>dir/b
ARC0000000326_0764368160.0001

可以看到在D:\\arch路径下已经产生了归档日志,归档日志的名字受log_archive_format参数限制,可以通过下面的命令查看。

SQL> show parameter log_archive_format
NAME TYPE VALUE
---------------------- ------------ ------------
log_archive_format string ARC%S_%R.%T

上面产生的归档文件名字为ARC0000000326_0764368160.0001,%S也就是0000000326是日志切换号,也就是上文archive log list中的当前日志序列,%R是场景号,%T是线程号,可以理解成是节点号,如果不是RAC环境,%T都是1,还可以在log_archive_format参数值中加上%D,%D是16进制标识的DBID,如下演示:

SQL> alter system set log_archive_format=\'ARC%S_%R.%T_%D.log\' scope=spfile;
系统已更改。 www.2cto.com
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
数据库装载完毕。
数据库已经打开。
SQL> alter system switch logfile;
系统已更改。

查看归档日志的名字,5AA14A62就是16进制的DBID。

D:\\arch>dir/b
ARC0000000326_0764368160.0001
ARC0000000327_0764368160.0001_5AA14A62.LOG
参考技术A 修改归档路径不需要关闭数据库,只需要直接在sqlplus环境执行修改路径的命令即可。
修改命令为:alter system setdb_recovery_file_dest='d:\archivelog'; ----路径为任意存在的目录

只有在开启或者关闭归档模式的时候才需要关闭数据库。

以上是关于oracle如何设置归档到指定路径不使用闪回区?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 数据库归档满处理办法

oracle 闪回区故障

oracle闪回区介绍与监控

单纯修改oracle归档路径需要关闭数据库吗

Oracle闪回

更改ORACLE归档路径及归档模式