oracle12c dataguard搭建及切换


准备工作:
主节点(centos7.9 + oracle 12.2): 安装数据库软件,建库(实例名 lo666)
从节点(centos7.9 + oracle 12.2): 安装数据库软件,不建库 (后续从主库同步,实例名stdlo777)


1. 创建用户和用户组(两个节点,root用户执行)

groupadd oinstall
groupadd dba
groupadd oper
useradd -g oinstall -G dba,oper oracle
echo 'oracle' | passwd --stdin oracle

2. 创建数据库安装目录和数据存储目录(两个节点,root用户执行)

mkdir -p /u01/oracle
chown -R oracle.oinstall /u01
chmod -R 775 /u01
mkdir -p /data/arch
chown -R oracle.oinstall /data

3. 安装依赖包(两个节点,root用户执行)

yum install libstdc++ libstdc++-devel gcc ksh glibc-devel libaio libaio-devel gcc-c++ compat-libcap1 sysstat smartmontools binutils rlwrap unzip 

4. 设置oracle用户的环境变量
vi .bash_profile  主节点,oracle用户添加如下内容

export ORACLE_BASE=/u01
export ORACLE_HOME=$ORACLE_BASE/oracle
export ORACLE_SID=lo666
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
stty erase ^H

alias sysdba='rlwrap sqlplus / as sysdba'
alias rmant='rlwrap rman target /'


vi .bash_profile  从节点,oracle用户添加如下内容

export ORACLE_BASE=/u01
export ORACLE_HOME=$ORACLE_BASE/oracle
export ORACLE_SID=stdlo777
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
stty erase ^H

alias sysdba='rlwrap sqlplus / as sysdba'
alias rmant='rlwrap rman target /'

5. 设置swap(两个节点,root用户执行)

dd if=/dev/zero of=/opt/swap.file bs=1G count=10
mkswap /opt/swap.file
swapon /opt/swap.file

设置swap开机自动挂载(两个节点,root用户执行)

chmod +x /etc/rc.d/rc.local
swapon /opt/swap.file

6. 配置hosts(两个节点,root用户执行)

vi /etc/hosts
192.168.1.225 dg225
192.168.1.226 dg226

7. 配置sysctl.conf和limits.conf (两个节点,root用户执行)

vi /etc/sysctl.conf
kernel.sem=250 32000 100 128
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 6208434176
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

vi /etc/security/limits.conf
oracle  soft    nofile  65536
oracle  hard    nofile  65536
oracle  soft    nproc   2047
oracle  hard    nproc   16384
oracle  soft    stack   10240

8. 重启系统(两个节点,root用户执行)
reboot

9. 解压数据库(两个节点,root用户执行)
cd /opt
unzip Oracle_12C_liunx_64.zip
chown oracle.oinstall database -R

10. 两节点静默安装数据库(两个节点,oracle用户执行)
/opt/database/runInstaller -silent -responseFile /opt/12c_only_dbsw.rsp
cat /opt/12c_only_dbsw.rsp

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v12.2.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/tmp/oraInventory
ORACLE_HOME=/u01/oracle
ORACLE_BASE=/u01

oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.rac.configurationType=
oracle.install.db.CLUSTER_NODES=
oracle.install.db.isRACOneInstall=false
oracle.install.db.racOneServiceName=
oracle.install.db.rac.serverpoolName=
oracle.install.db.rac.serverpoolCardinality=0
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.ConfigureAsContainerDB=false
oracle.install.db.config.PDBName=
oracle.install.db.config.starterdb.characterSet=
oracle.install.db.config.starterdb.memoryOption=false
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.password.ALL=
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.password.PDBADMIN=
oracle.install.db.config.starterdb.managementOption=DEFAULT
oracle.install.db.config.starterdb.omsHost=
oracle.install.db.config.starterdb.omsPort=0
oracle.install.db.config.starterdb.emAdminUser=
oracle.install.db.config.starterdb.emAdminPassword=
oracle.install.db.config.starterdb.enableRecovery=false
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
COLLECTOR_SUPPORTHUB_URL=

主节点,静默创建数据库(主节点,oracle用户执行)

[oracle@dg225 opt]$ dbca -silent -createDatabase -responseFile 12c_dbca_lo666.rsp

[oracle@dg225 opt]$ cat 12c_dbca_lo666.rsp
responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v12.2.0
gdbName=lo666
sid=lo666
databaseConfigType=SI
RACOneNodeServiceName=
policyManaged=false
createServerPool=false
serverPoolName=
cardinality=
force=false
pqPoolName=
pqCardinality=
createAsContainerDatabase=false
numberOfPDBs=0
pdbName=
useLocalUndoForPDBs=true
pdbAdminPassword=
nodelist=
templateName=/u01/oracle/assistants/dbca/templates/General_Purpose.dbc
sysPassword=
systemPassword=
serviceUserPassword=
emConfiguration=DBEXPRESS
emExpressPort=5500
runCVUChecks=false
dbsnmpPassword=
omsHost=
omsPort=0
emUser=
emPassword=
dvConfiguration=false
dvUserName=
dvUserPassword=
dvAccountManagerName=
dvAccountManagerPassword=
olsConfiguration=false
datafileJarLocation={ORACLE_HOME}/assistants/dbca/templates/
datafileDestination=/data/oradata/{DB_UNIQUE_NAME}/
recoveryAreaDestination=
storageType=FS
diskGroupName=
asmsnmpPassword=
recoveryGroupName=
characterSet=ZHS16GBK
nationalCharacterSet=AL16UTF16
registerWithDirService=false
dirServiceUserName=
dirServicePassword=
walletPassword=
listeners=
variablesFile=
variables=DB_UNIQUE_NAME=lo666,ORACLE_BASE=/u01,PDB_NAME=,DB_NAME=lo666,ORACLE_HOME=/u01/oracle,SID=lo666
initParams=undo_tablespace=UNDOTBS1,processes=480,nls_language=AMERICAN,pga_aggregate_target=1184MB,sga_target=3552MB,dispatchers=(PROTOCOL=TCP) (SERVICE=lo666XDB),db_block_size=8192BYTES,diagnostic_dest={ORACLE_BASE},audit_file_dest={ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/adump,nls_territory=AMERICA,local_listener=LISTENER_LO666,compatible=12.2.0,control_files=("/data/oradata/{DB_UNIQUE_NAME}/control01.ctl", "/data/oradata/{DB_UNIQUE_NAME}/control02.ctl"),db_name=lo666,audit_trail=db,remote_login_passwordfile=EXCLUSIVE,open_cursors=300
sampleSchema=true
memoryPercentage=40
databaseType=MULTIPURPOSE
automaticMemoryManagement=false
totalMemory=0


配置主节点: 

[oracle@dg225 ~]$ alias sysdba
alias sysdba='rlwrap sqlplus / as sysdba'
[oracle@dg225 ~]$ sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Sat Jun 22 21:16:38 2024
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to an idle instance.

SQL> startup mount
ORACLE instance started.

Total System Global Area 3724541952 bytes
Fixed Size                  8627296 bytes
Variable Size             939527072 bytes
Database Buffers         2768240640 bytes
Redo Buffers                8146944 bytes
Database mounted.
SQL> alter database archivelog;         -- 修改归档模式
Database altered.

SQL> alter database open;       -- 打开数据库
Database altered.

SQL> alter database force logging;       -- 打开force logging; 
Database altered.

SQL> alter database add standby logfile ('/data/oradata/lo666/stdredo01.log') size 200M;         -- 添加standby redo log
Database altered.

SQL> alter database add standby logfile ('/data/oradata/lo666/stdredo02.log') size 200M;         -- 添加standby redo log
Database altered.

SQL> alter database add standby logfile ('/data/oradata/lo666/stdredo03.log') size 200M;         -- 添加standby redo log
Database altered.

SQL> alter database add standby logfile ('/data/oradata/lo666/stdredo04.log') size 200M;         -- 添加standby redo log
Database altered.

SQL> col MEMBER for a50
SQL> set linesize 200
SQL> select group#,type,member  from v$logfile where type='STANDBY';
    GROUP# TYPE    MEMBER
---------- ------- --------------------------------------------------
         4 STANDBY /data/oradata/lo666/stdredo01.log
         5 STANDBY /data/oradata/lo666/stdredo02.log
         6 STANDBY /data/oradata/lo666/stdredo03.log
         7 STANDBY /data/oradata/lo666/stdredo04.log

SQL> select GROUP#, DBID,THREAD#,SEQUENCE#,STATUS from v$standby_log;
    GROUP# DBID                                        THREAD#  SEQUENCE# STATUS
---------- ---------------------------------------- ---------- ---------- ----------
         4 UNASSIGNED                                        0          0 UNASSIGNED
         5 UNASSIGNED                                        0          0 UNASSIGNED
         6 UNASSIGNED                                        0          0 UNASSIGNED
         7 UNASSIGNED                                        0          0 UNASSIGNED


SQL> alter system set log_archive_config='DG_CONFIG=(lo666,stdlo777)' scope=spfile;          --- 修改dg参数
System altered.

SQL> alter system set log_archive_dest_1='LOCATION=/data/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=lo666' scope=both;

System altered.

SQL> alter system set log_archive_dest_2='SERVICE=stdlo777 LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stdlo777' scope=spfile;
System altered.

SQL> alter system set db_file_name_convert='/data/oradata/stdlo777/','/data/oradata/lo666/' scope=spfile;
System altered.

SQL> alter system set log_file_name_convert='/data/oradata/stdlo777/','/data/oradata/lo666/' scope=spfile;
System altered.

SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=enable scope=spfile;
System altered.

SQL> alter system set LOG_ARCHIVE_DEST_STATE_2=enable scope=spfile;
System altered.

SQL> alter system set FAL_CLIENT=lo666 scope=spfile;
System altered.

SQL> alter system set FAL_SERVER=stdlo777 scope=spfile;
System altered.

SQL> alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=spfile;
System altered.

SQL> alter system set log_archive_format='%t_%s_%r.arc' scope=spfile;
System altered.

SQL> create pfile from spfile;       --- 创建pfile
File created.

SQL> 

[oracle@dg225 dbs]$ cat /u01/oracle/dbs/initlo666.ora
lo666.__data_transfer_cache_size=0
lo666.__db_cache_size=2768240640
lo666.__inmemory_ext_roarea=0
lo666.__inmemory_ext_rwarea=0
lo666.__java_pool_size=16777216
lo666.__large_pool_size=50331648
lo666.__oracle_base='/u01'#ORACLE_BASE set from environment
lo666.__pga_aggregate_target=1241513984
lo666.__sga_target=3724541952
lo666.__shared_io_pool_size=201326592
lo666.__shared_pool_size=671088640
lo666.__streams_pool_size=0
*.audit_file_dest='/u01/admin/lo666/adump'
*.audit_trail='db'
*.compatible='12.2.0'
*.control_files='/data/oradata/lo666/control01.ctl','/data/oradata/lo666/control02.ctl'
*.db_block_size=8192
*.db_file_name_convert='/data/oradata/stdlo777/','/data/oradata/lo666/'
*.db_name='lo666'
*.diagnostic_dest='/u01'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=lo666XDB)'
*.fal_client='LO666'
*.fal_server='STDLO777'
*.log_archive_config='DG_CONFIG=(lo666,stdlo777)'
*.log_archive_dest_1='LOCATION=/data/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=lo666'
*.log_archive_dest_2='SERVICE=stdlo777 LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stdlo777'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_file_name_convert='/data/oradata/stdlo777/','/data/oradata/lo666/'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=1184m
*.processes=480
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=3552m
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'

拷贝pfile至从节点
 

[oracle@dg225 dbs]$ scp initlo666.ora 192.168.1.226:/u01/oracle/dbs/initstdlo777.ora

 主节点配置监听

[oracle@dg225 admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/oracle/network/admin/listener.ora
# Generated by Oracle configuration tools.

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

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = lo666)
      (ORACLE_HOME = /u01/oracle)
      (SID_NAME = lo666)
    )
  )

ADR_BASE_LISTENER = /u01/

[oracle@dg225 admin]$ cat tnsnames.ora
lo666 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dg225)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = lo666)
    )
  )

stdlo777 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dg226)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = stdlo777)
    )
  )

ADR_BASE_LISTENER = /u01/


从节点配置参数文件:
修改 参数文件

vi /u01/oracle/dbs/initstdlo777.ora

lo666.__data_transfer_cache_size=0
lo666.__db_cache_size=2768240640
lo666.__inmemory_ext_roarea=0
lo666.__inmemory_ext_rwarea=0
lo666.__java_pool_size=16777216
lo666.__large_pool_size=50331648
lo666.__oracle_base='/u01'#ORACLE_BASE set from environment
lo666.__pga_aggregate_target=1241513984
lo666.__sga_target=3724541952
lo666.__shared_io_pool_size=201326592
lo666.__shared_pool_size=671088640
lo666.__streams_pool_size=0
*.audit_file_dest='/u01/admin/stdlo777/adump'
*.audit_trail='db'
*.compatible='12.2.0'
*.control_files='/data/oradata/stdlo777/control01.ctl','/data/oradata/stdlo777/control02.ctl'
*.db_block_size=8192
*.db_file_name_convert='/data/oradata/lo666/','/data/oradata/stdlo777/'
*.db_name='lo666'
*.diagnostic_dest='/u01'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=stdlo777XDB)'
*.fal_server='LO666'
*.fal_client='STDLO777'
*.log_archive_config='DG_CONFIG=(stdlo777,lo666)'
*.log_archive_dest_1='LOCATION=/data/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stdlo777'
*.log_archive_dest_2='SERVICE=lo666 LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=lo666'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_file_name_convert='/data/oradata/lo666/','/data/oradata/stdlo777/'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=1184m
*.processes=480
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=3552m
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.DB_UNIQUE_NAME=stdlo777

从节点配置监听

[oracle@dg226 admin]$ cat listener.ora
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dg226)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = stdlo777)
      (ORACLE_HOME = /u01/oracle)
      (SID_NAME = stdlo777)
    )
  )

ADR_BASE_LISTENER = /u01/

[oracle@dg226 admin]$ cat tnsnames.ora
lo666 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dg225)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = lo666)
    )
  )

stdlo777 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dg226)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = stdlo777)
    )
  )

ADR_BASE_LISTENER = /u01/

[oracle@dg226 admin]$ lsnrctl start

从节点配置必要的目录, 启动至nomount

[oracle@dg226 ~]$ mkdir -p /u01/admin/stdlo777/adump
[oracle@dg226 ~]$ mkdir -p /data/oradata/stdlo777
[oracle@dg226 ~]$ mkdir -p /data/arch


[oracle@dg226 ~]$ sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sat Jun 22 22:33:22 2024
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to an idle instance.

SQL> startup nomount             --- 使用参数文件开启数据库到nomount状态
ORACLE instance started.
Total System Global Area 3724541952 bytes
Fixed Size                  8627296 bytes
Variable Size             939527072 bytes
Database Buffers         2768240640 bytes
Redo Buffers                8146944 bytes
SQL>

主节点 duplicate数据库至从节点:

[oracle@dg225 ~]$ scp /u01/oracle/dbs/orapwlo666 192.168.1.226:/u01/oracle/dbs/orapwstdlo777   --- 拷贝密码文件


[oracle@dg225 admin]$ rlwrap rman target sys/Oracle123@lo666 AUXILIARY sys/Oracle123@stdlo777  

Recovery Manager: Release 12.2.0.1.0 - Production on Sun Jun 23 17:14:01 2024
Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.
connected to target database: LO666 (DBID=645469506)
connected to auxiliary database: LO666 (not mounted)

RMAN> duplicate target database for standby from active database dorecover nofilenamecheck;   --- 将主库duplicate到从库

Starting Duplicate Db at 23-JUN-24
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=128 device type=DISK
current log archived
contents of Memory Script:
{
   backup as copy reuse
   targetfile  '/u01/oracle/dbs/orapwlo666' auxiliary format
 '/u01/oracle/dbs/orapwstdlo777'   ;
}
executing Memory Script
Starting backup at 23-JUN-24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=134 device type=DISK
Finished backup at 23-JUN-24
contents of Memory Script:
{
   restore clone from service  'lo666' standby controlfile;
}
executing Memory Script
Starting restore at 23-JUN-24
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service lo666
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
output file name=/data/oradata/stdlo777/control01.ctl
output file name=/data/oradata/stdlo777/control02.ctl
Finished restore at 23-JUN-24
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
 "/data/oradata/stdlo777/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to
 "/data/oradata/stdlo777/system01.dbf";
   set newname for datafile  3 to
 "/data/oradata/stdlo777/sysaux01.dbf";
   set newname for datafile  4 to
 "/data/oradata/stdlo777/undotbs01.dbf";
   set newname for datafile  7 to
 "/data/oradata/stdlo777/users01.dbf";
   restore
   from  nonsparse   from service
 'lo666'   clone database
   ;
   sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /data/oradata/stdlo777/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 23-JUN-24
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service lo666
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /data/oradata/stdlo777/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service lo666
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00003 to /data/oradata/stdlo777/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service lo666
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00004 to /data/oradata/stdlo777/undotbs01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service lo666
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00007 to /data/oradata/stdlo777/users01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
Finished restore at 23-JUN-24
sql statement: alter system archive log current
current log archived
contents of Memory Script:
{
   restore clone force from service  'lo666'
           archivelog from scn  1847821;
   switch clone datafile all;
}
executing Memory Script
Starting restore at 23-JUN-24
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: using network backup set from service lo666
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=7
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: using network backup set from service lo666
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=8
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: using network backup set from service lo666
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=9
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 23-JUN-24
datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=1172423729 file name=/data/oradata/stdlo777/system01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=1172423729 file name=/data/oradata/stdlo777/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=1172423729 file name=/data/oradata/stdlo777/undotbs01.dbf
datafile 7 switched to datafile copy
input datafile copy RECID=4 STAMP=1172423729 file name=/data/oradata/stdlo777/users01.dbf
contents of Memory Script:
{
   set until scn  1847958;
   recover
   standby
   clone database
    delete archivelog
   ;
}
executing Memory Script
executing command: SET until clause
Starting recover at 23-JUN-24
using channel ORA_AUX_DISK_1
starting media recovery
archived log for thread 1 with sequence 7 is already on disk as file /data/arch/1_7_1172347332.arc
archived log for thread 1 with sequence 8 is already on disk as file /data/arch/1_8_1172347332.arc
archived log for thread 1 with sequence 9 is already on disk as file /data/arch/1_9_1172347332.arc
archived log file name=/data/arch/1_7_1172347332.arc thread=1 sequence=7
archived log file name=/data/arch/1_8_1172347332.arc thread=1 sequence=8
archived log file name=/data/arch/1_9_1172347332.arc thread=1 sequence=9
media recovery complete, elapsed time: 00:00:02
Finished recover at 23-JUN-24
Finished Duplicate Db at 23-JUN-24
RMAN>

从库:
[oracle@dg226 admin]$ sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sun Jun 23 17:16:56 2024
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> select status from v$instance;
STATUS
------------
MOUNTED

SQL> alter database open read only;                 --- 从库以只读的方式打开
Database altered.

SQL> alter database recover managed standby database using current logfile disconnect from session;          --- 开启从库的日志应用
Database altered.
SQL>

SQL> alter database recover managed standby database cancel;       --- 可停止从库的日志应用
Database altered.

---------------dg 已搭建完成,数据已可自动同步到备节点 --------------------------------------------


--------------- 开始切换switchover ----------------------------------------------------

主节点检查:

SYS@lo666> select name,open_mode,protection_mode,database_role, switchover#,switchover_status from v$database;  -- 角色为PRIMARY,可切换
NAME      OPEN_MODE            PROTECTION_MODE      DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- ----------- --------------------
LO666     READ WRITE           MAXIMUM PERFORMANCE  PRIMARY            645608162 TO STANDBY

SYS@lo666> select process,status,client_process,sequence#,block# from v$managed_standby;   -- LGWR 在写 WRITING 
PROCESS   STATUS       CLIENT_P  SEQUENCE#     BLOCK#
--------- ------------ -------- ---------- ----------
ARCH      CLOSING      ARCH             24       2048
DGRD      ALLOCATED    N/A               0          0
DGRD      ALLOCATED    N/A               0          0
ARCH      CLOSING      ARCH             24          1
ARCH      CLOSING      ARCH             22     251904
ARCH      CONNECTED    ARCH              0          0
DGRD      ALLOCATED    N/A               0          0
LGWR      WRITING      LGWR             25        365

备节点检查:

SYS@stdlo777> select name,open_mode,protection_mode,database_role, switchover#,switchover_status from v$database;  -- 角色为PHYSICAL STANDBY ,可切换
NAME      OPEN_MODE            PROTECTION_MODE      DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- ----------- --------------------
LO666     READ ONLY WITH APPLY MAXIMUM PERFORMANCE  PHYSICAL STANDBY   645608162 NOT ALLOWED

SYS@stdlo777> select process,status,client_process,sequence#,block# from v$managed_standby;       -- 备库MRP0在应用日志 APPLYING_LOG
PROCESS   STATUS       CLIENT_P  SEQUENCE#     BLOCK#
--------- ------------ -------- ---------- ----------
ARCH      CONNECTED    ARCH              0          0
DGRD      ALLOCATED    N/A               0          0
DGRD      ALLOCATED    N/A               0          0
ARCH      CONNECTED    ARCH              0          0
ARCH      CONNECTED    ARCH              0          0
RFS       IDLE         Archival          0          0
ARCH      CLOSING      ARCH             24       2048
RFS       IDLE         UNKNOWN           0          0
RFS       IDLE         LGWR             25        414
MRP0      APPLYING_LOG N/A              25        416
10 rows selected.

主节点切换:

SYS@lo666> alter database commit to switchover to physical standby with session shutdown ;    -- 将主节点切换为备,关闭主节点
Database altered.

备节点接管:

SYS@stdlo777> select process,status,client_process,sequence#,block# from v$managed_standby;   -- 此时MRP0 为等待日志
PROCESS   STATUS       CLIENT_P  SEQUENCE#     BLOCK#
--------- ------------ -------- ---------- ----------
ARCH      CLOSING      ARCH             25          1
DGRD      ALLOCATED    N/A               0          0
DGRD      ALLOCATED    N/A               0          0
ARCH      CONNECTED    ARCH              0          0
ARCH      CONNECTED    ARCH              0          0
ARCH      CLOSING      ARCH             24       2048
MRP0      WAIT_FOR_LOG N/A              26          0
7 rows selected.

SYS@stdlo777> alter database commit to switchover to primary with session shutdown;           -- 切换为主primary
Database altered.

SYS@stdlo777> select name,open_mode,protection_mode,database_role, switchover#,switchover_status from v$database;
NAME      OPEN_MODE            PROTECTION_MODE      DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- ----------- --------------------
LO666     MOUNTED              MAXIMUM PERFORMANCE  PRIMARY                    0 NOT ALLOWED

SYS@stdlo777>  alter database open;
Database altered.

SYS@stdlo777> select name,open_mode,protection_mode,database_role, switchover#,switchover_status from v$database;   -- 角色已经切换为主
NAME      OPEN_MODE            PROTECTION_MODE      DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- ----------- --------------------
LO666     READ WRITE           MAXIMUM PERFORMANCE  PRIMARY            645973944 FAILED DESTINATION

原主节点,现启动作为备节点:

SYS@lo666> startup mount
ORACLE instance started.

Total System Global Area 3724541952 bytes
Fixed Size                  8627296 bytes
Variable Size             939527072 bytes
Database Buffers         2768240640 bytes
Redo Buffers                8146944 bytes
Database mounted.
SYS@lo666> alter database open read only;       -- read only 打开数据库,作为备库准备接收日志
Database altered.

SYS@lo666> set line 200
SYS@lo666> select name,open_mode,protection_mode,database_role, switchover#,switchover_status from v$database;  -- 角色为备库,需要recovery
NAME      OPEN_MODE            PROTECTION_MODE      DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- ----------- --------------------
LO666     READ ONLY            MAXIMUM PERFORMANCE  PHYSICAL STANDBY           0 RECOVERY NEEDED

SYS@lo666> alter database recover managed standby database using current logfile disconnect from session;     -- 开始应用日志
Database altered.

SYS@lo666>  select name,open_mode,protection_mode,database_role, switchover#,switchover_status from v$database;
NAME      OPEN_MODE            PROTECTION_MODE      DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- ----------- --------------------
LO666     READ ONLY WITH APPLY MAXIMUM PERFORMANCE  PHYSICAL STANDBY   645973944 NOT ALLOWED

SYS@lo666>

新主节点已切换成功,并将日志同步给备节点:

SYS@stdlo777> select name,open_mode,protection_mode,database_role, switchover#,switchover_status from v$database;   -- 新主节点状态

NAME      OPEN_MODE            PROTECTION_MODE      DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- ----------- --------------------
LO666     READ WRITE           MAXIMUM PERFORMANCE  PRIMARY            645973944 TO STANDBY


SYS@stdlo777> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;   -- 检查日志是否被备库应用   
 SEQUENCE# APPLIED
---------- ---------
         7 YES
         8 YES
         9 YES
        10 YES
        11 YES
        12 YES
        13 YES
        13 YES
        14 YES
        14 YES
        15 YES

 SEQUENCE# APPLIED
---------- ---------
        15 YES
        16 YES
        16 YES
        17 YES
        17 YES
        18 YES
        18 YES
        19 YES
        19 YES

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值