一、什么是dg
DG是由一个生产数据库和一个或多个(最多9个)备用数据库构成。
生产库通常叫做主库,其他备用数据库叫做standby数据库
standby库可以通过Oracle Net连接并可以分布在不同地理位置。
当主库出现计划和非计划宕机时,任何一个备用数据库切换为生产数据库角色,从而最小化中断引起的宕机时间。
二、物理备库
基于块对块的与主数据库一致的数据库结构,提供主数据库的完全一致的物理拷贝。
物理备库和主数据库之间通过redo apply保持同步,接受到主库的redo后,以recover模式应用到备库
物理备库只能在mount下应用redo,open模式也只能选择read only。
一旦以read write打开,则备库损坏。
三、开启关闭DG
开启 DG
启动备库(mount)——启动主库(open)——启动备库日志同步
具体操作
登录备库:$lsnrctl start
SQL>startup mount;
登录主库:$lsnrctl start
SQL>startup
登录备库:
SQL> alter database recover managed standby database disconnect from session;
关闭 DG(请确保应用程序已经断开数据库连接或关闭)
关闭备库日志同步——关闭主库——关闭备库
具体操作
登录备库:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
登录主库:
SQL>shutdown immediate
$lsnrctl stop
登录备库
SQL>shutdown immediate
$lsnrctl stop
四、如何查看备库是否应用日志
主库检查
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY
SEQUENCE#;
查询结果如下
SEQUENCE# FIRST_TIM NEXT_TIME
-----------------------------------------------------------------------
14 05-JAN-17 05-JAN-17
14 05-JAN-17 05-JAN-17
15 05-JAN-17 05-JAN-17
05-JAN-17 05-JAN-17
备库检查
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY
SEQUENCE#;
查询结果如下
SEQUENCE# FIRST_TIM NEXT_TIME
--------------------------------------------------------------------
14 05-JAN-17 05-JAN-17
15 05-JAN-17 05-JAN-17
检查日志是否被备库使用(APPLIED 值为 yes)
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# APPLIED
--------------------------------------------------------
12 YES
13 YES
14 YES
15 YES
三种模式:
最大保护模式:主库的每个事物的redo日志必须在本地和备库上都写入日志文件后才能提交,如果不能写入到备库,主库则会自动关闭(挂起)以防止数据库丢失。
最大可用性:主库每个事务的redo要写到本地和备库中才能提交。但与最大保护不同,如果写入失败,主库不会自动关闭。这时候主库会转换为最大性能模式,等待问题解决并且备库再次和主库同步之后,,主库则会自动转换回最大可用性。
最大性能:为缺省模式,侧重对主库的可用性不造成任何影响。主库上的事务redo只要写到本地日志文件就可以提交,不必等到备库的传递完成。
五、dg迁移数据文件(严格按照步骤)
主库:
1、shutdown immediate;(第二步)
2、cp ’数据文件旧路径‘ 到 ‘数据文件新路径’(第三步)
3、startup mount;(第四步)
4、alter database rename file '数据文件旧路径' to '数据文件新路径';(第五步)
5、alter database open;(第十步)
备库:
1、ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; (第一步)
2、alter system set standby_file_management=manual; (第六步)
3、cp '数据文件旧路径' 到 '数据文件新路径'(第七步)
4、alter database rename file '数据文件旧路径' to '数据文件新路径';(第八步)
5、alter system set standby_file_management=auto;(第九步)
6、alter database recover managed standby database disconnect from session;(第十一步)
六、删除归档日志
查看日志应用到哪里(备库查看)
select sequence#,applied from v$archived_log order by sequence#;(主备都要查)
类似这样:
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# APPLIED
--------------------------------------------------------
12 YES
13 YES
14 YES
15 YES
主库这样表示日志应用到15这个,如果后面为no表示没有应用,则不能删除
rman terget /
crosscheck archivelog all; (校验日志的可用性)
delete archvielog until sequence 15; (删除日志序列号15前包括15的所有日志)
七、删除归档日志
查看日志应用到哪里(备库查看)
select sequence#,applied from v$archived_log order by sequence#;(主备都要查)
类似这样:
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# APPLIED
--------------------------------------------------------
12 YES
13 YES
14 YES
15 YES
主库这样表示日志应用到15这个,如果后面为no表示没有应用,则不能删除
rman terget /
crosscheck archivelog all; (校验日志的可用性)
delete archvielog until sequence 15; (删除日志序列号15前包括15的所有日志)