Oracle 11g RAC to 11g RAC ADG部署搭建

news/2024/9/15 23:19:28/ 标签: oracle, 数据库

一、目标端软件环境准备

操作系统:CentOS Linux release 6.8
数据库oracle 11.2.0.4 R2 RAC
只需要安装grid软件和oracle软件即可

二、手工创建磁盘组

GI、ORACLE软件安装后,需要创建磁盘组安装DB,磁盘组名称和源端保持一致

三、rac adg部署

1.DG基础环境
主库rac环境节点一: 192.168.20.15 crm-scan | db_name=orcldb db_unique_name=orcldb service_names=orcldb |主机名:db1
备库rac环境节点一:192.168.20.56 bossdb-scan | db_name=orcldb db_unique_name=orcldbst service_names=orcldb |主机名:db51

2.主库开启强制归档以及开启归档模,以及修改主库初始化参数
开启强制归档
alter database force logging;
select force_logging from v$database;

3.主库配置归档删除策略
$ rman target /
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY;
RMAN> show all;

RMAN configuration parameters for database with db_unique_name NXDB are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_NXDB1.f'; # default

RMAN> 


4.主库添加standby redo logfile

添加日志规则:
如果节点RAC主库每个thread redo log有N组,standby redo log则需要standbby redo log组数为(n+1)*thread组。
主库查询redo 日志组数,有2个thread,每个thread有4组日志,standby则需要10组

===================================================================
#查看 Online redo log 大小及位置:
SQL> select group#,thread#,members,bytes from v$log;

    GROUP#    THREAD#    MEMBERS      BYTES
---------- ---------- ---------- ----------
         1          1          1   52428800
         2          1          1   52428800
         3          2          1   52428800
         4          2          1   52428800

SQL> select group#,member from v$logfile;
----GROUP#----------MEMBER--------------------------------------
     2            +DATA01/NXDB/redo02.log
     1            +DATA01/NXDB/redo01.log
     3            +DATA01/NXDB/redo03.log
     4            +DATA01/NXDB/redo04.log

#添加Standby redo log
alter database add standby logfile thread 1 group 5 '+DATA01/NXDB/redo05_1.log' size 50M;
alter database add standby logfile thread 1 group 6 '+DATA01/NXDB/redo06_1.log' size 50M;
alter database add standby logfile thread 1 group 7 '+DATA01/NXDB/redo07_1.log' size 50M;
alter database add standby logfile thread 2 group 8 '+DATA01/NXDB/redo08_1.log' size 50M;
alter database add standby logfile thread 2 group 9 '+DATA01/NXDB/redo09_1.log' size 50M;
alter database add standby logfile thread 2 group 10 '+DATA01/NXDB/redo10_1.log' size 50M;
#检查确认
SQL> select group#,thread#,bytes/1024/1024 Size_MB from v$log;

    GROUP#    THREAD#    SIZE_MB
---------- ---------- ----------
         1          1         50
         2          1         50
         3          2         50
         4          2         50

SQL> select group#,thread#,bytes/1024/1024 size_Mb from v$standby_log;

    GROUP#    THREAD#    SIZE_MB
---------- ---------- ----------
         5          1         50
         6          1         50
         7          1         50
         8          2         50
         9          2         50
        10          2         50

6 rows selected.

5.主库和备库监听配置以及TNS配置
oracle用户在主库所有节点上配置 tnsname.ora
vi /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

NXDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = NXDB1-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = NXDB)
    )
  )

NXYLDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = NXYLDB1-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = NXDB)
    )
  )

将主库的tnsnames.ora文件拷贝到备库的所有节点,将修改如下,将名称替换下
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin

scp tnsnames.ora NXYLDB1:/u01/app/oracle/product/11.2.0/dbhome_1/network/admin
scp tnsnames.ora NXYLDB2:/u01/app/oracle/product/11.2.0/dbhome_1/network/admin

登陆备库查看效果如下:
[oracle@NXDB2 admin]$ vi tnsnames.ora 
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

NXYLDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = NXDB1-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = NXYLDB)
    )
  )

NXDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = NXYLDB1-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = NXDB)
    )
  )


6.配置主库 ADG 参数
1、备份spfile文件
create pfile=’/u01/initbak20211013.ora’ from spfile;

2、配置主库参数
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(NXDB,NXYLDB)' scope=both;
alter system set LOG_ARCHIVE_DEST_1='LOCATION=+data01/NXDB/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=NXDB' scope=both;
alter system set log_archive_dest_2='SERVICE=NXYLDB SYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=NXYLDB' scope=both;
alter system set LOG_ARCHIVE_DEST_STATE_1='ENABLE' scope=both;
alter system set LOG_ARCHIVE_DEST_STATE_2='ENABLE' scope=both;
alter system set LOG_FILE_NAME_CONVERT='+DATA01/NXDB','+DATA01/NXDB' scope=spfile;
alter system set DB_FILE_NAME_CONVERT='+DATA01/NXDB','+DATA01/NXDB' scope=spfile;
alter system set STANDBY_FILE_MANAGEMENT='AUTO' scope=both;
alter system set FAL_SERVER='NXYLDB' scope=both;

                                                 
                                                 
3、重启数据库
srvctl stop database -d NXDB
srvctl start database -d NXDB
这里不能按照单实例轮询重启,必须所有节点都关闭重启。


7.配置密码文件
1、将 主库1 节点的密码文件拷贝到主库的所有节点和备库上:
[oracle@NXDB1 ~]$ cd $ORACLE_HOME/dbs
[oracle@NXDB1 dbs]$ scp orapwNXDB1 NXYLDB1:$ORACLE_HOME/dbs/orapwNXYLDB1
[oracle@NXDB1 dbs]$ scp orapwNXDB1 NXYLDB2:$ORACLE_HOME/dbs/orapwNXYLDB2

8.创建备库初始化参数文件
1、在主库上生成最新 pfile 文件 ,并拷贝到备库上, 并重命名为 initNXYLDB.ora
create pfile='/tmp/initNXDB.ora' from spfile;
scp /tmp/initNXDB.ora NXYLDB1:/tmp/initNXYLDB.ora

2、修改备库上的 pfile 文件
[oracle@NXDB1 ~]$ more /tmp/initNXDB.ora 
NXDB2.__db_cache_size=243269632
NXDB1.__db_cache_size=251658240
NXDB1.__java_pool_size=4194304
NXDB2.__java_pool_size=4194304
NXDB1.__large_pool_size=8388608
NXDB2.__large_pool_size=8388608
NXDB1.__pga_aggregate_target=281018368
NXDB2.__pga_aggregate_target=297795584
NXDB1.__sga_target=503316480
NXDB2.__sga_target=486539264
NXDB1.__shared_io_pool_size=0
NXDB2.__shared_io_pool_size=0
NXDB2.__shared_pool_size=218103808
NXDB1.__shared_pool_size=226492416
NXDB1.__streams_pool_size=0
NXDB2.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/NXDB/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.control_files='+DATA01/NXYLDB/control01.ctl','+DATA01/NXYLDB/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='+DATA01/NXDB','+DATA01/NXYLDB'
*.db_name='NXDB'
*.service_names='NXDB'
*.db_unique_name='NXYLDB'
*.db_recovery_file_dest='+DATA'
*.db_recovery_file_dest_size=4621074432
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=NXDBXDB)'
*.fal_server='NXDB'
NXDB2.instance_number=2
NXDB1.instance_number=1
*.log_archive_config='DG_CONFIG=(NXYLDB,NXDB)'
*.log_archive_dest_1='LOCATION=+data01/NXYLDB/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=NXYLDB'
*.log_archive_dest_2='SERVICE=NXDB SYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=NXDB'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.dbf'
*.log_file_name_convert='+DATA01/NXDB','+DATA01/NXYLDB'
*.memory_target=783286272
*.open_cursors=300
*.processes=150
*.remote_listener='NXDB-scan:1521'
*.remote_login_passwordfile='exclusive'
*.standby_file_management='AUTO'
NXDB2.thread=2
NXDB1.thread=1
NXDB1.undo_tablespace='UNDOTBS1'
NXDB2.undo_tablespace='UNDOTBS2'
[oracle@NXDB1 ~]$  

3、和主库对比修改了哪些地方,主库配置如下所示:
NXDB2.__db_cache_size=260046848
NXDB1.__db_cache_size=289406976
NXDB2.__java_pool_size=4194304
NXDB1.__java_pool_size=4194304
NXDB2.__large_pool_size=8388608
NXDB1.__large_pool_size=8388608
NXDB2.__pga_aggregate_target=318767104
NXDB1.__pga_aggregate_target=276824064
NXDB2.__sga_target=465567744
NXDB1.__sga_target=507510784
NXDB2.__shared_io_pool_size=0
NXDB1.__shared_io_pool_size=0
NXDB2.__shared_pool_size=180355072
NXDB1.__shared_pool_size=192937984
NXDB2.__streams_pool_size=0
NXDB1.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/NXDB/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.control_files='+DATA01/NXDB/control01.ctl','+DATA01/NXDB/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='+DATA01/NXYLDB','+DATA01/NXDB'
*.db_name='NXDB'
*.db_recovery_file_dest='+DATA'
*.db_recovery_file_dest_size=4621074432
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=NXDBXDB)'
*.fal_server='NXYLDB'
db_unique_name=NXYLDB
NXDB2.instance_number=2
NXDB1.instance_number=1
*.log_archive_config='DG_CONFIG=(NXDB,NXYLDB)'
*.log_archive_dest_1='LOCATION=+data01/NXDB/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=NXDB'
*.log_archive_dest_2='SERVICE=NXYLDB SYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=NXYLDB'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.dbf'
*.log_file_name_convert='+DATA01/NXYLDB','+DATA01/NXDB'
*.memory_target=783286272
*.open_cursors=300
*.processes=150
*.remote_listener='NXDB-scan:1521'
*.remote_login_passwordfile='exclusive'
*.standby_file_management='AUTO'
NXDB2.thread=2
NXDB1.thread=1
NXDB1.undo_tablespace='UNDOTBS1'
NXDB2.undo_tablespace='UNDOTBS2'

9.创建备库必要目录
1、查看路径
[oracle@NXDB1 ~]$ cat /tmp/initNXDB.ora | grep /
*.audit_file_dest='/u01/app/oracle/admin/NXYLDB/adump'
*.control_files='+DATA01/NXYLDB/control01.ctl','+DATA01/NXYLDB/control02.ctl'
*.db_file_name_convert='+DATA01/NXDB','+DATA01/NXYLDB'
*.diagnostic_dest='/u01/app/oracle'
*.log_archive_dest_1='LOCATION=+data01/NXYLDB/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=NXYLDB'
*.log_file_name_convert='+DATA01/NXDB','+DATA01/NXYLDB'

2、在备库主机上创建需要的数据库目录
[oracle@NXDB2 ~]$ mkdir -p /u01/app/oracle/admin/NXYLDB/adump
[oracle@NXDB2 ~]$ mkdir -p /u01/app/oracle/admin/NXYLDB/dpdump
[oracle@NXDB2 ~]$ mkdir -p /u01/app/oracle/admin/NXYLDB/hdump
[oracle@NXDB2 ~]$ mkdir -p /u01/app/oracle/admin/NXYLDB/pfile
$ su – grid
$ asmcmd
ASMCMD> +DATA01/NXYLDB
ASMCMD> mkdir +DATA01/NXYLDB
ASMCMD> mkdir +data01/NXYLDB/archive
ASMCMD> exit

10.备库 LISTENER 配置
1、grid用户修改listener.ora文件,备库两个节点都需要修改,这里以节点1为例
[grid@NXDB1 admin]$ more /u02/app/oracle/product/11.2.0/grid/network/admin/listener.ora
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME= PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = NXDB)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME=NXDB1)
    )
  )
[grid@NXDB1 admin]$

2、重启监听
[grid@NXDB1 admin]$ srvctl start listener -l LISTENER

11.备库 ADG 初始化
1、启动备库到nomount状态
SQL> startup nomount pfile='/tmp/initNXDB.ora';

2、主库和备库测试连接
[oracle@NXDB2 ~]$ sqlplus sys/admin123@NXYLDB as sysdba
[oracle@NXDB2 ~]$ sqlplus sys/admin123@NXDB as sysdba

3、将数据库注册到集群中,1节点执行
[oracle@NXDB1 ~]$ srvctl add database -d NXYLDB -o /u01/app/oracle/product/11.2.0/dbhome_1
[oracle@NXDB1 ~]$ srvctl add instance -d NXYLDB -i NXYLDB1 -n NXDB1
[oracle@NXDB1 ~]$ srvctl add instance -d NXYLDB -i NXYLDB2 -n NXDB2

4、备库通过 RMAN duplicate 完成进行备库初始化同步
[oracle@NXDB1 ~]$ rman target sys/admin123@NXDB auxiliary sys/admin123@NXYLDB

Recovery Manager: Release 11.2.0.4.0 - Production on Sun Oct 17 22:39:23 2021

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: NXDB (DBID=680083408)
connected to auxiliary database: NXDB (not mounted)

RMAN> duplicate target database for standby from active database nofilenamecheck dorecover;

Starting Duplicate Db at 17-OCT-21
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=18 instance=NXDB1 device type=DISK

contents of Memory Script:
{
   backup as copy reuse
   targetfile  '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwNXDB1' auxiliary format 
 '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwNXDB1'   ;
}
executing Memory Script

Starting backup at 17-OCT-21
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=33 instance=NXDB1 device type=DISK
Finished backup at 17-OCT-21

contents of Memory Script:
{
   backup as copy current controlfile for standby auxiliary format  '+DATA01/NXYLDB/control01.ctl';
   restore clone controlfile to  '+DATA01/NXYLDB/control02.ctl' from 
 '+DATA01/NXYLDB/control01.ctl';
}
executing Memory Script

Starting backup at 17-OCT-21
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_NXDB1.f tag=TAG20211017T223931 RECID=5 STAMP=1086215978
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
Finished backup at 17-OCT-21

Starting restore at 17-OCT-21
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 17-OCT-21

contents of Memory Script:
{
   sql clone 'alter database mount standby database';
}
executing Memory Script

sql statement: alter database mount standby database

contents of Memory Script:
{
   set newname for tempfile  1 to 
 "+DATA01/NXYLDB/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to 
 "+DATA01/NXYLDB/system01.dbf";
   set newname for datafile  2 to 
 "+DATA01/NXYLDB/sysaux01.dbf";
   set newname for datafile  3 to 
 "+DATA01/NXYLDB/undotbs01.dbf";
   set newname for datafile  4 to 
 "+DATA01/NXYLDB/users01.dbf";
   set newname for datafile  5 to 
 "+DATA01/NXYLDB/undotbs02.dbf";
   set newname for datafile  6 to 
 "+DATA01/NXYLDB/data01.dbf";
   backup as copy reuse
   datafile  1 auxiliary format 
 "+DATA01/NXYLDB/system01.dbf"   datafile 
 2 auxiliary format 
 "+DATA01/NXYLDB/sysaux01.dbf"   datafile 
 3 auxiliary format 
 "+DATA01/NXYLDB/undotbs01.dbf"   datafile 
 4 auxiliary format 
 "+DATA01/NXYLDB/users01.dbf"   datafile 
 5 auxiliary format 
 "+DATA01/NXYLDB/undotbs02.dbf"   datafile 
 6 auxiliary format 
 "+DATA01/NXYLDB/data01.dbf"   ;
   sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to +DATA01/NXYLDB/temp01.dbf in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting backup at 17-OCT-21
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=+DATA01/NXDB/system01.dbf
output file name=+DATA01/NXYLDB/system01.dbf tag=TAG20211017T224006
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=+DATA01/NXDB/sysaux01.dbf
output file name=+DATA01/NXYLDB/sysaux01.dbf tag=TAG20211017T224006
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=+DATA01/NXDB/data01.dbf
output file name=+DATA01/NXYLDB/data01.dbf tag=TAG20211017T224006
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=+DATA01/NXDB/undotbs01.dbf
output file name=+DATA01/NXYLDB/undotbs01.dbf tag=TAG20211017T224006
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=+DATA01/NXDB/undotbs02.dbf
output file name=+DATA01/NXYLDB/undotbs02.dbf tag=TAG20211017T224006
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=+DATA01/NXDB/users01.dbf
output file name=+DATA01/NXYLDB/users01.dbf tag=TAG20211017T224006
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 17-OCT-21

sql statement: alter system archive log current

contents of Memory Script:
{
   backup as copy reuse
   archivelog like  "+DATA01/NXDB/archive/2_22_1085768275.dbf" auxiliary format 
 "+DATA01/NXYLDB/archive/2_22_1085768275.dbf"   archivelog like 
 "+DATA01/NXDB/archive/2_23_1085768275.dbf" auxiliary format 
 "+DATA01/NXYLDB/archive/2_23_1085768275.dbf"   archivelog like 
 "+DATA01/NXDB/archive/1_26_1085768275.dbf" auxiliary format 
 "+DATA01/NXYLDB/archive/1_26_1085768275.dbf"   archivelog like 
 "+DATA01/NXDB/archive/1_27_1085768275.dbf" auxiliary format 
 "+DATA01/NXYLDB/archive/1_27_1085768275.dbf"   archivelog like 
 "+DATA01/NXDB/archive/2_21_1085768275.dbf" auxiliary format 
 "+DATA01/NXYLDB/archive/2_21_1085768275.dbf"   ;
   catalog clone archivelog  "+DATA01/NXYLDB/archive/2_22_1085768275.dbf";
   catalog clone archivelog  "+DATA01/NXYLDB/archive/2_23_1085768275.dbf";
   catalog clone archivelog  "+DATA01/NXYLDB/archive/1_26_1085768275.dbf";
   catalog clone archivelog  "+DATA01/NXYLDB/archive/1_27_1085768275.dbf";
   catalog clone archivelog  "+DATA01/NXYLDB/archive/2_21_1085768275.dbf";
   switch clone datafile all;
}
executing Memory Script

Starting backup at 17-OCT-21
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log copy
input archived log thread=2 sequence=22 RECID=43 STAMP=1086216008
output file name=+DATA01/NXYLDB/archive/2_22_1085768275.dbf RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting archived log copy
input archived log thread=2 sequence=23 RECID=45 STAMP=1086216122
output file name=+DATA01/NXYLDB/archive/2_23_1085768275.dbf RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=26 RECID=44 STAMP=1086216010
output file name=+DATA01/NXYLDB/archive/1_26_1085768275.dbf RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=27 RECID=46 STAMP=1086216124
output file name=+DATA01/NXYLDB/archive/1_27_1085768275.dbf RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting archived log copy
input archived log thread=2 sequence=21 RECID=42 STAMP=1086213932
output file name=+DATA01/NXYLDB/archive/2_21_1085768275.dbf RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:07
Finished backup at 17-OCT-21

cataloged archived log
archived log file name=+DATA01/NXYLDB/archive/2_22_1085768275.dbf RECID=1 STAMP=1086216148

cataloged archived log
archived log file name=+DATA01/NXYLDB/archive/2_23_1085768275.dbf RECID=2 STAMP=1086216148

cataloged archived log
archived log file name=+DATA01/NXYLDB/archive/1_26_1085768275.dbf RECID=3 STAMP=1086216148

cataloged archived log
archived log file name=+DATA01/NXYLDB/archive/1_27_1085768275.dbf RECID=4 STAMP=1086216148

cataloged archived log
archived log file name=+DATA01/NXYLDB/archive/2_21_1085768275.dbf RECID=5 STAMP=1086216148

datafile 1 switched to datafile copy
input datafile copy RECID=5 STAMP=1086216149 file name=+DATA01/NXYLDB/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=6 STAMP=1086216149 file name=+DATA01/NXYLDB/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=7 STAMP=1086216149 file name=+DATA01/NXYLDB/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=8 STAMP=1086216149 file name=+DATA01/NXYLDB/users01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=9 STAMP=1086216149 file name=+DATA01/NXYLDB/undotbs02.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=10 STAMP=1086216149 file name=+DATA01/NXYLDB/data01.dbf

contents of Memory Script:
{
   set until scn  1704676;
   recover
   standby
   clone database
    delete archivelog
   ;
}
executing Memory Script

executing command: SET until clause

Starting recover at 17-OCT-21
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 26 is already on disk as file +DATA01/NXYLDB/archive/1_26_1085768275.dbf
archived log for thread 1 with sequence 27 is already on disk as file +DATA01/NXYLDB/archive/1_27_1085768275.dbf
archived log for thread 2 with sequence 22 is already on disk as file +DATA01/NXYLDB/archive/2_22_1085768275.dbf
archived log for thread 2 with sequence 23 is already on disk as file +DATA01/NXYLDB/archive/2_23_1085768275.dbf
archived log file name=+DATA01/NXYLDB/archive/1_26_1085768275.dbf thread=1 sequence=26
archived log file name=+DATA01/NXYLDB/archive/2_22_1085768275.dbf thread=2 sequence=22
archived log file name=+DATA01/NXYLDB/archive/1_27_1085768275.dbf thread=1 sequence=27
archived log file name=+DATA01/NXYLDB/archive/2_23_1085768275.dbf thread=2 sequence=23
media recovery complete, elapsed time: 00:00:05
Finished recover at 17-OCT-21
Finished Duplicate Db at 17-OCT-21

RMAN> exit


Recovery Manager complete.
[oracle@NXDB1 ~]$

5、在线复制完成之后,打开备库
#打开数据库
SQL> alter database open;

Database altered.
#查看状态
SQL> select name,db_unique_name,open_mode from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE
--------- ------------------------------ --------------------
NXDB      NXYLDB                         READ ONLY

SQL> 
启动 apply应用日志
SQL> alter database recover managed standby database disconnect from session using current logfile;

Database altered.
#确认状态
SQL> select name,db_unique_name,open_mode from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE
--------- ------------------------------ --------------------
NXDB      NXYLDB                         READ ONLY WITH APPLY

12.启动另外一个节点
1、使用pfile生成spfile
SQL> create spfile='+DATA01/NXYLDB/spfileNXYLDB.ora' from pfile='/tmp/initNXDB.ora' ;

2、创建pfile,内容如下,并将节点1的pfile 拷贝到节点2:
[oracle@NXDB1 ~]$ echo "SPFILE='+DATA01/NXYLDB/spfileNXYLDB.ora'" > $ORACLE_HOME/dbs/initNXYLDB1.ora'
[oracle@NXDB1 ~]$ scp $ORACLE_HOME/dbs/initNXYLDB1.ora NXDB2:$ORACLE_HOME/dbs/initNXYLDB2.ora

3、重启数据库
[grid@NXDB2 ~]$ srvctl stop database -d NXYLDB
[grid@NXDB2 ~]$ srvctl start database -d NXYLDB

4、开启实时日志应用
SQL> alter database recover managed standby database disconnect from session using current logfile;
Database altered.

5、查看数据库状态
#主库
SQL> select name,db_unique_name,open_mode,database_role from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE            DATABASE_ROLE
--------- ------------------------------ -------------------- ----------------
NXDB      NXDB                           READ WRITE           PRIMARY

#备库
SQL> select name,db_unique_name,open_mode,database_role from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE            DATABASE_ROLE
--------- ------------------------------ -------------------- ----------------
NXDB      NXYLDB                         READ ONLY            PHYSICAL STANDBY


13.测试adg同步是否正常
1、主库测试建表空间,建用户,建表、插入数据。
SQL> create tablespace adg datafile '+data01/NXDB/adg.dbf' size 50m autoextend on next 100m maxsize unlimited;
Tablespace created.

SQL> create user adg identified by adg default tablespace adg;
User created.

SQL> grant dba to adg;

Grant succeeded.

SQL> create table adg.test01 (id number , name varchar(20));

Table created.

SQL> insert into adg.test01 values(2,'xxxxx');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from adg.test01;

        ID NAME
---------- --------------------
         2 xxxxx

SQL> 

2、备库查看所建的表空间、用户、表、数据

SQL> select * from adg.test01;

        ID NAME
---------- --------------------
         2 xxxxx

SQL> 

3、查看 DataGuard 相关进程信息

#主库
SQL> /

     PID PROCESS   STATUS       CLIENT_P CLIENT_PID                               THREAD#       SEQ#     BLOCK#     BLOCKS
-------- --------- ------------ -------- ---------------------------------------- ------- ---------- ---------- ----------
   23647 ARCH      CLOSING      ARCH     23647                                          1         24          2        944
   23649 ARCH      CLOSING      ARCH     23649                                          1         22          1        241
   23651 ARCH      CONNECTED    ARCH     23651                                          0          0          0          0
   23653 ARCH      CLOSING      ARCH     23653                                          1         24          1        945
   23477 LGWR      WRITING      LGWR     23477                                          1         25       7674          1

SQL> 

#备库

SQL> SELECT PID,PROCESS,STATUS,CLIENT_PROCESS,CLIENT_PID, THREAD# , SEQUENCE# SEQ#,BLOCK# , BLOCKS FROM V$MANAGED_STANDBY;

     PID PROCESS   STATUS       CLIENT_P CLIENT_PID                               THREAD#       SEQ#     BLOCK#     BLOCKS
-------- --------- ------------ -------- ---------------------------------------- ------- ---------- ---------- ----------
    9915 ARCH      CLOSING      ARCH     9915                                           1         24          1        945
    9917 ARCH      CONNECTED    ARCH     9917                                           0          0          0          0
    9919 ARCH      CONNECTED    ARCH     9919                                           0          0          0          0
    9921 ARCH      CLOSING      ARCH     9921                                           2         19          1       1717
    9970 RFS       IDLE         ARCH     23651                                          0          0          0          0
    9995 RFS       IDLE         ARCH     23061                                          0          0          0          0
    9935 RFS       IDLE         LGWR     22917                                          2         20       7574          1
    9942 RFS       IDLE         LGWR     23477                                          1         25       7574          1
    9948 RFS       IDLE         UNKNOWN  23057                                          0          0          0          0
    9950 RFS       IDLE         UNKNOWN  23647                                          0          0          0          0
   12166 MRP0      APPLYING_LOG N/A      N/A                                            1         25       7573     102400

11 rows selected.


14.清除恢复备库的静态注册文件
[grid@NXDB1 ~]$ more /u02/app/oracle/product/11.2.0/grid/network/admin/listener.ora
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent

#SID_LIST_LISTENER =
#  (SID_LIST =
#    (SID_DESC =
#      (SID_NAME= PLSExtProc)
#      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
#      (PROGRAM = extproc)
#    )
#    (SID_DESC =
#      (GLOBAL_DBNAME = NXDB)
#      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
#      (SID_NAME=NXDB1)
#    )
#  )
[grid@NXDB1 ~]$ 

四、主备切换:
注:rac to rac的adg切换只需在其中一个节点执行相应命令即可,执行完后,再把另外的节点open
1、在做切换时,主库需要将除了 1 节点之外的所有节点全部关闭:
[grid@NXDB1 ~]$ srvctl stop instance -d NXDB -i NXDB2

2、在主库上执行如下操作, 将主库切换为备库角色
#查看switchover 状态
SQL> select open_mode, switchover_status from v$database;

NAME      DATABASE_ROLE    SWITCHOVER_STATUS
--------- ---------------- --------------------
NXDB      PRIMARY          TO STANDBY

#将主库切换为备库角色
SQL> alter database commit to switchover to physical standby;

Database altered.

当 SWITCHOVER_STATUS 值为 TO SYANDBY 时,表示主库可以切换为备库角色;
如果主库的 SWITCHOVER_STATUS 值为 SESSIONS ACTIVE, 则表示当前有回话正在连接数据库,则可以执行如下操作完成主备角色切换:
alter database commit to switchover to physical standby with session shutdown;

3、在备库上执行如下操作,将备库转换为主库角色
#查看备库状态
SQL> select open_mode, switchover_status from v$database;

OPEN_MODE            SWITCHOVER_STATUS
-------------------- --------------------
READ ONLY WITH APPLY TO PRIMARY

#切换成主库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

Database altered.

4、检查备库
#如果 STATUS 显示为非 OPEN, 则执行如下操作, 启动数据库
SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
NXDB1          MOUNTED

[root@NXDB2 ~]# su - grid
[grid@NXDB2 ~]$ srvctl stop database -d NXDB
[grid@NXDB2 ~]$ srvctl start database -d NXDB

#查看数据库状态,模式已经变成主库
SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
NXDB1          OPEN

SQL> select name,database_role,switchover_status from v$database;

NAME      DATABASE_ROLE    SWITCHOVER_STATUS
--------- ---------------- --------------------
NXDB      PRIMARY          FAILED DESTINATION


5、启动备库(原先的主库)
#启动数据库
[grid@NXDB2 ~]$ srvctl start database -d NXDB
#查看数据库模式,此时主库已经切换为物理备库
SQL> select name,database_role,switchover_status from v$database;

NAME      DATABASE_ROLE    SWITCHOVER_STATUS
--------- ---------------- --------------------
NXDB      PHYSICAL STANDBY RECOVERY NEEDED

SQL> 
SQL> select open_mode, switchover_status from v$database;

OPEN_MODE            SWITCHOVER_STATUS
-------------------- --------------------
READ ONLY            RECOVERY NEEDED

SQL> 

#启动应用日志
SQL> alter database recover managed standby database disconnect from session using current logfile;

#查看主库状态
SQL> select name,database_role,switchover_status from v$database;
NAME      DATABASE_ROLE    SWITCHOVER_STATUS
--------- ---------------- --------------------
NXDB      PRIMARY          TO STANDBY

SQL> 
#查看备库状态
SQL> select open_mode, switchover_status from v$database;

OPEN_MODE            SWITCHOVER_STATUS
-------------------- --------------------
READ ONLY WITH APPLY NOT ALLOWED

SQL> 

6、测试同步
在新主库创建表和数据,测试新备库 是否正常同步。


 


http://www.ppmy.cn/news/1520118.html

相关文章

鸿蒙开发—黑马云音乐之播放页面(下)

目录 1.用户随意控制播放进度 2.歌曲暂停和播放控制和歌曲上一首、下一首播放控制 3.歌曲列表 4.歌曲列表数据动态化和背景雾化 5.唱针效果 6.结语 1.用户随意控制播放进度 src/main/ets/services/AvPlayerManager.ets: // 让播放对象从某个时间点开始播放 …

[极客大挑战 2020]Greatphp1

知识点: 1. PHP原生类在CTF中的利用 2. <??> <> <?php echo?> 以及 <??> <> <?php ?> 的变形 3. 正则表达式的取反绕过 进入页面又是熟悉的php的代码审计. <?php error_reporting(0); class SYCLOVER {public $syc;public $l…

集成电路学习:什么是ISP系统编程

一、ISP&#xff1a;系统编程 ISP&#xff08;In-System Programming&#xff09;即系统编程&#xff0c;是一种在系统内部进行的编程方法&#xff0c;主要用于对闪存&#xff08;FLASH&#xff09;、EEPROM等非易失性存储器的编程。ISP编程提供了巨大的灵活性&#xff0c;允许…

vmware中克隆过来的linux节点无system eth0

问题现象 使用vmware虚拟机的克隆功能后&#xff0c;找不到system eth0 解决办法 编辑/etc/udev/rules.d/70-persistent-net.rules文件 可以看到&#xff0c;eth0&#xff0c;是克隆前机器的网卡&#xff0c;eth1是克隆后机器生成的网卡&#xff0c;所以把NAME"eth0&q…

《深度学习》OpenCV 图像轮廓检测、轮廓处理及代码演示

目录 一、图像轮廓检测 1、边缘检测和轮廓检测 2、常用的图像轮廓检测方法包括&#xff1a; 1&#xff09;基于梯度的方法 2&#xff09;基于边缘检测器的方法 3&#xff09;基于阈值的方法 3、查找轮廓的函数 4、轮廓的绘制 5、轮廓特征 1&#xff09;轮廓面积 2&a…

51单片机-第十节-独立按键及数码管优化

一、优化独立按键&#xff1a; 独立按键的实现中&#xff0c;为了解决抖动问题&#xff08;在按下和抬起时&#xff0c;按键会在高低电平之间抖动10ms&#xff09;&#xff0c;我们在按下后Delay(20)&#xff0c;随后进入循环&#xff0c;直到检测到按键抬起&#xff0c;再Del…

SunoAI智能创作歌曲神器,自动创作歌曲源码系统 带完整的安装代码包以及搭建部署教程

开发背景 技术革新引领音乐未来 随着深度学习、自然语言处理&#xff08;NLP&#xff09;及音频生成技术的不断突破&#xff0c;人工智能在音乐创作领域的应用日益广泛。传统的音乐创作往往依赖于作曲家的灵感、音乐理论与技巧积累&#xff0c;而AI的加入则打破了这些限制&…

CityHash、FarmHash

CityHash和FarmHash都是由Google开发的非加密哈希函数&#xff0c;专为快速处理大量数据而设计。它们在数据中心和大规模分布式系统中尤其有用&#xff0c;用于任务如数据分区、查找优化、数据校验等。这两种哈希函数都以其高效的性能和良好的分布特性而著称。 CityHash City…

如何使用 Canvas 和 Paint 进行绘制,以及如何处理自定义属性和解析 XML 属性

在 Android 中&#xff0c;自定义 View 的绘制通常涉及使用 Canvas 和 Paint 两个关键类。Canvas 提供了一个用于绘制图形的界面&#xff0c;而 Paint 则用来定义绘制的风格和颜色。以下是如何使用 Canvas 和 Paint 进行绘制的步骤&#xff0c;以及如何处理自定义属性和解析 XM…

前端面试题每日一学_3

今日一题&#xff1a; 下面的JS代码执行的结果是什么&#xff1f; const a Boolean() console.log(a); const b Boolean(null); console.log(b); const c Boolean(NaN); console.log(c); const d Boolean(false); console.log(d); const e Boolean({}); console.log(e);…

工厂模式和策略模式的区别,以及java代码示例

工厂模式和策略模式是两种不同的设计模式&#xff0c;主要用来解决不同的问题。 工厂模式是一种创建型模式&#xff0c;用来创建对象的实例。它通过一个工厂类来创建具体的对象&#xff0c;而不是在客户端直接实例化对象。工厂模式主要用于解决对象的创建过程复杂或不适合直接…

5G NR CORESET

先说个引子热场&#xff0c;对于无线接入网这部分来说&#xff0c;绝大多数情况下终端是从属于网络的&#xff0c;而PDCCH则是数据调度指挥的核心&#xff0c;也就是上下行的调度指令都是通过PDCCH下发给终端的&#xff0c;如果UE无法解码并获得PDCCH中携带的DCI信息&#xff0…

【最新华为OD机试E卷】猜数字(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

深度学习100问23:什么是前馈型神经网络

嘿&#xff0c;前馈型神经网络就像一个神奇的小工厂哟&#xff01; 一、定义及原理 这个小工厂呀&#xff0c;有个特别的工作方式。数据就像是原材料&#xff0c;从输入层这个“大门”进入工厂。然后呢&#xff0c;这些数据一路向前&#xff0c;经过一个又一个隐藏层&#…

网络基础:理解IP地址、默认网关与网段(IP地址是什么,默认网关是什么,网段是什么,IP地址、默认网关与网段)

前言 在计算机网络中&#xff0c;IP地址、默认网关和网段&#xff08;也称为子网&#xff09;之间有着密切的关系。它们是网络通信中的至关重要的概念&#xff0c;但它们并不相同。这里来介绍一下它们之间的关系&#xff0c;简单记录一下 一. IP地址 1. 介绍 IP 地址&#xf…

springboot学习11 (菜品缓存redis)

缓存逻辑分析 目的&#xff1a;减轻数据库压力每个分类下的菜品保存一份缓存数据数据库中菜品数据有变更时清理缓存数据 keyvaluedish_1string(...)dish_2string(...)dish_3string(...) GetMapping("/list")ApiOperation("根据分类id查询菜品")public Res…

基于springboot+vue大学生资助管理系统

​基于springbootvue大学生资助管理系统设计与实现(源码L文ppt)4-055 4 系统设计 4.1 功能模块设计 大学生资助管理系统根据权限类型进行分类&#xff0c;主要可分为学生和管理员二大模块。学生模块主要实现了修改个人信息&#xff0c;查看资助政策、用户反馈、在线客服…

MySQL高级课程:索引设计与性能优化的最佳实践

MySQL高级课程&#xff1a;索引设计与性能优化的最佳实践 MySQL作为一种流行的关系型数据库管理系统&#xff0c;在企业级应用中被广泛使用。随着数据量的增加和业务复杂度的提升&#xff0c;数据库的性能成为关键问题。为了保证MySQL数据库在高并发、大数据量场景下的高效运行…

CST软件如何计算天线系数Antenna Factor-达索官方授权

天线系数&#xff08;Antenna Factor&#xff09;也称天线因子&#xff0c;是指天线附近接收的电场强度与天线端口生成的电压比值&#xff0c;简单讲就是天线接收电磁波&#xff0c;然后转化成电信号的能力&#xff1b;或者反过来&#xff0c;激励电信号之后&#xff0c;天线转…

ES6基础----Promise的使用

目录 Promise 是 ES6 提出的解决异步编程的一种方法&#xff0c;主要是为了解决回调地狱的问题 1、异步编程的执行方式 2、回调地狱&#xff1a;需求&#xff1a;先执行完--异步任务1 之后再去执行--异步任务2 最后执行--异步任务3 3、Promise 是构造函数&#xff0c;可以…