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  '/u01/app/oracle/oradata/LHR19C/standby_redo04.log'    size  50M ;
alter  database  add  standby logfile thread 1  group  '/u01/app/oracle/oradata/LHR19C/standby_redo05.log'    size  50M ;
alter  database  add  standby logfile thread 1  group  '/u01/app/oracle/oradata/LHR19C/standby_redo06.log'    size  50M ;
alter  database  add  standby logfile thread 1  group  '/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 #;

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM