------------------------------ 足行千里 -----------------------------------------
这个错误的原因,至今为止我个人发现有以下几个方面的原因:
1. 归档日志过多,空间不足
2. 归档日志存储路径不正确(主要存在于数据迁移或者rman异机恢复后,特别是不同构建下的恢复,如普通数据恢复到DG,或者RAC,如果参数文件没有进行相应调整,就会出问题,也或者是有人故意修改参数文件导致参数指向的路径,数据库无法识别)
如果有其他原因,小弟还没有发现的,请大拿不吝赐教!
查看闪回区状态:
1. 查看闪回区大小
show parameter db_recovery
会返回两个参数:
db_recovery_file_dest --对应闪回区路径
db_recovery_file_dest_size --对应闪回区总空间大小
假设 db_recovery_file_dest_size = n,下面查看闪回区使用情况时,会用到
2. 查看闪回区空间使用情况
通过该视图来查看v$flash_recovery_area_usage
select sum(percent_space_used) from v$flash_recovery_area_usage; --查看空间使用率
select n*sum(percent_space_used)/100 from v$flash_recovery_area_usage; --查看具体已用空间大小
解决方法:
1. 增加归档日志存储空间
alter system set DB_RECOVERY_FILE_DEST_SIZE=10g;
2. 删除归档日志
正确的删除归档日志,参见RMAN --> RMAN删除归档日志
3. 更改归档日志的存储路径
3.1 查看归档日志存储路径设置
SQL> show parameter log_archive_dest_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
通过以上命令我们看到,log_archive_dest_1 的值是空,这说明,该设置使用的默认值,默认存储位置位于闪回区。
这里需要注意的是,更改归档日志的存储路径不是更改log_archive_dest 的值,而是更改log_archive_dest_1的值。
3.2 执行更改命令
SQL> ALTER SYSTEM SET log_archive_dest_1 = 'location=D:/';
System altered
SQL> show parameter log_archive_dest_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string location=D:/
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
修改后,归档日志的存储路径就会存存储在D:/ 下,注意,该路径必须存在。
如果要改为默认值怎么办?把value的值变为空就好了。
alter system set log_archive_dest_1 = '';
如下:
SQL> alter system set log_archive_dest_1 = '';
System altered
SQL> show parameter log_archive_dest_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
---------------------------------- The End -----------------------------------------------
这个错误的原因,至今为止我个人发现有以下几个方面的原因:
1. 归档日志过多,空间不足
2. 归档日志存储路径不正确(主要存在于数据迁移或者rman异机恢复后,特别是不同构建下的恢复,如普通数据恢复到DG,或者RAC,如果参数文件没有进行相应调整,就会出问题,也或者是有人故意修改参数文件导致参数指向的路径,数据库无法识别)
如果有其他原因,小弟还没有发现的,请大拿不吝赐教!
查看闪回区状态:
1. 查看闪回区大小
show parameter db_recovery
会返回两个参数:
db_recovery_file_dest --对应闪回区路径
db_recovery_file_dest_size --对应闪回区总空间大小
假设 db_recovery_file_dest_size = n,下面查看闪回区使用情况时,会用到
2. 查看闪回区空间使用情况
通过该视图来查看v$flash_recovery_area_usage
select sum(percent_space_used) from v$flash_recovery_area_usage; --查看空间使用率
select n*sum(percent_space_used)/100 from v$flash_recovery_area_usage; --查看具体已用空间大小
解决方法:
1. 增加归档日志存储空间
alter system set DB_RECOVERY_FILE_DEST_SIZE=10g;
2. 删除归档日志
正确的删除归档日志,参见RMAN --> RMAN删除归档日志
3. 更改归档日志的存储路径
3.1 查看归档日志存储路径设置
SQL> show parameter log_archive_dest_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
通过以上命令我们看到,log_archive_dest_1 的值是空,这说明,该设置使用的默认值,默认存储位置位于闪回区。
这里需要注意的是,更改归档日志的存储路径不是更改log_archive_dest 的值,而是更改log_archive_dest_1的值。
3.2 执行更改命令
SQL> ALTER SYSTEM SET log_archive_dest_1 = 'location=D:/';
System altered
SQL> show parameter log_archive_dest_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string location=D:/
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
修改后,归档日志的存储路径就会存存储在D:/ 下,注意,该路径必须存在。
如果要改为默认值怎么办?把value的值变为空就好了。
alter system set log_archive_dest_1 = '';
如下:
SQL> alter system set log_archive_dest_1 = '';
System altered
SQL> show parameter log_archive_dest_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
---------------------------------- The End -----------------------------------------------
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25313300/viewspace-707777/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25313300/viewspace-707777/