技術(shù)專題總結(jié):standby Database (二)
2024-07-21 02:37:54
供稿:網(wǎng)友
二、Standby database 的建立
Oracle Standby Database 的建立過程并不復(fù)雜,但建立過程的相關(guān)設(shè)置取決于建立standby database 的目的。 例如,假如建立standby database 是為了 disaster PRotection,standby database 就不能建立在與 primary database 相同服務(wù)器上面。假如是為了 protection against data corruption,在standby database 接收到 primary database 送來的 archived log files 時(shí),apply 需要晚上一段,比如三個(gè)小時(shí),或是六個(gè)小時(shí)。這樣當(dāng) primary database出現(xiàn)錯(cuò)誤的時(shí)候,standby database 不會(huì)與primary database 同步。
在這篇文章里面,我無法面面俱到的分析各種性能,僅做一個(gè)具體實(shí)例分析。
我們承諾客戶的條件:
24x7 uptime of SIS database
in case of failure on primary:
1.1 1/2 hour to fail over to standby database
1.2 no more than 5 mins data loss
1.3 2 hours scheduled downtime to revert back to primary/standby configuration
我們?yōu)榱送瓿梢陨细黜?xiàng),必須完成的工作:
1. 在remote site 建立 standby database。我們有半小時(shí)的時(shí)間 activing standby database,我個(gè)人喜歡再做一次 cold backup。
2. 以我們的環(huán)境,4組 log groups,每組 2 個(gè)members,on-line redo log file size 是 10M,運(yùn)行高峰期,每分鐘可以多達(dá) 10 個(gè)archived files 產(chǎn)生。因此非高峰的時(shí)候,我們用cron job 做強(qiáng)制 log switch.
3. 因?yàn)槲覀兊膕tandby database server 不是專用的,所以在非高峰期時(shí)我們需要重新建立 primary/standby database.
在這里,我又要說一些多余的話了。DBA 在申請down time 的時(shí)候,應(yīng)該給自己預(yù)留足夠的時(shí)間,到底多少合適,自己要把握好。(假如留的時(shí)間太少,老板和客戶可能會(huì)認(rèn)為DBA的工作很輕易,或不重要,假如一旦出了差錯(cuò),自己的壓力方面也夠大。所以一般選擇在用戶可接受的最多的時(shí)間,我一般要求需要時(shí)間的2-4倍) 。
1. 根據(jù)上面的條件,我們做的環(huán)境設(shè)置
(1) 首先我們必須確認(rèn) primary database 處于archived mode:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oradba/sisi/arch
Oldest online log sequence 4783
Next log sequence to archive 4786
Current log sequence 4786
(2) 我們必須滿足的條件是 high availablity,所以我們采用的是雙機(jī)。
采用雙機(jī)形式,有很多的好處,除了再安裝與primary node 相同的OS系統(tǒng)及oracle 系統(tǒng)外,其他各種設(shè)置都可以與primary node 完全相同,省掉很多修改參數(shù)的麻煩之處。
(3) 我們的oracle 版本是8.1.7EE,standby node 通過net8 接收 primary node 的 archived log files。我們專門在 standby node 開通了 port 1512 做為 standby database 的listener。(Oracle 的缺省是 port 1521) 。
2. standby database的建立過程:
standby database一般是用primary database的cold backup建立的。非凡情況下,可以用RMAN或eXPort dmp file來做。這里我們是講的正常情況。
(1) 在 standby node上面建立與primary node上面相同的datafile Directory。我們用的是/oradba/sisi/
(2) 修改 primary database的 initialize parameter file: (我們的例子,請不要問我為什么,很多是 application要求的,不是我制定的)
primary database:
db_name = sisi
instance_name = sisi
service_names = sisi
control_files = (/oradba/sisi/ctrl/stctl1si.ctl, /oradba/sisi/ctrl/stctl2si.ctl)
db_files = 500
compatible = 8.1.7.0.0
rollback_segments = (rbs1, rbs2, rbs3, rbs4, rbs5, rbs6, rbs7, rbs8, rbs9, rbs10, rbs11, rbs12, rbs1
3, rbs14, rbs15)
db_file_multiblock_read_count = 32
optimizer_mode = rule #application required
db_block_size = 8192
db_block_buffers = 83200
shared_pool_size = 52428800
sort_area_size = 1048576
sort_area_retained_size = 64000
log_checkpoint_interval = 10000
sessions = 252
transactions = 280
transactions_per_rollback_segment = 4
processes = 800
open_cursors = 1000
dml_locks = 500
log_buffer = 20971520
log_checkpoint_timeout = 10000
cursor_space_for_time = true
utl_file_dir=/tmp
timed_statistics = false # if you want timed statistics
max_dump_file_size = 2097152 # limit trace file size to 5 Meg each
core_dump_dest = /oradba/sisi/cdump
background_dump_dest= /oradba/sisi/bdump
user_dump_dest = /oradba/sisi/udump
remote_login_passWordfile = none
parallel_max_servers = 0
#The following parameters are the HA parameters needed for Standby Database on primary side
LOG_ARCHIVE_START=TRUE
LOG_ARCHIVE_FORMAT = "sisi%S.arc"
LOG_ARCHIVE_DEST_1='LOCATION=/oradba/sisi/arch MANDATORY REOPEN=60'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
STANDBY_ARCHIVE_DEST='/oradba/sisi/arch'
LOG_ARCHIVE_DEST_2='SERVICE=standby_sisi MANDATORY REOPEN=60'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MIN_SUCCEED_DEST=2
復(fù)制到Standby database side相對的directory下面:
db_name = sisi
instance_name = sisi
service_names = sisi
control_files = (/oradba/sisi/ctrl/stctl1si.ctl, /oradba/sisi/ctrl/stctl2si.ctl)
db_files = 500
compatible = 8.1.7.0.0
rollback_segments = (rbs1, rbs2, rbs3, rbs4, rbs5, rbs6, rbs7, rbs8, rbs9, rbs10, rbs11, rbs12, rbs1
3, rbs14, rbs15)
db_file_multiblock_read_count = 32
optimizer_mode = rule
db_block_size = 8192
db_block_buffers = 83200
shared_pool_size = 52428800
sort_area_size = 1048576 #100M Change to 1M after import.
sort_area_retained_size = 64000
log_checkpoint_interval = 10000
sessions = 252
transactions = 280
transactions_per_rollback_segment = 4
processes = 800
open_cursors = 1000
dml_locks = 500
log_buffer = 20971520
log_checkpoint_timeout = 10000
cursor_space_for_time = true
utl_file_dir=/tmp
timed_statistics = false # if you want timed statistics
max_dump_file_size = 2097152 # limit trace file size to 5 Meg each
core_dump_dest = /oradba/sisi/cdump
background_dump_dest= /oradba/sisi/bdump
user_dump_dest = /oradba/sisi/udump
remote_login_passwordfile = none
parallel_max_servers = 0
#The following parameter are the HA parameters needed for Standby Database on standby side
LOG_ARCHIVE_START=FALSE
LOG_ARCHIVE_FORMAT = "sisi%S.arc"
LOG_ARCHIVE_DEST_1='LOCATION=/oradba/sisi/arch MANDATORY REOPEN=60'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
STANDBY_ARCHIVE_DEST='/oradba/sisi/arch'
LOG_ARCHIVE_DEST_2='SERVICE=standby_sisi MANDATORY REOPEN=60'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MIN_SUCCEED_DEST=2
(3) shutdown primary database normal/immediate,做一個(gè)冷備份,再次 startup primary database時(shí),用 pfile標(biāo)示到上面改過的 parameter file. 用FTP或其他OS工具,把冷備份的 data
files/online redo log files到在standby node已經(jīng)建好的對應(yīng) directory下面。
(4) 建立 standby database control file.
Alter database create standby controlfile as ‘/oradba/sisi/temp/stctl1si.ctl’;
用 rcp或 ftp到standby node對應(yīng)的directory,用 cp command復(fù)制另一個(gè)。
(5) 在primary side編輯 tnsnames.ora文件,增加一條(可以用netasst做):
STANDBY_SISI =
(DESCRipTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.19.26.10)(PORT = 1512))
)
(CONNECT_DATA =
(SID = sisi)
)
)
(6) 在 standby node編輯 listener.ora文件,增加一條(可以用netasst做):
ST_LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = prtltest)(PORT = 1512))
)
SID_LIST_ST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = sisi)
(ORACLE_HOME = /oracle/8.1.7)
(SID_NAME = sisi)
)
)
(7) start standby li