升级失败后,数据库降级方案(flashback database)
环境:Oracle 11.2.0.1 rac on redhat 5.8
Flashback database 准备工作
查看是否flashback database功能
sys@RACDB>
select log_mode,open_mode,flashback_on from
v$database;
LOG_MODE OPEN_MODE FLASHBACK_ON
------------ -------------------- ------------------
ARCHIVELOG READ WRITE NO -- 未开启flashback database 功能
查看是否设置了闪回目录、闪回目录空间大小
sys@RACDB> show parameter db_recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 0
-- 显然我们没有设置,下面为设置后
alter system set db_recovery_file_dest='+DATA' scope=spfile sid='*'; -- 重启后生效
alter system set db_recovery_file_dest_size=4g;
sys@RACDB> show parameter db_recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +DATA
db_recovery_file_dest_size big integer 4G
设置闪回保留期
sys@RACDB> show parameter db_flashback
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440 -- 缺省单位为分钟
Flashback database 开启工作
开启flashback database功能
sys@RACDB> alter database flashback on;
Database altered.
sys@RACDB> select status from gv$instance;
STATUS
------------
OPEN
OPEN
sys@RACDB> select log_mode,open_mode,flashback_on from v$database;
LOG_MODE OPEN_MODE FLASHBACK_ON
------------ -------------------- ------------------
ARCHIVELOG READ WRITE YES –-开启了flashback database功能
oracle 10.2.0.1
开启flashback database
需要在mount,且只有一个实例的情况下,否则会报错
ORA-38759: Database must be mounted by only one instance and not open.
oracle 11.2.0.1
开启flashback database在open状态下,且多个实例共存,没有任何问题
查看允许闪回的最早时间点
select oldest_flashback_scn
old_flhbck_scn,oldest_flashback_time old_flhbck_tim,
retention_target rete_trgt,flashback_size/1024/1024 flhbck_siz,
estimated_flashback_size/1024/1024 est_flhbck_size
from v$flashback_database_log;
OLD_FLHBCK_SCN OLD_FLHBCK_TIM RETE_TRGT FLHBCK_SIZ EST_FLHBCK_SIZE
-------------- ------------------- ---------- ---------- ---------------
1602195 2013-08-08 16:48:34 1440 15.625 0
Flashback database 使用范例
1 、创建一个restore point
升级失败后,降级时使用flashback database to restore point upgrade_dou;。
sys@RACDB> create restore point upgrade_dou guarantee flashback database;
Restore point created.
sys@RACDB> select oldest_flashback_scn old_flhbck_scn,oldest_flashback_time old_flhbck_tim,
2 retention_target rete_trgt,flashback_size/1024/1024 flhbck_siz,
3 estimated_flashback_size/1024/1024 est_flhbck_size
4 from v$flashback_database_log;
OLD_FLHBCK_SCN OLD_FLHBCK_TIM RETE_TRGT FLHBCK_SIZ EST_FLHBCK_SIZE
-------------- ------------------- ---------- ---------- ---------------
1602195 2013-08-08 16:48:34 1440 15.625 143.8125
2 、flashback database使用restore point
降级时
数据库必须是mount状态
sys@RACDB>
flashback database to restore point upgrade_dou;
flashback database to restore point upgrade_dou
*
ERROR at line 1:
ORA-38757: Database must be mounted and not open to FLASHBACK.
Flashback database 必须resetlogs open数据库
sys@RACDB> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
RAC 环境中alter database open resetlogs;时有且只有一个实例执行resetlogs
idle> select status from gv$instance;
STATUS
------------
MOUNTED
MOUNTED
idle> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-38777: database must not be started in any other instance
关闭一个节点
idle> select status from gv$instance;
STATUS
------------
MOUNTED
idle> alter database open resetlogs;
Database altered.
检查RAC节点恢复情况
另一个节点也open
idle> select status from gv$instance;
STATUS
------------
OPEN
OPEN
idle>
select current_scn from gv$database;
CURRENT_SCN
-----------
1628773
1628774
附表
查看允许闪回的最早时间点
select oldest_flashback_scn old_flhbck_scn,oldest_flashback_time old_flhbck_tim,
retention_target rete_trgt,flashback_size/1024/1024 flhbck_siz,
estimated_flashback_size/1024/1024 est_flhbck_size
from v$flashback_database_log;
查看sga中分配的闪回空间大小
select
*
from
v$sgastat
where
name
like
'flashback%';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool flashback generation buff 3981204
shared pool flashback_marker_cache_si 9196
查看闪回区的使用情况
select name,space_limit/1024/1024 sp_limt,space_used/1024/1024 sp_usd,space_reclaimable/1024/1024 sp_recl,number_of_files num_fils from v$recovery_file_dest;
NAME
----------------------------------------------------------------------------------------------------
SP_LIMT SP_USD SP_RECL NUM_FILS
---------- ---------- ---------- ----------
+DATA
4096 36 0 3
使用flashback database闪回数据库
步骤(前提归档日志可用)
关闭数据库
启动数据库到mount状态(exclusive模式)
闪回至某个时间点,SCN或log sequence number
使用resetlogs打开数据库
1. 使用sqlplus实现闪回
可以接受一个时间标记或一个系统改变号实参
sqlplus 几种常用的闪回数据库方法
FLASHBACK [STANDBY]
DATABASE [
FLASHBACK [STANDBY]
DATABASE [
FLASHBACK [STANDBY]
DATABASE [
如下面的示例:
SQL> flashback database to timestamp('2010-10-24 13:04:30','yyyy-mm-dd hh24:mi:ss');
SQL> flashback database to scn 918987;
SQL> flashback database ro restore point b1_load;
2. 使用RMAN进行flashback database
使用RMAN进行闪回数据库的几种常用办法
RMAN> flashback database to scn=918987;
RMAN> flashback database to sequence=85 thread=1;
参考文献:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26442936/viewspace-768080/ ,如需转载,请注明出处,否则将追究法律责任。