Oracle 19c使用dbca来搭建物理DG

Using DBCA to Create a Data Guard Standby

The Database Configuration Assistant (DBCA) can also be used as a simple command-line method to create an Oracle Data Guard physical standby database.

The DBCA command qualifier used to create the physical standby database is createDuplicateDB .

DBCA can only be used to create standby databases for non-multitenant primary databases. In addition, this capability creates only single instance standby databases,not Oracle Real Application Clusters (Oracle RAC) databases. If required, the standby can then be converted to an Oracle RAC standby database, either manually or using Oracle Enterprise Manager Cloud Control.

 

 

在 12cR2 ( 12.2.0.1 )之前创建物理备库的方法有:

1 、使用 RMAN 备份恢复方法;

2 、在 11g 时可以选择 duplicate 方式创建物理备库;通过这种方式直接在线从主库搭建物理备库。

到 12cR2 ( 12.2.0.1 )后, Oracle 又提供更简单的方式来创建物理备库,即使用 DBCA 方式直接建立物理备库。这个功能再次简化了创建备库的复杂度。

通过 DBCA 提供的参数 createDuplicateDB 可以很容易的搭建一个物理备库。其具体语法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
-------------- 12cR2
-createDuplicateDB - Command          to          Duplicate a          database         .
                 -gdbName <         Global          database          name         >
                 -primaryDBConnectionString <EZCONNECT string          to          connect          to          primary          database          for          example          "host:port/servicename"         >
                 -sid <         Database          system identifier>
                 [-createAsStandby <         Option          to          create          a standby          database         >]
                         [-dbUniqueName <db_unique_name          for          standby db>]
                 [-customScripts <A comma separated list          of          SQL scripts which needs          to          be run post db creation.The scripts are run          in          order          they are listed>]
                 [-datafileDestination <Destination directory          for          all          database          files>]
                 [-initParams <Comma separated list          of          name         =value pairs>]
                         [-initParamsEscapeChar <Specify          escape          character          for          comma          when          a specific initParam has multiple          values         .If the          escape          character          is          not          specified backslash          is          the          default          escape          character         >]
  
  
  
----------- 18c
-createDuplicateDB - Command          to          Duplicate a          database         .
                 -gdbName <         Global          database          name         >
                 -primaryDBConnectionString <EZCONNECT string          to          connect          to          primary          database          for          example          "host:port/servicename"         >
                 -sid <         Database          system identifier>
                 [-initParams <Comma separated list          of          name         =value pairs>]
                         [-initParamsEscapeChar <Specify          escape          character          for          comma          when          a specific initParam has multiple          values         .If the          escape          character          is          not          specified backslash          is          the          default          escape          character         >]
                 [-policyManaged | -adminManaged]
                 [-policyManaged <Policy managed          database         ,          default          option          is          Admin managed          database         >]
                         -serverPoolName <Specify the single server pool          name          in          case          of          create          server pool          or          comma separated list          in          case          of          existing server pools>
                         [-pqPoolName <value>]
                         [-createServerPool <         Create          a new server pool, which will be used          by          the          database         >]
                                 [-pqPoolName <value>]
                                 [-forceServerPoolCreation <         To          create          server pool          by          force          when          adequate          free          servers are          not          available. This may affect the          database          which          is          already          in          running mode>]
                                 [-pqCardinality <value>]
                                 [-cardinality <Specify the cardinality          of          the new server pool that          is          to          be created,          default          is          the number          of          qualified nodes>]
                 [-adminManaged <Admin managed          database         , this          is          default          option         >]
                 [-datafileDestination <Destination directory          for          all          database          files>]
                 [-nodelist <Node names separated          by          comma          for          the          database         >]
                 [-databaseConfigType <SINGLE | RAC | RACONENODE>]
                         [-RACOneNodeServiceName <Service          name          for          the service          to          be created          for          RAC One Node          database         . This          option          is          mandatory          when          the databaseConfigType          is          RACONENODE>]
                 [-createAsStandby <         Option          to          create          a standby          database         >]
                         [-dbUniqueName <db_unique_name          for          standby db>]
                 [-customScripts <A comma separated list          of          SQL scripts which needs          to          be run post db creation.The scripts are run          in          order          they are listed>]
  
  
  
  
----------- 19c
  
-createDuplicateDB - Command          to          Duplicate a          database         .
                 -gdbName <         Global          database          name         >
                 -primaryDBConnectionString <EZCONNECT string          to          connect          to          primary          database          for          example          "host:port/servicename"         >
                 -sid <         Database          system identifier>
                 [-useWalletForDBCredentials <         true          |          false         > Specify          true          to          load          database          credentials          from          wallet]
                         -dbCredentialsWalletLocation <Path          of          the directory containing the wallet files>
                         [-dbCredentialsWalletPassword <         Password          to          open          wallet          with          auto login disabled>]
                 [-initParams <Comma separated list          of          name         =value pairs>]
                         [-initParamsEscapeChar <Specify          escape          character          for          comma          when          a specific initParam has multiple          values         .If the          escape          character          is          not          specified backslash          is          the          default          escape          character         >]
                 [-policyManaged | -adminManaged]
                 [-policyManaged <Policy managed          database         ,          default          option          is          Admin managed          database         >]
                         -serverPoolName <Specify the single server pool          name          in          case          of          create          server pool          or          comma separated list          in          case          of          existing server pools>
                         [-pqPoolName <value>]
                         [-createServerPool <         Create          a new server pool, which will be used          by          the          database         >]
                                 [-pqPoolName <value>]
                                 [-forceServerPoolCreation <         To          create          server pool          by          force          when          adequate          free          servers are          not          available. This may affect the          database          which          is          already          in          running mode>]
                                 [-pqCardinality <value>]
                                 [-cardinality <Specify the cardinality          of          the new server pool that          is          to          be created,          default          is          the number          of          qualified nodes>]
                 [-adminManaged <Admin managed          database         , this          is          default          option         >]
                 [-datafileDestination <Destination directory          for          all          database          files>]
                 [-nodelist <Node names separated          by          comma          for          the          database         >]
                 [-databaseConfigType <SINGLE | RAC | RACONENODE>]
                         [-RACOneNodeServiceName <Service          name          for          the service          to          be created          for          RAC One Node          database         . This          option          is          mandatory          when          the databaseConfigType          is          RACONENODE>]
                 [-createAsStandby <         Option          to          create          a standby          database         >]
                         [-dbUniqueName <db_unique_name          for          standby db>]
                 [-customScripts <A comma separated list          of          SQL scripts which needs          to          be run post db creation.The scripts are run          in          order          they are listed>]

 

虽然通过 DBCA 能非常简单的创建一个物理备库,但是要使用这个功能,必须满足以下条件:

①  主库必须是单机环境,非 RAC 数据库;

②  主库必须是非 CDB 环境;

如果不满足以上条件, 那么 在使用 DBCA 创建备库的时候,会提示如下错误:

若 主库是 CDB 环境,错误如下:

1
2
[FATAL] [DBT-16057] Specified          primary          database          is          a container          database          (CDB).
CAUSE: Duplicate          database          operation          is          supported          only          for          non container databases.

若 主库是 RAC 数据库,错误如下:

1
2
[FATAL] [DBT-16056] Specified          primary          database          is          not          a Single Instance (SI)          database         .
CAUSE: Duplicate          database          operation          is          supported          only          for          SI databases.

也就说通过 DBCA 搭建出来的备库也是一个单机非 CDB 的备库。

需要注意的是,在 12cR2 ( 12.2.0.1 )中,通过 DBCA 创建物理需要保证主库是单机非 CDB 的库,但是从 Oracle 18c ( 12.2.0.2 )开始,这些限制条件已经取消了,即主库是 CDB 或 rac 环境都可以通过 dbca 来创建物理备库。

以下命令为 18c 中创建 rac 类型的 dg :

1
2
3
4
5
6
7
8
9
10
11
dbca -silent -createDuplicateDB \
-gdbName lhrdb \
-sid lhrdbdg \
-sysPassword oracle \
-primaryDBConnectionString 192.168.20.10:1521/lhrdb \
-nodelist rac18c-n1,rac18c-n2 \
-adminManaged \
-databaseConfigType RAC \
-createAsStandby -dbUniqueName lhrdbdg \
-datafileDestination          '+DATA'          \
-initParams db_create_file_dest=+DATA, db_create_online_log_dest_1=+DATA,local_listener=         "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.20.10)(PORT=1521)))"

 

基于同一个主机搭建 单实例的物理 DG ( 19c ):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
SELECT          CDB          FROM           V$         DATABASE         ; 
alter          database          force          logging;
alter          database          open         ;
alter          database          archivelog;
alter          pluggable          database          all          open         ;
alter          pluggable          database           all          save state;
  
select          thread#,         group         #,bytes/1024/1024 SIZE_MB, status,members          from          v$log;
select          member          from          v$logfile;
alter          database          add          standby logfile thread 1          group          4          '/u01/app/oracle/oradata/LHR19C/standby_redo04.log'            size          50M ;
alter          database          add          standby logfile thread 1          group          5          '/u01/app/oracle/oradata/LHR19C/standby_redo05.log'            size          50M ;
alter          database          add          standby logfile thread 1          group          6          '/u01/app/oracle/oradata/LHR19C/standby_redo06.log'            size          50M ;
alter          database          add          standby logfile thread 1          group          7          '/u01/app/oracle/oradata/LHR19C/standby_redo07.log'            size          50M ;
  
--------配置tns
lhr19c =
           (DESCRIPTION =
             (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.52)(PORT = 1522))
             (CONNECT_DATA =
               (SERVER = DEDICATED)
               (SERVICE_NAME = lhr19c)
             )
           )
  
lhr19cdg =
           (DESCRIPTION =
             (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.52)(PORT = 1522))
             (CONNECT_DATA =
               (SERVER = DEDICATED)
               (SERVICE_NAME = lhr19cdg)
             )
           )
  
--------配置监听
LISTENER =
           (DESCRIPTION_LIST =
             (DESCRIPTION =
               (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.52)(PORT = 1521))
             )
           )
  
SID_LIST_LISTENER =
           (SID_LIST =
             (SID_DESC =
               (GLOBAL_DBNAME = lhr19c)
               (ORACLE_HOME = /u01/app/oracle/product/19.2.0/dbhome_1)
               (SID_NAME = lhr19c)
             )
             (SID_DESC =
               (GLOBAL_DBNAME = lhr19cdg)
               (ORACLE_HOME = /u01/app/oracle/product/19.2.0/dbhome_1)
               (SID_NAME = lhr19cdg)
             )
           )
  
LISTENER_DG =
           (DESCRIPTION =
             (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.52)(PORT = 1522))
           )
  
SID_LIST_LISTENER_DG =
           (SID_LIST =
             (SID_DESC =
               (GLOBAL_DBNAME = lhr19c)
               (ORACLE_HOME = /u01/app/oracle/product/19.2.0/dbhome_1)
               (SID_NAME = lhr19c)
             )
             (SID_DESC =
               (GLOBAL_DBNAME = lhr19cdg)
               (ORACLE_HOME = /u01/app/oracle/product/19.2.0/dbhome_1)
               (SID_NAME = lhr19cdg)
             )
           )
  
lsnrctl start LISTENER_DG
  
  
dbca -silent -createDuplicateDB \
-gdbName lhr19c \
-sid lhr19cdg \
-sysPassword lhr \
-primaryDBConnectionString 192.168.59.52:1522/lhr19c \
-nodelist raclhr-18c-n1 \
-databaseConfigType SINGLE \
-createAsStandby -dbUniqueName lhr19cdg \
-datafileDestination          '/u01/app/oracle/oradata/lhr19cdg/'          \
-initParams db_create_file_dest=/u01/app/oracle/oradata/lhr19cdg/, db_create_online_log_dest_1=/u01/app/oracle/oradata/lhr19cdg/,local_listener=         "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.59.52)(PORT=1522)))"
  
  
  
  
--主库修改参数
alter          system          set          LOG_ARCHIVE_DEST_1=         'LOCATION=USE_DB_RECOVERY_FILE_DEST  VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=lhr19c'         ;
alter          system          set          LOG_ARCHIVE_DEST_2=         'service=lhr19cdg  VALID_FOR=(online_logfiles,primary_role) DB_UNIQUE_NAME=lhr19cdg'         ;
alter          system          set          log_archive_config=         'dg_config=(lhr19c,lhr19cdg)'         ;
alter          system          set          db_file_name_convert=         '/u01/app/oracle/oradata/LHR19CDG/'         ,         '/u01/app/oracle/oradata/LHR19C/'          scope=spfile;
alter          system          set          log_file_name_convert=         '/u01/app/oracle/oradata/LHR19CDG/'         ,         '/u01/app/oracle/oradata/LHR19C/'          scope=spfile;
alter          system          set          standby_file_management=auto scope=spfile;
alter          system          set          fal_client=         'lhr19c'         ; 
alter          system          set          fal_server=         'lhr19cdg'          sid=         '*'         ;
alter          system          set          local_listener=         '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.59.52)(PORT=1522)))'         ,         '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.59.52)(PORT=1521)))'         ;
shutdown immediate
startup
  
  
--备库修改参数
alter          system          set          LOG_ARCHIVE_DEST_1=         'LOCATION=USE_DB_RECOVERY_FILE_DEST  VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=lhr19cdg'          scope=spfile;
alter          system          set          log_archive_config=         'dg_config=(lhr19c,lhr19cdg)'         ;
alter          system          set          db_file_name_convert=         '/u01/app/oracle/oradata/LHR19C/'         ,         '/u01/app/oracle/oradata/LHR19CDG/'          scope=spfile;
alter          system          set          log_file_name_convert=         '/u01/app/oracle/oradata/LHR19C/'         ,         '/u01/app/oracle/oradata/LHR19CDG/'          scope=spfile;
alter          system          set          standby_file_management=auto scope=spfile;
alter          system          set          fal_client=         'lhr19cdg'         ; 
alter          system          set          fal_server=         'lhr19c'          sid=         '*'         ;
alter          system          set          local_listener=         '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.59.52)(PORT=1522)))'         ,         '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.59.52)(PORT=1521)))'         ;
  
shutdown immediate
startup
alter          system register;
  
  
--备库查询实时应用
alter          database          recover managed standby          database          cancel;
alter          database          recover managed standby          database          using          current          logfile disconnect;
! ps -ef|grep ora_mrp
  
select          INST_ID, dbid,         name         ,DB_UNIQUE_NAME,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status          from          gv$         database         ;
  
COL          NAME          FOR          A100
SET          LINESIZE 9999  PAGESIZE 9999
COL NEXT_CHANGE#          FOR          999999999999999
SELECT          THREAD#,          NAME         ,          SEQUENCE         #, ARCHIVED, APPLIED, A.NEXT_CHANGE#
           FROM          V$ARCHIVED_LOG A
          WHERE          A.         SEQUENCE         # >= (         SELECT          MAX         (B.         SEQUENCE         #) - 3
                                  FROM          V$ARCHIVED_LOG B
                                 WHERE          B.THREAD# = A.THREAD#
                                   AND          B.RESETLOGS_CHANGE# = A.RESETLOGS_CHANGE#
                                   AND          B.RESETLOGS_CHANGE# =
                                       (         SELECT          D.RESETLOGS_CHANGE#          FROM          V$         DATABASE          D)
                                   AND          B.APPLIED =          'YES' 
           GROUP          BY          B.THREAD#)
          ORDER          BY          A.THREAD#, A.         SEQUENCE         #;