ORACLE单实例搭建ADG

环境:
Primary:
DB Name : etldb
DB Version : Oracle 11g
IP: 192.168.1.1

Standby:
DB Version : Oracle 11g
DB Name : etldb
DB_UNIQUE_NAME :etldbdr
IP: 192.168.1.2

1.Primary库开启归档模式:

SQL> select name, open_mode,cdb from v$database;

NAME      OPEN_MODE            
--------- -------------------- 
etldb   READ WRITE           

SQL> select force_logging from v$database;

FORCE_LOGGING
---------------------------------------
NO

SQL> ALTER DATABASE FORCE LOGGING;

Database altered.

SQL> select force_logging from v$database;

FORCE_LOGGING
---------------------------------------
YES <-----

SQL>
  1. 检查Primary库密码文件
[oracle@rac1 dbs]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1
[oracle@rac1 dbs]$ ls -ltr orapwUOIN1CON
-rw-r-----. 1 oracle dba 3584 Dec 14 12:26 orapwetldb
[oracle@rac1 dbs]$

3.配置Primary的Standby Redo Log

SQL> set lines 180
SQL> col MEMBER for a60
SQL> select b.thread#, a.group#, a.member, b.bytes FROM v$logfile a, v$log b WHERE a.group# = b.group#;

   THREAD#     GROUP# MEMBER                                                            BYTES
---------- ---------- ------------------------------------------------------------ ----------
         1          3 /oradata/etldb/redo03.log                       209715200
         1          2 /oradata/etldb/redo02.log                       209715200
         1          1 /oradata/etldb/redo01.log                       209715200

SQL>

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/oradata/etldb/redo04.log') SIZE 200M;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/oradata/etldb/redo05.log') SIZE 200M;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/oradata/etldb/redo06.log') SIZE 200M;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/oradata/etldb/redo07.log') SIZE 200M;

Database altered.

SQL>

SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                                       IS_     CON_ID
---------- ------- ------- ------------------------------------------------------------ --- ----------
         3         ONLINE  /oradata/etldb/redo03.log                                    NO           0
         2         ONLINE  /oradata/etldb/redo02.log                                    NO           0
         1         ONLINE  /oradata/etldb/redo01.log                                    NO           0
         4         STANDBY /oradata/etldb/redo04.log                                    NO           0
         5         STANDBY /oradata/etldb/redo05.log                                    NO           0
         6         STANDBY /oradata/etldb/redo06.log                                    NO           0
         7         STANDBY /oradata/etldb/redo07.log                                    NO           0



7 rows selected.

SQL>

SQL> select a.group#, a.member, b.bytes FROM v$logfile a, v$standby_log b WHERE a.group# = b.group#;

    GROUP# MEMBER                                           BYTES
---------- ----------------------------------------- -------------
         4 /oradata/etldb/redo04.log                       209715200
         5 /oradata/etldb/redo05.log                       209715200
         6 /oradata/etldb/redo06.log                       209715200
         7 /oradata/etldb/redo07.log                       209715200

SQL>

3.检查Primary库的归档模式

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /oradata/etldb/
Oldest online log sequence     3
Next log sequence to archive   5
Current log sequence           5
SQL>

4.设置Primary库初始化Parameters参数

SQL> alter system set db_unique_name='etldb' scope=spfile;

System altered.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(etldb,etldbdr)' scope=both;

System altered.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/oradata/etldb VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=etldb' scope=both;

System altered.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=etldbdr LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=etldbdr' scope=both;

System altered.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=both;

System altered.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=both;

System altered.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.dbf' SCOPE=SPFILE;

System altered.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30 scope=both;

System altered.

SQL> ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

System altered.

SQL> ALTER SYSTEM SET fal_client=etldbdr scope=both;

System altered.

SQL> ALTER SYSTEM SET fal_server=etldb scope=both;

System altered.

SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/oradata/etldbdr','/oradata/etldb' SCOPE=SPFILE;

System altered.

SQL> ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/oradata/etldbdr','/oradata/etldb' SCOPE=SPFILE;

System altered.

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

System altered.

SQL>
SQL> create pfile='/home/oracle/initetldb.ora' from spfile;

File created.

SQL> 

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0 - 64bit Production


[oracle@rac1 ~]$ cat /home/oracle/initetldb.ora

etldb.__data_transfer_cache_size=0
etldb.__db_cache_size=369098752
etldb.__inmemory_ext_roarea=0
etldb.__inmemory_ext_rwarea=0
etldb.__java_pool_size=16777216
etldb.__large_pool_size=33554432
etldb.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
etldb.__pga_aggregate_target=587202560
etldb.__sga_target=687865856
etldb.__shared_io_pool_size=33554432
etldb.__shared_pool_size=218103808
etldb.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/etldb/adump'
*.audit_trail='db'
*.compatible='11.2.0'
*.control_files='/oradata/etldb/control01.ctl','/oradata/ETLDB/controlfile/control02.ctl'
*.db_block_size=8192
*.db_file_name_convert='/oradata/etldbdr','/oradata/etldb'
*.db_name='etldb'
*.db_unique_name='etldb'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=etldbXDB)'
*.fal_client='etldb'
*.fal_server='etldbdr'
*.log_archive_config='DG_CONFIG=(etldb,etldbdr)'
*.log_archive_dest_1='LOCATION=/oradata/etldb VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=etldb'
*.log_archive_dest_2='SERVICE=etldbdr LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=etldbdr'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=30
*.log_file_name_convert='/oradata/etldbdr','/oradata/etldb'
*.memory_target=1201m
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'

[oracle@rac1 ~]$

5.备份主库数据配置备库

mmkdir /oradata/rman_backup

[oracle@rac1 rman_backup]$ rman target /
run {
allocate channel t1 type disk;
allocate channel t2 type disk;
allocate channel t3 type disk;
backup incremental level 0 database format='/oradata/backup_rman/database_%d_%u_%s';
sql 'alter system archive log current';
backup format '/oradata/backup_rman/arch_%d_%u_%s' diskratio=0 archivelog all delete input;
backup format '/oradata/backup_rman/control_%d_%u_%s' current controlfile;
release channel c1;
release channel c2;
release channel c3;
}

[oracle@rac1 backup_rman]$ ls -ltr
-rwxrwxr-x. 1 oracle oinstall 976 Jan 4 05:45 BACKUP_ETLDB.sh
-rw-r-----. 1 oracle oinstall 6463488 Jan 5 17:13 database_ETLDB_19tmj2i0_41
-rw-r-----. 1 oracle oinstall 435650560 Jan 5 17:13 database_ETLDB_18tmj2i0_40
-rw-r-----. 1 oracle oinstall 726351872 Jan 5 17:14 database_ETLDB_17tmj2i0_39
-rw-r-----. 1 oracle oinstall 112978944 Jan 5 17:14 arch_ETLDB_1dtmj2ja_45
-rw-r-----. 1 oracle oinstall 125304832 Jan 5 17:14 arch_ETLDB_1ctmj2ja_44
-rw-r-----. 1 oracle oinstall 229672448 Jan 5 17:14 arch_ETLDB_1btmj2j9_43
-rw-r-----. 1 oracle oinstall 5603328 Jan 5 17:14 arch_ETLDB_1etmj2jh_46
-rw-r-----. 1 oracle oinstall 10960896 Jan 5 17:14 control_ETLDB_1gtmj2jk_48

6.密码文件scp到备库

[oracle@node01 dbs]$scp orapwetldb oracle@192.168.1.2:$ORACLE_HOME/bs/orapwetldb

7.备库创建备份目录

mkdir /oradata/etldbdr_backup -p

8.把备份文件scp到备库(主库执行)

[oracle@node01 backup_rman]$ scp -rp * oracle@192.168.1.2:/oradata/etldbdr_backup

9.把主库spfile文件传到备库
[oracle@node01 ~]$ scp $ORACLE_HOME/dbs/initetldb.ora oracle@192.168.1.2:$ORACLE_HOME/dbs/

10.配置主库的监听
[oracle@node01 admin]$ cat listener.ora

listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/network/admin/listener.ora

Generated by Oracle configuration tools.

SID_LIST_LISTENER_11g =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = etldb)
(SID_NAME = etldb)
)
)

LISTENER_11g =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1(PORT = 1621))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

11.配置主库的TNS

[oracle@node01 admin]$ cat tnsnames.ora

tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/network/admin/tnsnames.ora

Generated by Oracle configuration tools.

ETLDBDR =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ETLDBDR)
)
)

ETLDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1621))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ETLDB)
)
)

[oracle@node01 admin]$$ lsnrctl status LISTENER_11g

12.配置备库的TNS

[oracle@node02 admin]$ cat listener.ora

listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/network/admin/listener.ora

Generated by Oracle configuration tools.

SID_LIST_LISTENER_11g =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ETLDBDR)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0)
(SID_NAME = ETLDBDR)
)
)

LISTENER_11g =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1621))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

[oracle@rac2 admin]$ cat tnsnames.ora

tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/network/admin/tnsnames.ora

Generated by Oracle configuration tools.

ETLDBDR =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1621))
)
(CONNECT_DATA =
(SERVICE_NAME = ETLDBDR)
)
)

ETLDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1621))
)
(CONNECT_DATA =
(SERVICE_NAME = ETLDB)
)
)

[oracle@rac2 admin]$ lsnrctl status LISTENER_11g

13.配置从库的初始化文件

[oracle@rac2 UOIN1CON_DG]$ cat initUOIN1CON_DG.ora

ETLDBDR.__data_transfer_cache_size=0
ETLDBDR.__db_cache_size=369098752
ETLDBDR.__inmemory_ext_roarea=0
ETLDBDR.__inmemory_ext_rwarea=0
ETLDBDR.__java_pool_size=16777216
ETLDBDR.__large_pool_size=33554432
ETLDBDR.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
ETLDBDR.__pga_aggregate_target=587202560
ETLDBDR.__sga_target=687865856
ETLDBDR.__shared_io_pool_size=33554432
ETLDBDR.__shared_pool_size=218103808
ETLDBDR.streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/etldb/adump'
*.audit_trail='db'
*.compatible='12.2.0'
*.control_files='/oradata/etldbdr/control01.ctl','/ordata/ETLDBDR/CONTROL/control02.ctl'
*.db_block_size=8192
*.db_file_name_convert='/oradata/etldb','/oradata/etldbdr'
*.db_name='etldb'
*.db_unique_name='etldbdr'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ETLDBDR_XDB)'
*.fal_client='etldb'
*.fal_server='etldbdr'
*.log_archive_config='DG_CONFIG=(etldb,etldbdr)'
*.log_archive_dest_1='LOCATION=/oradata/etldb VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=etldb'
*.log_archive_dest_2='SERVICE=etldbdr LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=etldbdr'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t
%s
%r.arc'
*.log_archive_max_processes=30
*.log_file_name_convert='/oradata/etldb','/oradata/etldbdr'
*.memory_target=1201m
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'

14.创建备库的必须的目录

[oracle@node02 ~]$ mkdir -p /u01/app/oracle/admin/etldb/adump

15.启动数据库到nomount状态

SQL> startup nomount pfile='$ORACLE_HOME/dbs/initetldb.ora';
ORACLE instance started.

Total System Global Area 1275068416 bytes
Fixed Size 8620272 bytes
Variable Size 939525904 bytes
Database Buffers 318767104 bytes
Redo Buffers 8155136 bytes
SQL>
SQL> create spfile from pfile='$ORACLE_HOME/dbs/initetldb.ora';

File created.

SQL> shut immediate;
ORA-01507: database not mounted

ORACLE instance shut down.
SQL>
SQL> startup nomount;
ORACLE instance started.

Total System Global Area 1275068416 bytes
Fixed Size 8620272 bytes
Variable Size 939525904 bytes
Database Buffers 318767104 bytes
Redo Buffers 8155136 bytes
SQL>

16.rman恢复备库控制文件

rman>restore controfile from '/oradata/etldbdr/control_ETLDB_1gtmj2jk_48';

rman> sql 'alter database mount';

17.rman恢复数据文件

在restore database之前先看看源库的数据文件/临时文件 路径和目标库是否相同,如果不相同,需要用下面方法进行修改

catalog start with '/oradata/etldbdr_backup/'

run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
SET NEWNAME FOR DATAFILE '/oradata/etldb/system01.dbf' to '/oradata/etldbdr/system01.dbf';
SET NEWNAME FOR DATAFILE '/oradata/etldb/sysaux01.dbf' to '/oradata/etldbdr/sysaux01.dbf';
SET NEWNAME FOR DATAFILE '/oradata/etldb/undotbs01.dbf' to '/oradata/etldbdr/undotbs01.dbf';
SET NEWNAME FOR DATAFILE '/oradata/etldb/hrsys.dbf' to '/oradata/etldbdr/hrsys.dbf';
...
restore database;
switch datafile all;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}

17.配置备库Standby redo logs

SQL> set lines 190
SQL> SELECT NAME,OPEN_MODE,DB_UNIQUE_NAME,DATABASE_ROLE,PROTECTION_MODE FROM V$DATABASE;

NAME OPEN_MODE DB_UNIQUE_NAME DATABASE_ROLE PROTECTION_MODE


UOIN1CON MOUNTED UOIN1CON_DG PHYSICAL STANDBY MAXIMUM PERFORMANCE

SQL>
SQL> col member for a50
SQL> select * from v$logfile;

GROUP# STATUS TYPE MEMBER IS_ CON_ID


3 ONLINE /oradata/etldbdr/redo03.log NO 0
2 ONLINE /oradata/etldbdr/redo02.log NO 0
1 ONLINE /oradata/etldbdr/redo01.log NO 0
4 STANDBY /oradata/etldbdr/redo04.log NO 0
5 STANDBY /oradata/etldbdr/redo05.log NO 0
6 STANDBY /oradata/etldbdr/redo06.log NO 0
7 STANDBY /oradata/etldbdr/redo07.log NO 0

7 rows selected.

SQL> select a.group#, a.member, b.bytes FROM v$logfile a, v$standby_log b WHERE a.group# = b.group#;

GROUP# MEMBER BYTES


4 /oradata/etldbdr/redo04.log 209715200
5 /oradata/etldbdr/redo05.log 209715200
6 /oradata/etldbdr/redo06.log 209715200
7 /oradata/etldbdr/redo07.log 209715200

SQL>

18.开启备库MRPO进程

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Database altered.

SQL>

19.检查同步状态

On Primary
主库操作:

SQL> select name, open_mode, database_role, INSTANCE_NAME from v$database,v$instance;

NAME OPEN_MODE DATABASE_ROLE INSTANCE_NAME


ETLDB READ WRITE PRIMARY ETLDB

SQL> select max(sequence#) from v$archived_log where archived='YES';

MAX(SEQUENCE#)

47

SQL>

On STANDBY
备库操作:

SQL> select name, open_mode, database_role, INSTANCE_NAME from v$database,v$instance;

NAME OPEN_MODE DATABASE_ROLE INSTANCE_NAME


UOIN1CON MOUNTED PHYSICAL STANDBY UOIN1CON_DG

SQL> select max(sequence#) from v$archived_log where applied='YES';

MAX(SEQUENCE#)

47

SQL>

20.主库切换日志进行测试备库同步状态

SQL> set lines 180
SQL> SELECT NAME,OPEN_MODE,DB_UNIQUE_NAME,DATABASE_ROLE,PROTECTION_MODE FROM V$DATABASE;

NAME OPEN_MODE DB_UNIQUE_NAME DATABASE_ROLE PROTECTION_MODE


UOIN1CON READ WRITE UOIN1CON PRIMARY MAXIMUM PERFORMANCE

SQL> ALTER SYSTEM SWITCH LOGFILE;

System altered.

SQL>

21.检查备库

SQL> SELECT NAME,OPEN_MODE,DB_UNIQUE_NAME,DATABASE_ROLE,PROTECTION_MODE FROM V$DATABASE;

NAME OPEN_MODE DB_UNIQUE_NAME DATABASE_ROLE PROTECTION_MODE


etldb MOUNTED etldbdr PHYSICAL STANDBY MAXIMUM PERFORMANCE

SQL>

SQL> alter database recover managed standby database cancel;

Database altered.

SQL>
SQL> alter database open;

Database altered.

SQL> SELECT NAME,OPEN_MODE,DB_UNIQUE_NAME,DATABASE_ROLE,PROTECTION_MODE FROM V$DATABASE;

NAME OPEN_MODE DB_UNIQUE_NAME DATABASE_ROLE PROTECTION_MODE


etldb READ ONLY etldbdr PHYSICAL STANDBY MAXIMUM PERFORMANCE

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Database altered.

SQL> /
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION
*
ERROR at line 1:
ORA-01153: an incompatible media recovery is active

SQL> SELECT NAME,OPEN_MODE,DB_UNIQUE_NAME,DATABASE_ROLE,PROTECTION_MODE FROM V$DATABASE;

NAME OPEN_MODE DB_UNIQUE_NAME DATABASE_ROLE PROTECTION_MODE


etldb READ ONLY WITH APPLY etldbdr PHYSICAL STANDBY MAXIMUM PERFORMANCE

posted @ 2026-01-22 11:53  黄多鱼  阅读(28)  评论(0)    收藏  举报