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)))"
|
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
#;
|