技術(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