Create Standby Database (DataGuard)
Primary DB information :
คู่ของ hp01 และ hp02 ทำ clustering กัน
- hostname=hp01 or hp02,virtual ip= 10.1.144.67, Replication ip of hp01=10.1.144.65, Replication ip of hp02=10.1.144.66
- oracle sid = EEDB
- listener = LISTENER port 1521
Standby DB information : hostname=hpstb01, Replication ip =10.2.144.65
- oracle sid = EEDB
- listener for failover = LISTENER port 1521
- listener for receive log= EEDB_DRC port 1522
*หมายเหตุ ที่ต้นทาง สร้าง oracle instance แล้ว ส่วนปลายทางต้องทำการ ลง oracle software ให้เสร็จสิ้นแล้ว และเป็น version เดียวกัน
Concept
เมื่อมีการใช้งาน Primary database server จะทำให้เกิด arvhice log แล้วทำการส่งข้อมูล archive log ไป apply ที่ฝั่ง ปลายทาง โดยฝั่งปลายทาง ( standby database ) จะทำการนำ archive จากต้นทางมาเก็บไว้ที่ปลายทาง จากนั้นค่อยทำการ apply ให้ข้อมูลใกล้เคียงกับต้นทาง ซึ่งจะทำการ apply ตามรอบเวลาที่ตั้งไว้ตาม contrab ซึ่งจะทำการ apply
จนถึง archive log ตัวสุดท้ายที่ได้รับมา และที่ฝั่งปลายทางและต้นทางจะเก็บ archive log files ไว้ช่วงระยะเวลาแล้วเมืค่อยทำการลบที่ปลายทางและต้นทาง ที่คนละเวลากัน
มีขั้นตอนดังนี้
1. สร้าง tnsnames.ora primary and standby เหมือนกัน คือ EEDB จะเป็น virtual ip ของฝั่ง primary กับ port 1521 ส่วน EEDB_DRC จะเป็น Replicate ip ของฝั่ง standby กับ port 1522 (ทำ 2 ฝั่ง) | EEDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.144.67)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = EEDB) ) ) EEDB_DRC = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.144.65)(PORT = 1522)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = EEDB) ) ) |
2. สร้าง listener.ora ฝั่ง primary ซื่ง instance EEDB จะเป็นvirtual ip ของฝั่ง primary กับ port 1521 (ทำฝั่ง primary ) | SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = EEDB) (ORACLE_HOME = /app/oracle/product) (SID_NAME = EEDB) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.144.67)(PORT = 1521)) ) |
3. สร้าง listener.ora standby ซื่ง instance EEDB จะเป็นpublic ip ของฝั่ง primary กับ port 1522 (ทำฝั่ง standby) | SID_LIST_EEDB_DRC = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = EEDB) (ORACLE_HOME = /app/oracle/product) (SID_NAME = EEDB) ) ) EEDB_DRC = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hpstb01)(PORT = 1522)) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = EEDB) (ORACLE_HOME = /app/oracle/product) (SID_NAME = EEDB) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hpstb01)(PORT = 1521)) ) |
4. primary ทำการ set parameter ที่จำเป็นสำหรับ ฝั่ง primary (ทำฝั่ง primary ) | sql > alter system set log_archive_dest _1='/data/oracle/archive/EEDB/' scope=spfile; sql > alter system set log_archive_start=true scope= spfile; sql > alter system set log_archive_dest_2='SERVICE=EEDB_DRC LGWR SYNC AFFIRM REOPEN=60' scope= spfile; sql > alter system set standby_archive_dest='/data/oracle/archive/EEDB' scope= spfile; sql > alter system set standby_file_management='AUTO' scope= spfile; sql > alter system set log_archive_format='arch_%t_%S.arc' scope= spfile; sql > alter system set fal_server='EEDB_DRC' scope= spfile; sql > alter system set fal_client='EEDB' scope= spfile; |
5. tranfer spfile Primary ไป Standby (ทำฝั่ง primary ) | scp /<oracle profile path>/dbs/spfile<SID>.ora hpstb01: /<oracle profile path>/dbs/spfile<SID>.ora |
6. primary ต้อง enable archive log ถ้า enable แล้วก็ไม่ต้องทำ แล้วต้องทำการ force logging (ทำฝั่ง primary ) | sql > shutdown immediate; sql > startup mount sql > alter database archivelog; sql > alter database force logging; sql > alter database open; |
7. สร้าง standby database จาก primary database โดย หยุดฐานข้อมูลแล้วทำการ backup เป็น rman files ลดโหลด network ในการนำไปทั้ง db แล้ว transfer rman ไป standby (ทำฝั่ง primary ) | sql > shutdown immediate; sql > startup mount; sql > exit; rman target / rman> run{ backup format ‘/tmp/EEDB.rman’ database; } sql > shutdown immediate; sql > exit; scp /<datafiles path>/CONTROL01.CTL hpstb01: /tmp/ CONTROL01.CTL scp /tmp/EEDB.rman hpstb01: /tmp/EEDB.rman sql > startup; |
8. restore standby database จาก primary database โดย นำ controlfile และ rman files มา restore โดยcopy controlfile ให้ชื่อและจำนวนเท่าฝั่ง Primary แล้ว ค่อย restore ด้วย rman(ทำฝั่ง standby ) | cp /tmp/ CONTROL01.CTL /<datafiles path>/ CONTROL02.CTL /<datafiles path>/ CONTROL03.CTL sql > startup mount; rman> run{ restore database; } |
9. standby ทำการ set parameter ที่จำเป็นสำหรับ ฝั่ง standby (ทำฝั่ง standby) | sql > shutdown immediate; sql > startup nomount; sql > alter system set log_archive_dest _1='/data/oracle/archive/EEDB/' scope=spfile; sql > alter system set log_archive_start=true scope= spfile; sql > alter system set log_archive_dest_2='SERVICE=EEDB_DRC LGWR SYNC AFFIRM REOPEN=60' scope= spfile; sql > alter system set standby_archive_dest='/data/oracle/archive/EEDB' scope= spfile; sql > alter system set standby_file_management='AUTO' scope= spfile; sql > alter system set log_archive_format='arch_%t_%S.arc' scope= spfile; sql > alter system set fal_server='EEDB' scope= spfile; sql > alter system set fal_client='EEDB_DRC ' scope= spfile; |
10. สร้าง control file แบบ standby mode ของฝั่ง standby จาก primary (ทำฝั่ง primary ) | sql > alter database create standby controlfile as ‘/tmp/CONTROL01.CTL’; |
11. tranfer controlfile Primary ไป Standby (ทำฝั่ง primary ) | scp /tmp/CONTROL01.CTL hpstb01:/<datafiles path>/ CONTROL01.CTL |
12. copy controlfile ฝั่ง Standby ให้ชื่อและจำนวนเท่าฝั่ง Primary (ทำฝั่ง standby ) | cp /<datafiles path>/ CONTROL01.CTL /<datafiles path>/ CONTROL02.CTL /<datafiles path>/ CONTROL03.CTL |
13. start ระบบ ฝั่ง Standby เพื่อรับ archive files จาก remote copy (ทำฝั่ง standby standby ) | Sql > alter database mount standby database; Sql > alter database recover managed standby database DISCONNECT from session; |
14. query เพื่อทำการ check log ทั้ง 2 ฝั่ง ว่า archive log เท่าหรือเปล่าไม่ (ทำ 2 ฝั่ง) | Sql > select max(sequence#) from v$log_history; -- or -- Sql >Select sequence# seq#, applied from v$archived_log order by 1; |
15. ถ้าข้อ 14 ใช้งานยาก ให้ ทำการ run script Check_standby_EEDB.sh ซึ่งจะทำการshow max archive log ทั้ง 2 ฝั่ง พร้อม refresh ตามเวลาใน script ที่กำหนด (ทำฝั่ง primary ) | /app/oracle/Check_standby_EEDB.sh |
0 comments:
Post a Comment