20200416-Oracle 19C Data Guard基础运维-01部署Physical Standby

在这里插入图片描述

配置说明:

在这里插入图片描述

原理:

https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/data-guard-concepts-and-administration.pdf

在这里插入图片描述

(1) 主库:开启归档模式
(2) 主库:开启强制写日志功能
(3) 主库:关闭闪回
(4) 主库:配置静态监听 , 配置 tnsnames 文件
(5) 主库:增加 standby logfile 文件
(6) 主库:修改参数文件
(7) 主库 : 拷贝主库文件到备库
(8) 备库:配置静态监听 , 配置 tnsnames.ora 文件
(9) 备库:修改参数文件和口令文件
(10) 备库:根据据参数文件创建相应的目录
(11) 备库: startup nomount
(12) 主库 : 通过 rman duplicate 方式进行备库恢复
(13) 验证是否搭建成功  

(1) 主库:开启归档模式

SQL> sqlplus / as sysdba
SQL> alter system set log_archive_dest_1='location=/arch;
SQL> alter system set log_archive_format = "cjcpdb_%t_%s_%r.arc" scope=spfile;

SQL> shutdown immediate;
SQL> startup mount;

SQL> alter database archivelog;
SQL> alter database open;

(2) 主库:开启强制写日志功能

SQL> select force_logging from v$database;
SQL> alter database force logging;

(3) 主库:关闭闪回

SQL> select flashback_on from v$database;
SQL> alter database flashback off;

(4) 主库:配置静态监听 , 配置 tnsnames 文件

[oracle@cjcos01 ~]$ cd $ORACLE_HOME/network/admin
[oracle@cjcos01 admin]$ vim listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cjcdb)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (SID_NAME = cjcdb)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = cjcos01)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
[oracle@cjcos01 admin]$ vim tnsnames.ora
CJCDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = cjcos01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cjcdb)
    )
  )

CHENDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = cjcos02)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = chendb)
    )

CJCPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = cjcos01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cjcpdb)
    )
  )

CHENPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = cjcos02)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cjcpdb)
    )
  )

[oracle@cjcos01 admin]$ lsnrctl stop
[oracle@cjcos01 admin]$ lsnrctl start  

(5) 主库:增加 standby logfile 文件

SQL> select member from v$logfile;
MEMBER
------------------------------------------------------------------------------
/u01/app/oracle/oradata/CJCDB/redo03.log
/u01/app/oracle/oradata/CJCDB/redo02.log
/u01/app/oracle/oradata/CJCDB/redo01.log

SQL> select bytes/1024/1024 from v$log;

SQL> alter database add standby logfile group 4 '/u01/app/oracle/oradata/CJCDB/standby_redo04.log' size 200M;
SQL> alter database add standby logfile group 5 '/u01/app/oracle/oradata/CJCDB/standby_redo05.log' size 200M;
SQL> alter database add standby logfile group 6 '/u01/app/oracle/oradata/CJCDB/standby_redo06.log' size 200M;
SQL> alter database add standby logfile group 7 '/u01/app/oracle/oradata/CJCDB/standby_redo07.log' size 200M;

(6) 主库:修改参数文件

SQL> create pfile from spfile;
[oracle@cjcos01 admin]$ cd $ORACLE_HOME/dbs
[oracle@cjcos01 dbs]$ cp initcjcdb.ora initcjcdb.ora.bak.1

[oracle@cjcos01 dbs]$ vim initcjcdb.ora
*.DB_NAME=cjcdb  
*.DB_UNIQUE_NAME=cjcdb  
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(cjcdb,chendb)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=cjcdb'
*.LOG_ARCHIVE_DEST_2='SERVICE=chendb ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=chendb'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
*.FAL_SERVER=chendb
*.DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/chendb/','/u01/app/oracle/oradata/CJCDB/','/u01/app/oracle/oradata/chendb/chenpdb/','/u01/app/oracle/oradata/CJCDB/cjcpdb/'
*.LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/chendb/','/u01/app/oracle/oradata/CJCDB/','/u01/app/oracle/oradata/chendb/chenpdb/','/u01/app/oracle/oradata/CJCDB/cjcpdb/'
*.STANDBY_FILE_MANAGEMENT=AUTO

[oracle@cjcos01 dbs]$ cp spfilecjcdb.ora spfilecjcdb.ora.bak.2
SQL> shutdown immediate
SQL> create spfile from pfile;
SQL> startup
SQL> show parameter log_archive_dest_2
SQL> alter pluggable database cjcpdb open;

SQL> show pdbs
    CON_ID CON_NAME     OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
 2 PDB$SEED     READ ONLY  NO
 3 CJCPDB     READ WRITE NO

(7) 主库 : 拷贝主库文件到备库

监听文件,TNS 文件,参数文件、密码文件到备库并改名

[oracle@cjcos01 ~]$ mkdir /home/oracle/dg
[oracle@cjcos01 ~]$ cd $ORACLE_HOME/dbs
[oracle@cjcos01 dbs]$ cp initcjcdb.ora /home/oracle/dg
[oracle@cjcos01 dbs]$ cp orapwcjcdb /home/oracle/dg
[oracle@cjcos01 dbs]$ cd ../network/admin/
[oracle@cjcos01 admin]$ cp listener.ora /home/oracle/dg
[oracle@cjcos01 admin]$ cp tnsnames.ora /home/oracle/dg
[oracle@cjcos01 ~]$ tar -zcvf dg.tar.gz dg/
[oracle@cjcos01 ~]$ scp dg.tar.gz 192.168.31.100:/home/oracle/

(8) 备库:配置静态监听 , 配置 tnsnames.ora 文件

[oracle@cjcos02 ~]$ tar -zxvf dg.tar.gz  
[oracle@cjcos02 dg]$ cd $ORACLE_HOME/network/admin
[oracle@cjcos02 admin]$ mv listener.ora listener.ora.bak
[oracle@cjcos02 admin]$ mv tnsnames.ora tnsnames.ora.bak
[oracle@cjcos02 admin]$ cp /home/oracle/dg/listener.ora .
[oracle@cjcos02 admin]$ cp /home/oracle/dg/tnsnames.ora .
[oracle@cjcos02 admin]$ vim listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = chendb)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (SID_NAME = chendb)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = cjcos02)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

[oracle@cjcos02 admin]$ lsnrctl start

(9) 备库:修改参数文件和口令文件

[oracle@cjcos02 admin]$ cd $ORACLE_HOME/dbs
[oracle@cjcos02 dbs]$ cp /home/oracle/dg/initcjcdb.ora .
[oracle@cjcos02 dbs]$ cp /home/oracle/dg/orapwcjcdb .
[oracle@cjcos02 dbs]$ mv orapwcjcdb orapwchendb
[oracle@cjcos02 dbs]$ mv initcjcdb.ora initchendb.ora

[oracle@cjcos02 dbs]$ vim initchendb.ora
:%s/cjcdb/AAA/g  
:%s/chendb/cjcdb/g  
:%s/AAA/chendb/g

------
*.DB_NAME=cjcdb
*.DB_UNIQUE_NAME=chendb
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(chendb,cjcdb)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/flash VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=chendb'
*.LOG_ARCHIVE_DEST_2='SERVICE=cjcdb ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=cjcdb'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
*.FAL_SERVER=cjcdb
*.DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/CJCDB/','/u01/app/oracle/oradata/chendb/','/u01/app/oracle/oradata/CJCDB/cjcpdb/','/u01/app/oracle/oradata/chendb/chenpdb/'
*.LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/CJCDB/','/u01/app/oracle/oradata/chendb/','/u01/app/oracle/oradata/CJCDB/cjcpdb/','/u01/app/oracle/oradata/chendb/chenpdb/'
*.STANDBY_FILE_MANAGEMENT=AUTO

(10) 备库:根据据参数文件创建相应的目录

[root@cjcos02 ~]# mkdir /arch
[root@cjcos02 ~]# chown oracle.oinstall /arch
[oracle@jch ~]$ cd /u01/app/oracle/admin/
[oracle@cjcos02 admin]# mkdir chendb/{adump,dpdump,pfile} -p
[oracle@cjcos02 chendb]# cd /u01/app/oracle/oradata/
[oracle@cjcos02 oradata]# mkdir chendb/{chenpdb,cjcpdb,pdbseed} -p

(11) 备库: startup nomount

[oracle@cjcos02 ~]$ export ORACLE_SID=chendb
[oracle@cjcos02 ~]$ sqlplus / as sysdba
SQL> create spfile from pfile;
SQL> startup nomount

(12) 主库 : 通过 rman duplicate 方式进行备库恢复

[oracle@cjcos01 ~]$ export ORACLE_SID=cjcdb
[oracle@cjcos01 ~]$ rman target / auxiliary sys/oracle@chendb
RMAN> duplicate target database for standby from active database;

(13) 验证是否搭建成功

主库:

SQL> col dest_name for a25
SQL> select dest_name,status from v$archive_dest_status;
DEST_NAME     STATUS
------------------------- ---------
LOG_ARCHIVE_DEST_1   VALID
LOG_ARCHIVE_DEST_2   VALID

SQL> archive log list;
SQL> alter system switch logfile;

备库:

SQL> archive log list;
SQL> select process, pid, status, client_process from v$managed_standby;
PROCESS   PID      STATUS CLIENT_P
--------- ------------------------ ------------ --------
ARCH   11867      CONNECTED ARCH
DGRD   11869      ALLOCATED N/A
DGRD   11871      ALLOCATED N/A
ARCH   11873      CONNECTED ARCH
ARCH   11875      CONNECTED ARCH
ARCH   11877      CONNECTED ARCH
RFS       12558      IDLE     Archival
RFS       12560      IDLE     LGWR
RFS       12565      IDLE     UNKNOWN
9 rows selected.

SQL> SELECT PROTECTION_MODE, PROTECTION_LEVEL,DATABASE_ROLE ROLE,SWITCHOVER_STATUS FROM V$DATABASE;
PROTECTION_MODE      PROTECTION_LEVEL   ROLE      SWITCHOVER_STATUS
-------------------- -------------------- ---------------- --------------------
MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  PHYSICAL STANDBY RECOVERY NEEDED

测试主库 CDB$ROOT 数据同步

备库:

SQL> alter database open;
SQL> recover managed standby database using current logfile disconnect from session;
-----SQL> recover managed standby database cancel;

主库:

SQL> create table test1 as select level as id from dual connect by level<=3;  

备库:

SQL> select * from test1;
ID
----------
 1
 2
 3

测试 PDB 数据同步

主库:

SQL> conn cjc/cjc@cjcpdb
Connected.

SQL> create table tt1 as select level as id from dual connect by level<=3;
Table created.

备库:

SQL> conn cjc/cjc@chenpdb
Connected.

SQL> select * from tt1;
ID
----------
 1
 2
 3

欢迎关注我的微信公众号"IT小Chen"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值