Sunday, May 4, 2014

Drop Database

โพสต์ครั้งแรก: 15 มกราคม 2012


เราสามารถลบฐานข้อมูล (เฉพาะฐานข้อมูล ไม่รวมโปรแกรม Oracle หรือ Oracle Home)ได้ง่าย ๆ โดยใช้คำสั่ง DROP DATABASE ซึ่งเหมาะกับการลบฐานข้อมูลทดสอบ หรือลบฐานข้อมูลเก่าซึ่งได้ Migrate ไปตัวใหม่เรียบร้อยแล้วเป็นต้น
คุณไม่สามารถจะ Rollback ได้ เมื่อ Drop Database แล้ว


หากต้องการลบฐานข้อมูลรวมทั้งโปรแกรม Oracle ออกไปทั้งหมด ดูที่ Clone Oracle - ก๊อปปี้ฐานข้อมูลแบบยกชุด
คุณจะต้องมีสิทธิ์ SYSDBA ฐานข้อมูลจะต้องอยู่ในโหมด Mount และ Restrict
เมื่อคุณใช้คำสั่งนี้ Oracle จะ Drop ฐานข้อมูล และลบ Control Files และ Datafiles ที่มีชื่ออยุ่ใน Control Files ถ้าฐานข้อมูลใช้ SPFile, SPFile ก็จะถูก Drop ด้วย Archive Log และไฟล์แบ็คอัพ จะไม่ถูกลบ คุณจะต้องลบไฟล์เหล่านี้เอง
ลองเช็คตำแหน่งของไฟล์ต่าง ๆ ก่อน ว่าอยู่ที่ใดบ้าง โดยเริ่มจากตำแหน่งของไฟล์ Dump ต่าง ๆ
sys@ora10gR2> show parameter dump_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------
background_dump_dest                 string      /data2/ora10gR2/bdump
core_dump_dest                       string      /data2/ora10gR2/cdump
user_dump_dest                       string      /data2/ora10gR2/udump

sys@ora10gR2> !ls /data2/ora10gR2/bdump
alert_ora10gR2.log       ora10gR2_lgwr_1778.trc   ...
...

sys@ora10gR2> !ls /data2/ora10gR2/udump
ora10gR2_ora_1259.trc  ora10gR2_ora_1364.trc  ...
...

sys@ora10gR2> !ls -la /data2/ora10gR2/cdump
total 9
drwxr-xr-x   3 oracle   dba            3 Dec  8 11:38 .
drwxr-xr-x   7 oracle   dba           19 Dec  8 11:32 ..
drwxr-x---   2 oracle   dba            3 Dec  8 11:38 core_1541


Output บางบรรทัดถูกละไว้เพื่อไม่ให้เยิ่นเย้อ ต่อไปเช็คตำแหน่งของ Archive Logs ผมเก็บ Archive Logs ไว้ใน Flash Recovery Area ซึ่งเป็นค่าดีฟอลต์อยู่แล้ว ในไดเรคทอรี archivelog ของผมมีไดเรคทอรี 2012_01_15 ซึ่งข้างในเก็บไฟล์ Archive Log

sys@ora10gR2> select name,value from v$parameter where name ='db_recovery_file_dest';

NAME                           VALUE
------------------------------ ----------------------------------------
db_recovery_file_dest          /data2/ora10gR2/flash_recovery_area

sys@ora10gR2> !ls /data2/ora10gR2/flash_recovery_area/ora10gR2/archivelog
2012_01_15

เช็คตำแหน่ง Datafiles และ Controlfiles ตำแหน่งของไฟล์ต่าง ๆ อาจจะต่างกันไปในแต่ละเครื่อง

sys@ora10gR2> ! ls -l
total 1504167
drwxr-xr-x 2 oracle dba 61 Dec 10 12:29 adump
drwxr-xr-x 2 oracle dba 161 Dec 27 00:00 bdump
drwxr-xr-x 3 oracle dba 3 Dec 8 11:38 cdump
-rw-r----- 1 oracle dba 14401536 Dec 17 00:24 control01.ctl
-rw-r----- 1 oracle dba 14401536 Dec 17 00:24 control02.ctl
-rw-r----- 1 oracle dba 14401536 Dec 17 00:24 control03.ctl
-rw-r--r-- 1 oracle dba 760 Dec 2 20:12 creatdb.sql
drwxr-xr-x 2 oracle dba 2 Dec 2 20:07 flash_recovery_area
-rw-r--r-- 1 oracle dba 2760 Dec 8 14:21 initthaidb.ora
-rw-r----- 1 oracle dba 52429312 Dec 17 00:22 thaidb_redo111.rdo
-rw-r----- 1 oracle dba 52429312 Dec 18 06:00 thaidb_redo112.rdo
-rw-r----- 1 oracle dba 52429312 Dec 25 00:21 thaidb_redo113.rdo
-rw-r----- 1 oracle dba 84025344 Dec 27 00:41 thaidb_sysaux0000.dbf
-rw-r----- 1 oracle dba 254156800 Dec 17 00:22 thaidb_system0000.dbf
-rw-r----- 1 oracle dba 10493952 Dec 24 11:34 thaidb_temp0000.dbf
-rw-r----- 1 oracle dba 220536832 Dec 17 00:22 thaidb_undo1000.dbf
drwxr-xr-x 2 oracle dba 41 Dec 10 04:52 udump

เช็คไฟล์ SPFile, SPFile จะถูกลบด้วยเมื่อเรา Drop Database
$ ls $ORACLE_HOME/dbs | grep -i ora10gR2.ora
spfileora10gR2.ora


เริ่มต้น Drop ฐานข้อมูล ล็อกอินเข้าฐานข้อมูลด้วย User ที่มีสิทธิ์ SYSDBA แล้ว Shutdown Immediate

$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.2.0 - Production on Sun Jan 15 11:15:11 2012

Copyright (c) 1982, 2005, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
Shutdown ฐานข้อมูล
sys@ora10gR2> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

Startup ฐานข้อมูลในโหมด Mount Restrict
sys@ora10gR2> startup restrict mount
ORACLE instance started.

Total System Global Area  209715200 bytes
Fixed Size                  1279336 bytes
Variable Size             104860312 bytes
Database Buffers           96468992 bytes
Redo Buffers                7106560 bytes
Database mounted.

คราวนี้ก็มาถึงตัวสำคัญ รันคำสั่ง DROP DATABASE บน SQL Prompt เพื่อ Drop ฐานข้อมูล ระวัง! ขั้นตอนนี้ย้อนกลับไม่ได้นะครับ
sys@ora10gR2> drop database;
ERROR:
ORA-01034: ORACLE not available

Database dropped.
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
sys@ora10gR2> exit
ไปดูไฟล์ใน Dump Directory กัน
$ ls /data2/ora10gR2/bdump | wc -l
169
$ ls /data2/ora10gR2/udump | wc -l
49
$ ls /data2/ora10gR2/cdump/core_1541 | wc -l
1
ไฟล์ที่เป็น Archive Log
$ ls /data2/ora10gR2/flash_recovery_area/ora10gR2/archivelog/2012_01_15
o1_mf_1_23_7k4mv22o_.arc
ทั้งไฟล์ Dump และไฟล์ Archive Log ต่างก็ยังอยู่ คุณจะต้องเข้าไปลบเอง ในทางกลับกันคราวนี้ไปดู Datafiles และ Controlfiles จะเห็นได้ว่าถูกลบไปแล้ว
$ ls /data2/ora10gR2
adump                cdump                flash_recovery_area  udump
bdump                creatdb.sql          initora10gR2.ora
$ ls $ORACLE_HOME/dbs | grep -i ora10gR2.ora
เดิมไดเรคทอรีนี้มี Datafiles และ Controlfiles อยุ่ ตอนนี้ไม่มีแล้ว เช่นเดียวกับ SPFile ซึ่งตอนนี้ถูกลบไปแล้ว

นอกจากนี้ยังมีไฟล์ listener.ora และ tnsnames.ora ซึ่งจะต้องลบเอาส่วนของฐานข้อมูลตัวที่ถูกลบนี้ออกไปด้วย

No comments:

Post a Comment