暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C Data Guard基础运维-01安装物理standby

IT小Chen 2021-04-14
1502

配置说明:


主库

备库

IP

192.168.31.90

192.168.31.100

DB

Oracle 19.3.0.0.0

Oracle 19.3.0.0.0

OS

RedHat7.5

RedHat7.5

HostName

cjcos01

cjcos02

DBName

cjcdb

cjcdb

DB_UNIQUE_NAME

cjcdb

chendb

SERVICE_NAME

cjcdb

chendb

PDBName

cjcpdb

cjcpdb

原理:

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   STATUSCLIENT_P

--------- ------------------------ ------------ --------

ARCH  11867    CONNECTEDARCH

DGRD  11869    ALLOCATEDN/A

DGRD  11871    ALLOCATEDN/A

ARCH  11873    CONNECTEDARCH

ARCH  11875    CONNECTEDARCH

ARCH  11877    CONNECTEDARCH

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

更多数据库相关学习资料,可以查看我的ITPUB博客,网名chenoracle

http://blog.itpub.net/29785807/

文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论