一、环境准备
1、环境信息
192.168.184.161 主库
192.168.184.162 从库
2、主库环境准备
安装好单机的oracle11g数据库,可参考:
CentOS系统静默安装Oracle11g数据库
3、备库环境准备
备库只需要安装oracle软件和配置好监听,最后的建库不需要操作,可参考:
CentOS系统静默安装Oracle11g数据库
4、关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service
5、配置主机名
(1)主库
hostnamectl set-hostname primarynode
hostname primarynode
su -
(2)备库
hostnamectl set-hostname standbynode
hostname standbynode
su -
6、配置/etc/hosts
vim /etc/hosts
添加如下内容:
192.168.184.161 primarynode
192.168.184.162 standbynode
7、主库信息查询
默认单机安装完成后主库的一些信息
su - oracle
echo $ORACLE_SID
sqlplus / as sysdba
SELECT instance_name FROM v$instance;
SELECT value FROM v$parameter WHERE name = 'db_unique_name';
SELECT name FROM v$database;
SELECT value FROM v$parameter WHERE name='service_names';
二、主库进行DG配置
1、主库开启归档
(1)查看是否开启归档
archive log list;
没有则进行下面的操作
(2)关闭数据库
shutdown immediate;
(3)启动到mount状态
startup mount;
(4)开启归档
alter database archivelog;
(5)打开数据库
alter database open;
(6)重新查看
archive log list;
(7)查看归档路径
show parameter DB_RECOVERY_FILE_DEST
/home/oracle/app/oracle/flash_recovery_area
查看归档路径下内容
cd /home/oracle/app/oracle/flash_recovery_area
ll
/home/oracle/app/oracle/flash_recovery_area/orcl 存放的是控制文件
/home/oracle/app/oracle/flash_recovery_area/ORCL/onlinelog 存放的是归档日志,后面会用到这个地址
2、主库打开强制日志功能
(1)查询是否启用强制记录日志
select force_logging from v$database;
(2)打开强制日志功能
如果未启用,则使用下面语句来开启强制记录日志
alter database force logging;
3、主库参数配置
一共11个参数需要进行配置。这是关键,如果参数有误,那么搭建会失败。
(1)db_unique_name
alter system set db_unique_name = 'orcl11g' scope=spfile;
(2)log_archive_config
alter system set log_archive_config='DG_CONFIG=(orcl11g,orcl11gdg)' scope=spfile;
(3)log_archive_dest_1
查看归档日志路径
archive log list
show parameter DB_RECOVERY_FILE_DEST
我这里将日志放到这路径下
/home/oracle/app/oracle/flash_recovery_area/ORCL/onlinelog
alter system set log_archive_dest_1='LOCATION=/home/oracle/app/oracle/flash_recovery_area/ORCL/onlinelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl11g' scope=both;
(4)log_archive_dest_2
alter system set log_archive_dest_2='SERVICE=tnsorcl11gstandby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl11gdg' scope=spfile;
这里的SERVICE,来自:
(5)log_archive_dest_state_1
alter system set log_archive_dest_state_1 = ENABLE;
(6)log_archive_dest_state_2
alter system set log_archive_dest_state_2 = ENABLE;
(7)db_file_name_convert
查找数据文件位置
/home/oracle/oradata/orcl/
select name from v$datafile;
alter system set db_file_name_convert='/home/oracle/oradata/orcl/','/home/oracle/oradata/orcl/' scope=spfile;
(8)log_file_name_convert
查看日志路径
select member from v$logfile;
/home/oracle/oradata/orcl/
alter system set log_file_name_convert='/home/oracle/oradata/orcl/','/home/oracle/oradata/orcl/' scope=spfile;
(9)standby_file_management
alter system set standby_file_management=auto scope=spfile;
(10)fal_client
alter system set fal_client='tnsorcl11g' scope=both;
(11)fal_server
alter system set fal_server='tnsorcl11gstandby' scope=both;
最后重启数据库,注意,这里生产环境不要重启,上面那些变量的修改已经写到spfile文件中了。
我这里是测试环境,这里重启只是为了后面查询变量方便
shutdown immediate;
startup;
4、主库监听配置
(1)查找配置文件路径
find / -name listener.ora 2>/dev/null
find / -name tnsnames.ora 2>/dev/null
(2)修改listener.ora
su - oracle
vim /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
修改为如下:
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.184.161)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME=orcl11g) #修改GLOBAL_DBNAME
(SID_NAME = orcl) #修改SID_NAME
(ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1/)
)
)
ADR_BASE_LISTENER = /home/oracle/app/oracle
根据自己的环境进行修改:
HOST = 192.168.184.161
GLOBAL_DBNAME=orcl11g
SID_NAME = orcl
ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1/
HOST的值是本机ip地址:
ip a
GLOBAL_DBNAME的值来自:
SELECT value FROM v$parameter WHERE name = 'db_unique_name';
SID_NAME的值来自:
su - oracle
echo $ORACLE_SID
ORACLE_HOME的值来自:
su - oracle
echo $ORACLE_HOME
(3)修改tnsnames.ora
su - oracle
vim /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
修改为如下:
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
tnsorcl11g =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.184.161)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11g)
)
)
tnsorcl11gstandby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.184.162)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11g)
)
)
根据自己的环境进行修改:
tnsorcl11g中的HOST是主库IP地址
tnsorcl11g中的SERVICE_NAME是来自主库查询:
SELECT value FROM v$parameter WHERE name = 'service_names';
没有显式配置 service_names,Oracle 会默认将 SERVICE_NAME 设置为 db_unique_name 的值。
SELECT value FROM v$parameter WHERE name = 'db_unique_name';
tnsorcl11gstandby中的HOST是备库IP地址
tnsorcl11gstandby中的SERVICE_NAME是来自备库查询:
这里备库还没有进行恢复,所以暂时配置为orcl11gdg,等备库恢复好了,再根据情况进行修改,正常情况后面也不需要进行修改,因为在后面的pfile文件中会将备库的db_unique_name改为orcl11gdg。
这里等备库恢复好了,再进行查看。
SELECT value FROM v$parameter WHERE name = 'service_names';
没有显式配置 service_names,Oracle 会默认将 SERVICE_NAME 设置为 db_unique_name 的值。
SELECT value FROM v$parameter WHERE name = 'db_unique_name';
(4)进行测试
lsnrctl status
tnsping tnsorcl11g
tnsping tnsorcl11gstandby
三、从库进行DG配置
1、密码文件
在dataguard中,主库与备库sys密码需一致,需要将主库的密码文件拷贝到备库中。
主库传输密码文件
(1)主库传输密码文件到备库
su - oracle
cd $ORACLE_HOME/dbs
ll
scp orapworcl oracle@192.168.184.162:/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs
(2)备库查询密码文件
su - oracle
cd $ORACLE_HOME/dbs
ll
2、初始化参数文件
(1)在主库生成初始化参数文件pfile
create pfile from spfile;
(2)查看生成的pfile文件
生成的pfile文件在
cd /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs
ll
(3)传输pfile文件
主库传输
cd /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs
scp initorcl.ora oracle@192.168.184.162:/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs
(4)备库查看传输的pfile文件
cd /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs
ll
3、修改备库pfile文件
cd /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs
vim initorcl.ora
主要修改如下参数:
(1)db_name
这个可以不用改,使用和主库一致即可
(2)db_unique_name
改为备库的,这个一定要和主库不一样,这里我改成orcl11gdg
(3)fal_client和.fal_server
这两个值颠倒一下就行,修改之前:
*.fal_client='tnsorcl11g'
*.fal_server='tnsorcl11gstandby'
修改之后:
*.fal_client='tnsorcl11gstandby'
*.fal_server='tnsorcl11g'
(4)log_archive_dest_1
主要把DB_UNIQUE_NAME换成备库的值
修改之前:
log_archive_dest_1='LOCATION=/home/oracle/app/oracle/flash_recovery_area/ORCL/onlinelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl11g'
修改之后:
log_archive_dest_1='LOCATION=/home/oracle/app/oracle/flash_recovery_area/ORCL/onlinelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl11gdg'
(5)log_archive_dest_2
主要把DB_UNIQUE_NAME换成主库的值
SERVICE换成tnsnames.ora中主库对应的值,如下:
修改之前:
log_archive_dest_2='SERVICE=tnsorcl11gstandby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl11gdg'
修改之后:
log_archive_dest_2='SERVICE=tnsorcl11g LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl11g'
4、备库创建目录
需要创建的目录来自:
(1)整理文件中涉及的目录
根据自己的情况,我当前环境整理如下:
/home/oracle/app/oracle
/home/oracle/app/oracle/admin/orcl/adump
/home/oracle/app/oracle/diag/rdbms/orcl/orcl/trace
/home/oracle/app/oracle/flash_recovery_area
/home/oracle/app/oracle/flash_recovery_area/ORCL
/home/oracle/app/oracle/flash_recovery_area/orcl
/home/oracle/oradata/orcl
/home/oracle/app/oracle/flash_recovery_area/ORCL/onlinelog
(2)备库进行查看并创建
如果有就不用创建,没有的进行创建
ls /home/oracle/app/oracle
ls /home/oracle/app/oracle/admin/orcl/adump
ls /home/oracle/app/oracle/diag/rdbms/orcl/orcl/trace
ls /home/oracle/app/oracle/flash_recovery_area
ls /home/oracle/app/oracle/flash_recovery_area/ORCL
ls /home/oracle/app/oracle/flash_recovery_area/orcl
ls /home/oracle/oradata/orcl
ls /home/oracle/app/oracle/flash_recovery_area/ORCL/onlinelog
mkdir -p /home/oracle/app/oracle/admin/orcl/adump
mkdir -p /home/oracle/app/oracle/diag/rdbms/orcl/orcl/trace
mkdir -p /home/oracle/app/oracle/flash_recovery_area
mkdir -p /home/oracle/app/oracle/flash_recovery_area/ORCL
mkdir -p /home/oracle/app/oracle/flash_recovery_area/orcl
mkdir -p /home/oracle/oradata/orcl
mkdir -p /home/oracle/app/oracle/flash_recovery_area/ORCL/onlinelog
5、使用pfile文件创建spfile文件
备库使用pfile文件创建spfile文件
sqlplus / as sysdba
create spfile from pfile;
查看生成的spfile文件,看下这些值都对不对
cd /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs
ll
cat spfileorcl.ora
6、备库启动数据库到nomount状态
startup nomount
7、查询下备库的服务名
记住这里的网络服务名为orcl11gdg
SELECT value FROM v$parameter WHERE name = 'service_names';
8、主库、备库监听调整
因为备库的网络服务名以及db_unique_name变更为orcl11gdg
(1)主库配置文件listener.ora
cat /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
内容如下,不需要调整,和之前一样
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.184.161)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME=orcl11g) #修改GLOBAL_DBNAME
(SID_NAME = orcl) #修改SID_NAME
(ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1)
)
)
ADR_BASE_LISTENER = /home/oracle/app/oracle
(2)主库配置文件tnsnames.ora
cat /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
修改tnsorcl11gstandby中的SERVICE_NAME为备库的服务名,这里之前应该修改过了。
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
tnsorcl11g =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.184.161)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11g)
)
)
tnsorcl11gstandby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.184.162)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11gdg)
)
)
(3)备库配置文件listener.ora新增内容
cat /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.184.162)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME=orcl11gdg)
(SID_NAME = orcl)
(ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1)
)
)
ADR_BASE_LISTENER = /home/oracle/app/oracle
(4)备库配置文件tnsnames.ora新增内容
cat /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
tnsorcl11g =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.184.161)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11g)
)
)
tnsorcl11gstandby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.184.162)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11gdg)
)
)
(5)主库、备库重启监听
如果有修改的话,需要重启监听
lsnrctl stop
lsnrctl start
lsnrctl status
9、进行测试
(1)tnsping
tnsping tnsorcl11g
tnsping tnsorcl11gstandby
(2)主库进行连接测试
连接到自己
sqlplus sys/oracle@tnsorcl11g as sysdba
连接到备库,注意这里
sqlplus sys/oracle@tnsorcl11gstandby as sysdba
四、使用duplicate创建物理standby
1、连接到主备库
在主库进行连接
rman target sys/oracle@tnsorcl11g auxiliary sys/oracle@tnsorcl11gstandby nocatalog
2、使用duplicate复制数据库
duplicate target database for standby from active database nofilenamecheck;
3、添加主库和备库的standby日志组
(1)查看redo log 位置
sqlplus / as sysdba
select member from v$logfile;
/home/oracle/oradata/orcl/
(2)添加主库的standby日志组
alter database add standby logfile group 4 '/home/oracle/oradata/orcl/redo04.log' size 50M;
alter database add standby logfile group 5 '/home/oracle/oradata/orcl/redo05.log' size 50M;
alter database add standby logfile group 6 '/home/oracle/oradata/orcl/redo06.log' size 50M;
alter database add standby logfile group 7 '/home/oracle/oradata/orcl/redo07.log' size 50M;
alter database add standby logfile group 8 '/home/oracle/oradata/orcl/redo08.log' size 50M;
alter database add standby logfile group 9 '/home/oracle/oradata/orcl/redo09.log' size 50M;
(3)添加备库的standby日志组
alter database add standby logfile group 4 '/home/oracle/oradata/orcl/redo04.log' size 50M;
alter database add standby logfile group 5 '/home/oracle/oradata/orcl/redo05.log' size 50M;
alter database add standby logfile group 6 '/home/oracle/oradata/orcl/redo06.log' size 50M;
alter database add standby logfile group 7 '/home/oracle/oradata/orcl/redo07.log' size 50M;
alter database add standby logfile group 8 '/home/oracle/oradata/orcl/redo08.log' size 50M;
alter database add standby logfile group 9 '/home/oracle/oradata/orcl/redo09.log' size 50M;
4、开始同步数据
(1)打开数据库
备库打开数据库,之前是nomount状态
alter database open;
(2)进行实时同步
alter database recover managed standby database using current logfile disconnect from session;
至此DG搭建完成。
五、查看主、备状态
1、主、备节点信息查询
(1)主库检查
set line 200
set pagesize 200
select name,remote_archive,database_role,guard_status,db_unique_name from v$database;
(2)备库检查
set line 200
set pagesize 200
select name,remote_archive,database_role,guard_status,db_unique_name from v$database;
2、查询主备库日志是否同步(确保最大 SEQUENCE#相同)
(1)主库
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY
SEQUENCE#;
(2)备库
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY
SEQUENCE#;
3、检查日志是否被备库使用(APPLIED 值为 yes)
(1)主库检查
SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
(2)备库检查
SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
六、DG测试
1、在主库上创建测试表并插入数据
create table test(id number,name varchar2(255));
insert into test values(1,'zhangsan');
insert into test values(2,'lisi');
commit;
2、在standby数据库上查询测试表,验证数据同步成功
select * from test;
七、日常运维必备命令
1、主备库角色状态查询
select switchover_status,database_role from v$database;
set line 200
set pagesize 200
select name,remote_archive,database_role,guard_status,db_unique_name from v$database;
2、查看dataguard最新状态
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
set line 160
set pagesize 1000
col type for a20
select process, status, thread#,sequence#, block#, blocks from v$managed_standby;
select GROUP#,THREAD#,SEQUENCE#,STATUS,LAST_CHANGE#,LAST_TIME from v$standby_log;
select START_TIME,TYPE, ITEM,UNITS,SOFAR,TIMESTAMP from v$recovery_progress where ITEM='Last Applied Redo';
2、查看redo_log
(1)主库查看redo log
select group#,thread#,bytes/1024/1024 M,status from v$log;
(2)备库查看standby log
select group#,thread#,bytes/1024/1024M,status,last_change#,last_time from v$standby_log;
3、主、备库查看当前日志状况
select sequence#,status from v$log;
4、手动启动MRP0进程
alter database recover managed standby database disconnect from session;
select open_mode,current_scn from v$database;
select * from v$standby_log;
select process,client_process,sequence#,status,BLOCK#,BLOCKS,THREAD# from v$managed_standby;
5、开启数据库闪回
alter database flashback on;
6、重启监听查看状态
lsnrctl stop
lsnrctl start
lsnrctl status
7、显示服务名
show parameter service_names
8、强制注册服务
如果看不到服务名,强制注册服务
alter system register;
八、主备库切换测试
也可参考:Oracle ADG主备切换
1、主库(Primary)切换为备库(Physical Standby)
(1)检查主库状态
切换前需确保主库处于可切换状态:
SWITCHOVER_STATUS 应为 TO STANDBY
SELECT switchover_status, database_role, open_mode FROM v$database;
(2)若有活跃会话需处理
SWITCHOVER_STATUS 为 SESSIONS ACTIVE
-- 正常切换(无活跃会话时)
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
-- 强制切换(终止所有会话)
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
(3)关闭原主库并挂载
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
(4)启动日志应用(作为新备库)
-- 启动日志应用服务
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
2、备库(Standby)切换为新主库(Primary)
(1)检查备库状态
切换前需确保备库已完全同步且可切换:
SWITCHOVER_STATUS 应为 TO PRIMARY
SELECT switchover_status, database_role, open_mode FROM v$database;
(2)取消备库的日志应用
-- 停止日志应用进程
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
(3)执行切换命令
-- 切换为新的主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
(4)打开新主库
-- 以读写模式打开数据库
ALTER DATABASE OPEN;
(5)验证新主库状态
PRIMARY 角色,OPEN_MODE 为 READ WRITE。
SELECT database_role, open_mode FROM v$database;
3、原主库(现备库)重新配置
(1)检查归档传输
确保原主库(现备库)的归档路径指向新主库:
-- 查看归档目标状态
SELECT dest_name, status, error FROM v$archive_dest WHERE dest_id = 2;
若配置错误,需修正 LOG_ARCHIVE_DEST_2:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=新主库地址 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=新主库名' SCOPE=BOTH;
(2)启动日志应用
-- 作为新备库开始同步日志
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
4、验证整个环境
(1)主库验证
-- 主库应为 PRIMARY,且日志可传输
SELECT database_role, open_mode FROM v$database;
SELECT sequence#, archived, applied FROM v$archived_log ORDER BY sequence# DESC;
(2)备库验证
-- 备库应为 PHYSICAL STANDBY,且日志正常应用
SELECT database_role, open_mode FROM v$database;
SELECT sequence#, applied FROM v$archived_log ORDER BY sequence# DESC;
九、开启、关闭DG
一般在开机重启的时候需要进行重新开启DG
1、开启DG
启动备库(mount)——>启动主库(open)——>启动备库日志同步
(1)备库启动监听
su - oracle
lsnrctl status
lsnrctl start
lsnrctl status
(2)备库启动到mount状态
su - oracle
sqlplus / as sysdba
startup mount;
(3)主库启动监听
su - oracle
lsnrctl status
lsnrctl start
lsnrctl status
(4)启动主库数据库
su - oracle
sqlplus / as sysdba
startup;
(5)备库启动dg
备库启动dg进程
su - oracle
sqlplus / as sysdba
alter database recover managed standby database disconnect from session;
(6)查看主库状态
select name,remote_archive,database_role,guard_status,db_unique_name from v$database;
这里发现有GAP
SELECT switchover_status, database_role, open_mode FROM v$database;
(7)查看备库状态
select name,remote_archive,database_role,guard_status,db_unique_name from v$database;
(8)打开备库
之前是mount状态
alter database open;
2、关闭DG
关闭备库日志同步——>关闭主库——>关闭备库
(1)备库关闭dg
登录备库
su - oracle
sqlplus / as sysdba
检查备库状态
set line 200
set pagesize 200
select name,remote_archive,database_role,guard_status,db_unique_name from v$database;
备库关闭dg进程
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
(2)主库关闭数据库
su - oracle
sqlplus / as sysdba
shutdown immediate
(3)关闭主库监听
su - oracle
lsnrctl status
lsnrctl stop
lsnrctl status
(4)关闭备库
su - oracle
sqlplus / as sysdba
shutdown immediate
(5)关闭备库监听
su - oracle
lsnrctl status
lsnrctl stop
lsnrctl status