Oracle【容灾篇】01:Oracle11g ADG 搭建步骤 【单机】【duplicate方式】

一、环境准备

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

在这里插入图片描述

<think>好的,我现在需要帮助用户理解Oracle ADG在RAC环境中的理论和应用。首先,我得回忆一下ADG和RAC的基本概念。ADGOracle的高可用性解决方案,主要用于数据保护和难恢复,而RAC则允许多个实例同时访问同一个数据库,提供高可用性和扩展性。用户想知道这两者如何结合使用,以及具体的实现方法。 接下来,我应该分步骤解释ADG在RAC中的架构。需要说明物理备库的作用,以及如何通过应用Redo数据保持同步。同时,要提到ADG的读写分离功能,这样用户能明白主库和备库的分工。可能还需要比较单实例和RAC环境下ADG的不同之处,比如备库是否也可以部署为RAC,以及负载均衡的实现方式。 理论部分完成后,需要转向实现步骤。这部分要具体一些,比如如何配置主库和备库的参数文件,确保RAC环境的网络设置正确,特别是SCAN和VIP的配置。然后,Redo传输服务的配置是关键,用户可能需要知道如何使用ASYNC或SYNC模式,以及如何验证传输是否正常。 部署备库时,RMAN的备份恢复步骤必须准确,要提到参数文件的调整,如DB_NAME和DB_UNIQUE_NAME的设置。Data Guard Broker的使用可以简化管理,但需要说明如何创建配置和启用备库。另外,读写分离的配置部分需要解释如何设置打开模式,并确保备库应用Redo的同时允许查询。 在应用场景方面,用户可能关心高可用性、读写分离、异地和滚动升级这些方面。每个场景需要简要说明ADG和RAC如何结合使用,比如主库故障时的切换过程,或者如何利用备库进行查询分担主库压力。 最后,相关问题的生成需要考虑用户可能的后续疑问,比如延迟因素、备库扩展为RAC的步骤、与单实例ADG的区别,以及如何监控性能。这些问题需要覆盖实现细节和优化方法,帮助用户全面了解。 整个过程中,我需要确保使用正确的中文术语,并按照用户要求的结构清晰分点。同时,注意引用格式和代码块的正确使用,比如在配置参数时用代码示例。还要检查是否有遗漏的关键点,比如网络配置的重要性,或者Data Guard Broker的具体命令。确保回答真实可靠,必要时参考官方文档或可靠来源的信息,但用户没有提供引用内,所以可能不需要添加具体引用标识,除非内部有需要。</think>### Oracle Active Data Guard (ADG) 在 RAC 环境中的理论与实现 #### 一、ADG 与 RAC 的基本概念 1. **Oracle ADG** Active Data Guard 是 Oracle 数据库的高可用性解决方案,通过物理备库(Physical Standby)实现实时数据同步,支持只读访问,提供难恢复和负载均衡能力[^1]。 2. **RAC 架构** Real Application Clusters 允许多个数据库实例共享同一存储,提供横向扩展和故障切换能力,确保业务连续性[^2]。 #### 二、ADG 在 RAC 环境中的架构 - **主库(Primary Database)**:部署在 RAC 环境中,多个实例协同处理事务。 - **备库(Standby Database)**:可以是单实例或 RAC 架构,通过应用主库的 Redo 数据保持同步。 - **同步流程**: 主库生成 Redo 日志 → 通过 Redo 传输服务(Redo Transport Service)发送到备库 → 备库应用 Redo 实现数据同步。 $$ \text{主库 Redo 日志} \xrightarrow{\text{传输服务}} \text{备库 Redo 应用} $$ #### 三、实现步骤与关键技术 1. **主库配置** - 确保主库为 `ARCHIVELOG` 模式: ```sql ALTER DATABASE ARCHIVELOG; ``` - 配置 `LOG_ARCHIVE_DEST_n` 参数指向备库: ```sql ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby'; ``` 2. **网络与 RAC 配置** - 使用 SCAN(Single Client Access Name)确保 RAC 实例间通信稳定。 - 配置 TNSNAMES 文件,明确主备库的网络别名。 3. **备库部署** - 使用 RMAN 克隆主库: ```bash rman TARGET sys/password@primary AUXILIARY sys/password@standby DUPLICATE DATABASE FOR STANDBY FROM ACTIVE DATABASE; ``` - 调整备库参数文件,包括 `DB_UNIQUE_NAME` 和 `FAL_SERVER`。 4. **Data Guard Broker 管理** - 启用 Broker 并创建配置: ```sql DGMGRL> CREATE CONFIGURATION adg_config AS PRIMARY DATABASE IS primary_db CONNECT IDENTIFIER IS primary_db; DGMGRL> ADD DATABASE standby_db AS CONNECT IDENTIFIER IS standby_db MAINTAINED AS PHYSICAL; ``` #### 四、核心应用场景 1. **高可用性与故障切换** - 主库 RAC 节点故障时,ADG 支持快速切换到备库(Switchover/Failover)。 2. **读写分离** - 备库提供只读访问,分担主库负载,例如生成报表[^3]。 3. **异地** - 备库可部署在异地数据中心,通过异步传输(ASYNC)减少延迟。 4. **滚动升级** - 通过 ADG 切换实现数据库版本升级,减少停机时间。 #### 五、注意事项 - **延迟控制**:网络带宽和 Redo 传输模式(SYNC/ASYNC)影响数据同步延迟。 - **备库性能**:备库需与主库硬件配置相近,避免 Redo 应用积压。 - **参数一致性**:主备库的 `COMPATIBLE` 参数必须一致。 ```sql -- 检查数据同步状态 SELECT DEST_NAME, STATUS, ARCHIVED_THREAD#, ARCHIVED_SEQ# FROM V$ARCHIVE_DEST_STATUS; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一个有趣的人Zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值