การลบ Object ทั้งหมดของ User จากฐานข้อมูล Oracle ด้วย SQL Developer

มาลองจินตรนาการว่าเรามีฐานข้อมูลอยู่ก้อนหนึ่ง เราต้องการลบข้อมูลต่างๆทิ้งเราจะมีวิธีการอย่างไร วันนี้ผมมี script ตัวหนึ่งที่ใช้ลบ Object ทั้งหมดของ User จากฐานข้อมูล Oracle มาฝากครับ มาดูกันเลย

1. ใน SQL developer ให้คลิกขวาที่ Connection ที่เราต้องการลบข้อมูล เลือก Open SQL Worksheet ขึ้นมา หากมีอยู่แล้วข้ามขั้นตอนนี้ไปได้เลยครับ

2. พิมพ์คำสั่งนี้ลงไปหรือคัดลอกไปวางก็ได้ครับ  :
ตัวอย่างที่ 1
BEGIN
  FOR cur_rec IN
  (SELECT object_name,
    object_type
  FROM user_objects
  WHERE object_type IN
    (SELECT DISTINCT object_type FROM user_objects)
  )
  LOOP
    BEGIN
      IF cur_rec.object_type = 'TABLE' THEN
        EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '" CASCADE CONSTRAINTS PURGE';
      ELSE
        EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '"';
      END IF;
    EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.put_line ( 'FAILED: DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '"' );
    END;
  END LOOP;
END;

ซึ่งจาก script จะเห็นว่าเป็นการเลือกข้อมูลต่างๆชื่อตาราง, ชื่อวิว, ชื่อ Index , ชื่อ Sequence และอื่นๆ จากตารางของระบบ (user_objects) ตามประเภทของ object_type ออกมาทั้งหมดจาก user ที่สร้าง connection อยู่.

โคดตัวอย่างที่ 2
หากเราต้องการระบุเฉพาะ object_type ที่เราต้องการก็ได้ครับโดยเราสามารถดู object_type ทั้งหมดได้จาก script
 
select distinct object_type from ALL_OBJECTS

ผลลัพธ์ที่ได้คือ
 
CONSUMER GROUP      
INDEX PARTITION     
SEQUENCE            
SCHEDULE            
TABLE PARTITION     
RULE                
JAVA DATA           
PROCEDURE           
OPERATOR            
WINDOW              
PACKAGE             
PACKAGE BODY        
LIBRARY             
RULE SET            
PROGRAM             
LOB                 
TYPE BODY           
CONTEXT             
JAVA RESOURCE       
XML SCHEMA          
TRIGGER             
JOB CLASS           
DIRECTORY           
MATERIALIZED VIEW   
TABLE               
INDEX               
SYNONYM             
VIEW                
FUNCTION            
WINDOW GROUP        
JAVA CLASS          
INDEXTYPE           
CLUSTER             
TYPE                
EVALUATION CONTEXT  
JOB
เช่น ต้องการลบเฉพาะ TABLE,INDEX,VIEW และ SEQUENCE
  
BEGIN
  FOR cur_rec IN
  (SELECT object_name,
    object_type
  FROM user_objects
  WHERE object_type IN ('TABLE','INDEX','VIEW','SEQUENCE')
)
  LOOP
    BEGIN
      IF cur_rec.object_type = 'TABLE' THEN
        EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '" CASCADE CONSTRAINTS PURGE';
      ELSE
        EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '"';
      END IF;
    EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.put_line ( 'FAILED: DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '"' );
    END;
  END LOOP;
END;

3. จะสังเกตุว่า
  • (1) คือ connection ที่เราจะทำการลบออปเจ็คทั้งหมดของผู้ใช้
  • (2) คือ กดปุ่มเพื่อ run script
  • (3) คือ ส่วนที่เราสามารถเพิ่มเงื่อนไขในการลบออปเจ็คของ User นั้นๆตามประเภท object_type ที่ระบุตามโคด ตัวอย่างที่ 2



4. ข้อสังเกตุ
  • (1) คือ connection ที่เราจะทำการลบออปเจ็คทั้งหมดของผู้ใช้เรีบยร้อยแล้วจะเห็นว่าไม่มีข้อมูลใดๆเหลืออยู่เลย
  • (2) คือ ผลลัพธ์ของการ run script


ทั้งหมดทั้งมวลคือ การลบออปเจ็คทั้งหมดของผู้ใช้จากฐานข้อมูล Oracle ด้วย SQL Developerครับ

About Nop

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment

0 comments:

Post a Comment