Trong bài viết này tôi sẽ hướng dẫn bạn cách xây dựng một cơ chế dự phòng vật lý của Oracle Database với giải pháp Physical Standby. Giả định là
cơ sở dữ liệu chính đã hoạt động tốt và ORACLE software được cài đặt trên máy chủ
dự phòng.
PRIMARY
|
STANDBY
|
|
SERVER
|
primary-host
|
standby-host
|
DB_UNIQUE_NAME
|
PROD
|
PRODSBY
|
PRIMARY:
Đảm bảo cơ sở dữ liệu là archive
log mode, và enable force logging.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
PRIMARY > select
log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
----- Bật force login:
----- FORCE LOGGING là yêu cầu bắt buộc, mọi sự thay đổi trong database sẽ được gi ra redo logs, từ đó sẽ được apply tới standby
SQL > ALTER DATABASE FORCE LOGGING;
Database altered.
|
[PRIMARY]Thêm logfiles dự phòng;
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
|
SQL > select GROUP#,BYTES/1024/1024,thread# from v$log;
GROUP# BYTES/1024/1024 THREAD#
---------- --------------- ----------
1 128 1
2 128 1
3 128 1
4 128 1
5 128 1
6 128 1
7 128 1
8 128 1
8 rows selected.
SQL >col member for a45
SQL > set pagesize 200
SQL > set lines 200
SQL >select GROUP#,MEMBER from v$logfile;
GROUP# MEMBER
----------
---------------------------------------------
1 /uv1249/redo1/PROD/redo_01a.dbf
1 /uv1249/redo2/PROD/redo_01b.dbf
2 /uv1249/redo1/PROD/redo_02a.dbf
2 /uv1249/redo2/PROD/redo_02b.dbf
3 /uv1249/redo1/PROD/redo_03a.dbf
3 /uv1249/redo2/PROD/redo_03a.dbf
4 /uv1249/redo1/PROD/redo_04a.dbf
4 /uv1249/redo2/PROD/redo_04a.dbf
5 /uv1249/redo1/PROD/redo_05a.dbf
5 /uv1249/redo2/PROD/redo_05a.dbf
6 /uv1249/redo1/PROD/redo_06a.dbf
6 /uv1249/redo2/PROD/redo_06a.dbf
7 /uv1249/redo1/PROD/redo_07a.dbf
7 /uv1249/redo2/PROD/redo_07b.dbf
8 /uv1249/redo1/PROD/redo_08a.dbf
8 /uv1249/redo2/PROD/redo_08b.dbf
--- Truy vấn động để tạo ra các sqls .
SQL > select 'alter database add standby logfile
'''||
regexp_substr(MEMBER,'/.+/')||'stdby_'||
regexp_replace(member,regexp_substr(MEMBER,'/.+/'),'')||
''' size '||bytes||';'
"Create Standby redo"
from v$logfile lf , v$log
l
where l.group# = lf.group#
/ 2 3 4 5 6 7
Create Standby redo
------------------------------------------------------------------------------------------------------------------
--------------------------------
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_01a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_01b.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_02a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_02b.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_03a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_03a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_04a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_04a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_05a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_05a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_06a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_06a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_07a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_07b.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_08a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_08b.dbf' size 134217728;
16 rows selected.
SQL> alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_01a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_01b.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_02a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_02b.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_03a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_03a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_04a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_04a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_05a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_05a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_06a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_06a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_07a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_07b.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo1/PROD/stdby_redo_08a.dbf' size 134217728;
alter database add standby logfile '/uv1249/redo2/PROD/stdby_redo_08b.dbf' size 134217728;
database altered
database altered
....
.
.
.
.
.
|
[PRIMARY]tạo tập tin mật khẩu
1
2
3
4
5
6
|
cd $ORACLE_HOME/dbs
orapwd file=orapwPROD password=prod1234 entries=30
|
[PRIMARY]Tạo cấu hình các listener và tns như bên dưới.
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
|
cat tnsnames.ora
PROD =
(DESCRIPTION = (ADDRESS = (PROTOCOL = tcp)(HOST = primary-host )(PORT = 1571)) (CONNECT_DATA = (SID = PROD)))
PRODSBY =
(DESCRIPTION = (ADDRESS = (PROTOCOL = tcp)(HOST = standby-host )(PORT = 1571)) (CONNECT_DATA = (SID = PRODSBY)))
cat listener.ora
LISTENER_PROD =
(address_list =
(address =
(protocol = tcp)
(host = primary-host)
(port = 1571)
)
)
SID_LIST_LISTENER_PROD =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PROD)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0)
(SID_NAME = PROD)
)
)
lsnrctl start LISTENER_PROD
|
[PRIMARY]Thực hiện dưới đây những
thay đổi trong spfile:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
--- Tham số log_archive_config gửi và nhận archive logs tới remote dest
----DG_CONFIG - need to specify the list of db_unique_name of
both primary and standby.
alter system set log_archive_config='DG_CONFIG=(PROD,PRODSBY)' scope=BOTH;
--- archive destination in local(primary server)
alter system set log_archive_dest_1='LOCATION=/uv1249/arch/PROD
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD' scope=BOTH;
---log_archive_dest_2
parameter defines the archive destination of standby
--- ASYNC - This
is used for maximum performance mode(DEFAULT)
.Means redo logs generated in primary need not be shipped/applied in standby
alter system set log_archive_dest_2='SERVICE=PRODSBY
LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=PRODSBY' scope=BOTH;
alter system set log_archive_dest_state_2='ENABLE' scope=BOTH;
alter system set log_archive_dest_state_1='ENABLE' scope=BOTH;
--- Tns entry name for primary
alter system set fal_client='PROD' scope=BOTH;
--- tns entry name for primary -- i.e It will fetch the archives from standby .
alter system set fal_server='PRODSBY' scope=BOTH;
|
[PRIMARY] Vì vậy, sau khi thay đổi,
tệp spfile trong Primary
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
|
strings spfilePROD.ora
*.audit_trail='DB'
*.compatible='11.2.0'
*.control_files='/uv1249/data1/PROD/control1.ora','/uv1249/data2/PROD/control2.ora','/uv1249/undo/PROD/control3.ora'
*.core_dump_dest='/uv1249/admin/PROD/cdump'
*.db_block_size=8192
*.db_cache_size=3008M
*.db_file_multiblock_read_count=64
*.db_keep_cache_size=512M
*.db_name='PROD'
*.db_unique_name='PROD'
*.diagnostic_dest='/uv1249/admin/PROD/diag'
*.dml_locks=100
*.fal_client='PROD'
*.fal_server='PRODSBY'
*.instance_name='PROD'
*.job_queue_processes=2
*.log_archive_config='DG_CONFIG=(PROD,PRODSBY)'
*.log_archive_dest_1='LOCATION=/uv1249/arch/PROD
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD'
*.log_archive_dest_2='SERVICE=PRODSBY
LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PRODSBY'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='arch_PROD_%t_%s_%r.arc'
*.log_buffer=31367168# log buffer update
*.log_checkpoint_interval=300000
*.max_dump_file_size='unlimited'
*.nls_date_format='DD-MON-RR'
*.os_authent_prefix='NULL'
*.pga_aggregate_target=1500M
*.processes=600
*.remote_dependencies_mode='SIGNATURE'
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_limit=TRUE
*.sga_max_size=5152M# internally adjusted
*.shared_pool_size=512M
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=30000
*.undo_tablespace='UNDO'
|
STANDBY:
[STANDBY] Tạo cấu trúc thư mục
giống như cấu trúc chính
1
2
3
4
5
6
7
8
9
|
mkdir -p /uv1249/data1/PROD/
mkdir -p /uv1249/data2/PROD/
mkdir -p /uv1249/arch/PROD
mkdir -p /uv1249/undo/PROD
mkdir -p /uv1249/admin/PROD/cdump
mkdir -p /uv1249/admin/PROD/diag
|
[STANDBY]
Tạo pfile and password trong $ORACLE_HOME/dbs :
1
2
3
4
5
6
7
8
9
10
11
|
-----copy the password file from production and rename to standby name.
cd $ORACLE_HOME/dbs
scp oracle@primary-host:/u01/app/oracle/product/11.2.0/dbs/orapwPROD orapwPRODSBY
-----create an init file with minimum parameter as below
vi initPRODSBY.ora
DB_NAME=PROD
DB_UNIQUE_NAME=PRODSBY
|
[STANDBY]
Listener và tns
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
|
cat tnsnames.ora
PROD =
(DESCRIPTION = (ADDRESS = (PROTOCOL = tcp)(HOST = primary-host )(PORT = 1571)) (CONNECT_DATA = (SID = PROD)))
PRODSBY =
(DESCRIPTION = (ADDRESS = (PROTOCOL = tcp)(HOST = standby-host )(PORT = 1571)) (CONNECT_DATA = (SID = PRODSBY)))
cat listener.ora
LISTENER_PRODSBY =
(address_list =
(address =
(protocol = tcp)
(host = standby-host)
(port = 1571)
)
)
SID_LIST_LISTENER_PRODSBY =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PRODSBY)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0)
(SID_NAME = PRODSBY)
)
)
lsnrctl start LISTENER_PRODSBY
|
[STANDBY]bắt đầu cơ sở dữ liệu dự
phòng ở trạng thái nomount :
1
2
3
4
5
6
7
8
9
10
11
|
SQL > startup nomount
ORACLE instance started.
Total System Global Area 6415597568 bytes
Fixed Size 2170304 bytes
Variable Size 905970240 bytes
Database Buffers 5502926848 bytes
Redo Buffers 4530176 bytes
|
[STANDBY]Bây giờ hãy kiểm tra kết nối giữa primary vàstandby dùng mật khẩu sys
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
|
-----In primary:
$ sqlplus sys/prod1234@PRODSBY as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sat Jul 25 15:17:56 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
----- IN STANDBY:
sqlplus sys/prod1234@PROD as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sat Jul 25 15:17:56 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
|
STANDBY:
[STANDBY]Bây giờ kết nối với rman
và chạy lệnh duplicate như được đề cập dưới đây.
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
|
rman target sys/prod1234@PROD
auxiliary sys/prod1234@PRODSBY
Recovery Manager: Release 11.2.0.3.0 - Production on Thu May 16 08:42:46 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: PROD (DBID=839852638)
connected to auxiliary database: PROD (not mounted)
rman >
run
{
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate channel prmy3 type disk;
allocate channel prmy4 type disk;
allocate channel prmy5 type disk;
allocate channel prmy6 type disk;
allocate channel prmy7 type disk;
allocate auxiliary channel stby
type disk;
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
spfile
set db_unique_name='PRODSBY'
set control_files='/uv1249/data1/PROD/control1.ora','/uv1249/data2/PROD/control2.ora','/uv1249/undo/PROD/control3.ora'
set fal_client='PRODSBY'
set fal_server='PROD'
set log_file_name_convert = ','
set standby_file_management='AUTO'
set log_archive_config='DG_CONFIG=(PROD,PRODSBY)'
set log_archive_dest_1='LOCATION=/uv1249/arch/PROD
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRODSBY'
set log_archive_dest_2='service=PROD
ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=PROD'
nofilenamecheck;
}
|
[STANDBY]Sau khi sao chép xong. Bắt đầu
phục hồi
1
2
3
4
5
6
7
8
|
SQL > ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE DISCONNECT FROM SESSION;
DATABASE ALTERED.
SQL > select process,status,sequence# from v$managed_standby:
|
Thiết lập dự phòng vật lý đã sẵn sàng
để sử dụng.
---------------------------
* Dữ liệu trong thời đại 4.0 là "TRÁI TIM" của doanh nghiệp. Quản
trị cơ sở dữ liệu (Database Administration - DBA) là
ngành có lương cao nhất trong ngành
IT và đầy tiềm năng trong thời đại 4.0. Oracle là cơ sở dữ liệu hàng đầu trên thế giới và được rất nhiều doanh nghiệp lớn trên thế giới và Việt Nam sử dụng.
* Bạn có
mong muốn từng bước
trở thành chuyên
gia DBA không? Nếu câu trả lời là CÓ thì hãy nhanh chóng đăng
ký sở hữu trọn đời
khóa học online "Quản trị cơ sở dữ
liệu cơ bản" của tôi tại
Unica (bạn có thể xem trên điện thoại, máy tính bảng, PC vào bất kỳ lúc nào chỉ cần có mạng Internet). Hiện tại tôi đang khuyến mại cho 100 bạn đăng ký đầu tiên giảm giá từ 2400K còn 799K, CAM KẾT HOÀN TIỀN 100% nếu học xong không có kết quả:
* Môn 1: Quản trị Oracle 12 cơ bản, giảm giá 70% HÔM NAY cho 100 bạn
đầu tiên từ 2tr4 còn
799K theo link: https://bit.ly/3d2ofqZ (khoá này học ở
Oracle hãng là 1.500$), chuyển khoản còn 699K
* Môn 2: Quản trị Linux trong 21h, cũng giảm giá 70% HÔM NAY cho 100 bạn đầu tiên từ 2tr4 còn
799K theo link: https://bit.ly/3e7gwJw, chuyển
khoản còn 699K
* Combo1: Cho 2 khóa học (Quản trị Oracle 12 cơ bản + Quản trị Linux
trong 21h) giá 1.200K chuyển khoản
--> Thông tin TÀI KHOẢN:
- Trần Văn Bình, STK
1920767736012, Ngân hàng Techcombank, chi nhánh Thăng Long
- Nội dung: Tên + (Môn 1 hoặc Môn
2 hoặc Combo) +
Số tiền, sau đó chụp
màn hình
chuyển khoản
gửi về email tranbinh48ca@gmail.com (ví dụ nội dung: TranVanBinh Combo1 1200K, TranVanBinh
Mon1 799K, TranVanBinh Mon2 799K,
---------------------------
* KẾT NỐI VỚI TRẦN VĂN BÌNH:
📧 Mail: tranbinh48ca@gmail.com
☎️ Mobile: 0902912888
🅿️ Website: http://www.tranvanbinh.vn
🅿️ Fanpage Facebook: https://www.facebook.com/TranVanBinhOfficial
👨 Facebook: https://www.facebook.com/tranvanbinhmaster
👨Twitter: https://twitter.com/TranVan37761232
🎬 Youtube: http://bit.ly/2YIZKtc
👨👩👧👦 Group FB: https://www.facebook.com/groups/413698089218929
👨 Messenger: https://m.me/101036604657441
⚡️ Skype: tranbinh48ca
👨 Blogger: https://tranvanbinhmaster.blogspot.com
Đăng ký kênh của Trần Văn Bình 🎬 Youtube: http://bit.ly/2YIZKtc để cập nhật những video
mới nhất
---------------------------
học oracle database
Các tìm kiếm liên quan đến học oracle database
Tự học Oracle
Tài liệu Oracle 12c tiếng Việt
Hướng dẫn sử dụng Oracle Database
Oracle SQL cơ bản
Oracle SQL là gì
Khóa học Oracle Hà Nội
Học chứng chỉ Oracle ở đầu
Khóa học Oracle online
khóa học pl/sql
học dba
học dba ở việt nam
khóa học dba
khóa học dba sql
tài liệu học dba oracle
Khóa học Oracle online
học oracle sql
học oracle ở đâu tphcm
học oracle bắt đầu từ đâu
học oracle ở hà nội
oracle database tutorial
oracle database 12c
oracle database là gì
oracle database 11g
oracle download
oracle database 19c
oracle dba tutorial
Oracle GoldenGate
Oracle DataGuard
Oracle RAC
Oracle Tunning
Oracle Backup Recovery
Oracle Partitioning