对于Oracle的Flashback来说,在11g里面有了一个很细微的变化,可以说是一个很不错的福利,那就是开启闪回不需要重启数据库至mount状态下,归档模式下open状态就可以开启,关闭。
但是有一点自己也记不太清楚了,那就是有时候数据库开启/关闭很容易,有的时候却需要额外花点功夫。今天索性花了点时间理了理。
查看是否开启闪回数据库,可以简单使用下面的方式。
SQL> select database_role,flashback_on from v$database;
DATABASE_ROLE FLASHBACK_ON
-------------------------------- ------------------------------------
PHYSICAL STANDBY YES
如果要关闭,就需要一个命令即可。
SQL> alter database flashback off;
Database altered.
我在备库上测试的情况如下:
在open状态下,尝试开启抛出了ORA-00153的错误。
SQL> alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-01153: an incompatible media recovery is active
隐隐记得在有些数据库中是可以直接开启的,为什么在这个环境就不行了?
难道是闪回区设置有问题?
查看闪回区的使用率,可以看到闪回区是没有问题的。
SQL> select * from v$flash_recovery_area_usage
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE 0 0 0
REDO LOG 1.71 0 7
ARCHIVED LOG 5.19 0 38
BACKUP PIECE 0 0 0
IMAGE COPY 0 0 0
FLASHBACK LOG 0 0 0
FOREIGN ARCHIVED LOG 0 0 0
不大确定,查看了下MetaLink,找到一篇文档的说明。
ORA-1153 trying to turn on Flashback for Physical Standby Database (Doc ID 1286863.1)
Solution如下
In order to enable the flashback, the recovery has to be stopped.
You can use the following command to stop the recovery on standby database
SQL> alter database recover managed standby database cancel;
- Enable Flashback :
SQL> alter database flashback on;
- Start the managed recovery again
SQL> alter database recover managed standby database disconnect from session;
当然在操作的时候,发现日志中竟然抛出了Kernel相关的小错误。
Managed Standby Recovery not using Real Time Apply
Parallel Media Recovery started with 64 slaves
Wed Sep 07 10:29:01 2016
Errors in file /U01/app/oracle/diag/rdbms/snewtest2/newtest2/trace/newtest2_pr03_67053.trc:
ORA-27090: Unable to reserve kernel resources for asynchronous disk I/O
Additional information: 3
Additional information: 128
Additional information: 166023704
Warning: recovery process PR03 cannot use async I/O
这个问题,自己在以前的博客也讨论过
http://blog.itpub.net/23718752/viewspace-1700615/
当然Oracle有下面的链接可供参考,对于内核参数的设置还是有一些很详细的建议。
Oracle Validated Configuration:
http://linux.oracle.com/pls/apex/f?p=102:2:2007385298933639::NO::P2_VC_ID:426
比如文档中的建议为:
fs.aio-max-nr= 3145728
当然我们可以查看当前系统的aio配置情况。
[oracle@snewtest2 trace]$ cat /proc/sys/fs/aio-max-nr
65536
修改这个内核参数的设置,即可生效,这个问题就引刃而解了。
sysctl -w fs.aio-max-nr=3145728
当然关于aio的设置,想了解更多,可以参考。
https://www.pythian.com/blog/troubleshooting-ora-27090-async-io-errors/
而为什么Flashback on,off在有些数据库可以很轻松的使用呢,发现对于主库可以随意切换,对于备库需要先停止应用日志,开启Flashback database,再继续开启日志应用。
SQL> alter database flashback off;
Database altered.
SQL> alter database flashback on;
Database altered.