Monday, May 4, 2009

การ Move ตารางไปไว้ในเทเบิลสเปซอื่น

ข้อเขียนนี้ช่วยฉัน: 
Updated: 4/5/2009

เราสามารถย้ายเทเบิลสเปซของตารางได้ โดยสามารถที่จะ compress ขณะที่ย้ายตารางได้ด้วย ดังตัวอย่างข้างล่าง

เราสร้างเทเบิลสเปซ ชื่อ "uncompress1" เป็นแบบธรรมดา และ "compress1" เป็นแบบ compress

SQL> create tablespace uncompress1 datafile 'd:\uncompress1.dbf' size 5m;
Tablespace created

SQL> create tablespace compress1 datafile 'd:\compress1.dbf' size 5m default compress;
Tablespace created

และสร้างตาราง "testuncomp" ไว้ในเทเบิลสเปซ "uncompress1" และสร้างตาราง "testcomp" ไว้ในเทเบิลสเปซ "compress1"

SQL> create table testuncomp (id number) tablespace uncompress1;
Table created

SQL> create table testcomp (id number) tablespace compress1;
Table created

จะสังเกตว่า "testcomp" ซึ่งอยู่ในเทเบิลสเปซ "compress1" จะถูก compress โดยอัตโนมัติเมื่อสร้าง ในขณะที่ testuncomp จะไม่ถูก compress

SQL> select table_name,tablespace_name,compression from dba_tables where table_name in ('TESTCOMP','TESTUNCOMP');
TABLE_NAME TABLESPACE_NAME COMPRESSION
------------------------------ ------------------------------ -----------
TESTUNCOMP UNCOMPRESS1 DISABLED
TESTCOMP COMPRESS1 ENABLED

SQL> insert into testcomp values (100);
1 row inserted

SQL> commit;
Commit complete

SQL> select * from testcomp;
ID----------
100

หลังจากนั้นเราทำการ move ตาราง "testuncomp" (Uncompress) ไปยังเทเบิลสเปซ compress โดยใช้คำสั่ง alter table testuncomp move tablespace compress1 COMPRESS; หากเราไม่ใช้คำว่า COMPRESS ตารางจะไม่ compress แม้ว่าการ compress จะเป็นดีฟอลต์ในเทเบิลสเปซ compress1

SQL> alter table testuncomp move tablespace compress1 compress;
Table altered

ถ้าเรา offline เทเบิลสเปซเดิม จะยังคงคิวรีตารางได้ แสดงว่าข้อมูลไม่ได้อยู่ที่เทเบิลสเปซเดิมแล้ว

SQL> alter tablespace uncompress1 offline;
Tablespace altered

SQL> select * from testcomp;
ID----------
100

ถ้าเราจำเป็นต้องทำกับตารางจำนวนมากอาจจะสร้างสคริปต์ได้จากคำสั่ง

SQL> select 'alter table ' table_name ' move tablespace compress1 compress;' from user_tables;

No comments:

Post a Comment