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