• Базы данных
  • Oracle
  • Сжатие данных в целях экономии места и ускорения работы Oracle

Фрагментация таблиц в Oracle - Create table as select

ОГЛАВЛЕНИЕ

Опция: 2 "Create table as select"

SQL> CREATE TABLE BIG2 AS SELECT * FROM BIG1;
TABLE created.

SQL> DROP TABLE BIG1 PURGE;
TABLE dropped.

SQL> RENAME BIG2 TO BIG1;
TABLE renamed.

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','BIG1');
PL/SQL procedure successfully completed.

SQL> SELECT TABLE_NAME,ROUND((BLOCKS*8),2)//'KB' "SIZE"
2 FROM USER_TABLES
3 WHERE TABLE_NAME = 'BIG1';
TABLE_NAME SIZE 
------------------------------ ------------------------------------------
BIG1 85536KB

SQL> SELECT TABLE_NAME,ROUND((NUM_ROWS*AVG_ROW_LEN/1024),2)//'KB' "SIZE"
2 FROM USER_TABLES
3 WHERE TABLE_NAME = 'BIG1';
TABLE_NAME SIZE
------------------------------ ------------------------------------------
BIG1 68986.97KB

SQL> SELECT STATUS FROM USER_INDEXES
2 WHERE TABLE_NAME = 'BIG1';
no rows selected

SQL> --Важно, потребуется заново создать все индексы.