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

Using DBCA to Create a Data Guard Standbynode

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

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.oracle

 

 

在 12cR2 ( 12.2.0.1 )以前建立物理備庫的方法有:app

1 、使用 RMAN 備份恢復方法;tcp

2 、在 11g 時能夠選擇 duplicate 方式建立物理備庫;經過這種方式直接在線從主庫搭建物理備庫。ide

到 12cR2 ( 12.2.0.1 )後, Oracle 又提供更簡單的方式來建立物理備庫,即便用 DBCA 方式直接創建物理備庫。這個功能再次簡化了建立備庫的複雜度。post

經過 DBCA 提供的參數 createDuplicateDB 能夠很容易的搭建一個物理備庫。其具體語法以下:ui

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 能很是簡單的建立一個物理備庫,可是要使用這個功能,必須知足如下條件:this

①  主庫必須是單機環境,非 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 #;
相關文章
相關標籤/搜索