Oracle Step by step create dataguard or standby database manual (9i,10g) [Thai Version]

** Myself
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 ไว้ช่วงระยะเวลาแล้วเมืค่อยทำการลบที่ปลายทางและต้นทาง ที่คนละเวลากัน
clip_image002
มีขั้นตอนดังนี้
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:

Loading