day16——oracle灾备2

切换

85上主库
SQL> select process from v$managed_standby;

82上备库
SQL> select process from v$managed_standby;
(上面都有相关进程就正确了)
SQL> select open_mode from v$database;


案例1:灾备系统要求最多允许丢失2小时数据
解决办法:
SQL> show parameter archive 
archive_lag_target                   integer     0
(archive_lag_target为切换间隔,秒为单位,最大值为7200秒)

SQL> select 2*60*60 from dual;
SQL> alter system set archive_lag_target=7200;


案例2:灾备系统要求不允许丢失任何数据
办法1:分布式日志存储
办法2:数据镜像(存储层)

=============================================
角色切换
(无损切换,主库不坏切换,如测试备库,主库升级)

查看角色状态
SQL> select database_role from v$database;

(1)检查主库是否具有切换的状态
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
(不具备切换状态,还有其他会话)


2.切换主库到备库 并关闭会话
85上
SQL> ALTER DATABASE commit TO switchover TO physical standby WITH SESSION shutdown;
SQL> startup mount force;

SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PHYSICAL STANDBY
(主库变成了备库)


82上查看
SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PHYSICAL STANDBY
(结果也是备库)


3.把备库变成主库
备库查看状态
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
(可以切换到主库)

SQL> alter database commit to switchover to primary;(切换)
SQL> startup mount force;

SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PRIMARY
(变为主库)
SQL> alter database open;

4.验证
82主库上
SQL> select process from v$managed_standby;
有lns

85备库上
SQL> select process from v$managed_standby;
有RFS
没有MRP0
SQL> alter database recover managed standby database disconnect from session;

===========================
((角色切换  如果报16416错误
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database create standby controlfile as '/home/oracle/archive/sdtby_control01.ctl';

82备库上
SQL> create spfile from pfile;
SQL> shutdown immediate

85主库上
[oracle@sq123 archive]$ scp sdtby_control01.ctl oracle@192.168.8.2:/home/oracle/archive

82备库上
SQL> startup mount

SQL> ALTER DATABASE commit TO switchover TO physical standby WITH SESSION shutdown;
))

==============================
主库失败有损恢复

主库
SQL> shutdown immediate

备库
SQL> alter database recover managed standby database finish force;
(force为停止当前rfs进程,进行恢复)

SQL> alter database commit to switchover to primary;

SQL> alter database open;


===================================

监控恢复进度
(1)查看进程的活动状态
V$MANAGED_STANDBY视图专用于显示物理Standby数据库相关进程的当前状态,该视图中的列也很有特点,查看进程状态时,通常我们会关注PROCESS、CLIENT_PROCESS、SEQUENC#和STATUS几列,例如:
SQL> SELECT PROCESS,CLIENT_PROCESS,SEQUENCE#, STATUS FROM V$MANAGED_STANDBY;
PROCESS   CLIENT_P  SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH      ARCH        78  CLOSING
ARCH      ARCH        79  CLOSING
MRP0      N/A          80  WAIT_FOR_LOG
RFS       LGWR        80  IDLE
RFS       ARCH         0  IDLE
RFS       N/A            0  IDLE
相关说明:
PROCESS:进程名称,如ARCH、RFS、MRP0等。
CLIENT_P:对应的Primary数据库中的进程,如ARCH、LGWR等。
SEQUENCE#:归档序号。
STATUS:进程的当前状态,值较多,常见的有:
1)ALLOCATED:正准备连接Primary数据库。
2)ATTACHED:正在连接Primary数据库。
3)CONNECTED:已连接至Primary数据库。
4)IDLE:空闲中。
5)RECEIVING:归档文件接收中。
6)OPENING:归档文件处理中。
7)CLOSING:归档文件处理完,收尾中。
8)WRITING:REDO数据库写向归档文件中。
9)WAIT_FOR_LOG:等待新的REDO数据中。
10)WAIT_FOR_GAP:归档有中断,正等待中断的那部分REDO数据。
11)APPLYING_LOG:应用REDO数据中。
(2)检查REDO应用进度
V$ARCHIVE_DEST_STATUS视图显示归档文件路径配置信息及REDO的应用情况等,例如:
SQL> SELECT DEST_NAME,ARCHIVED_THREAD#,ARCHIVED_SEQ#,APPLIED_THREAD#,APPLIED_SEQ#,
DB_UNIQUE_NAME FROM V$ARCHIVE_DEST_STATUS WHERE STATUS='VALID';
DEST_NAME ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_THREAD# APPLIED_SEQ# DB_UNIQUE_NAME
-------------------- ---------------- ------------- --------------- ------------ ------------------------------
LOG_ARCHIVE_DEST_1         1          79              0            0      NONE
STANDBY_ARCHIVE_DEST      1          78              1           78     NONE
(3)检查归档文件路径和创建信息
物理Standby数据库端可以通过查询V$ARCHIVED_LOG视图,获取归档文件的一些附加信息,如文件创建时间、创建进程、归档序号、是否被应用等,例如:
SQL>  SELECT NAME,CREATOR,SEQUENCE#,APPLIED,COMPLETION_TIME FROM V$ARCHIVED_LOG;
NAME                                               CREATOR  SEQUENCE# APP COMPLETIO
-------------------------------------------------- ------- ---------- --- ---------
/u01/archive/1_1_717413573.dbf                     ARCH             1 YES 30-APR-10
/u01/archive/1_3_717413573.dbf                     ARCH             3 YES 30-APR-10
… …
/u01/archive/1_78_717413573.dbf                    ARCH            78 YES 01-MAY-10
/u01/archive/1_79_717413573.dbf                    ARCH            79 YES 02-MAY-10
(4)查询归档历史
物理Standby数据库端通过V$LOG_HISTORY视图,可以查询所有已被应用的归档文件信息(无论该归档文件是否还存在),例如:
SQL> SELECT FIRST_TIME,FIRST_CHANGE#,NEXT_CHANGE#, SEQUENCE# FROM V$LOG_HISTORY;
FIRST_TIM FIRST_CHANGE# NEXT_CHANGE#  SEQUENCE#
--------- ------------- ------------ ----------
27-APR-10        446075       475833          1
27-APR-10        475833       489482          2
… …
30-APR-10        544929       590113         78
01-MAY-10        590113       652357         79
仍然通过该视图,稍稍修改下SQL语句,就可以查询到最后应用的归档文件,例如:
SQL> SELECT THREAD#, MAX(SEQUENCE#) AS "LAST_APPLIED_LOG" FROM V$LOG_HISTORY GROUP BY THREAD#;
THREAD# LAST_APPLIED_LOG
---------- ----------------
1               79
当然也可以通过查询V$ARCHIVED_LOG视图中的APP列获得相同的功能,例如:
SQL> SELECT THREAD#, SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG;







posted @ 2016-03-21 21:32  暗夜小精灵~~  阅读(180)  评论(0编辑  收藏  举报