Oracleでテーブルが属する表領域の確認や表領域の変更方法、また表領域の使用率の確認
Oracleでテーブルがどの表領域に属しているかを以下SQLで確認します。
select table_name,tablespace_name from user_tables order by tablespace_name;
結果は以下のようになりました。
TABLE_NAME | TABLESPACE_NAME |
---|---|
SAMPLE_TABLE | SYSTEM |
SAMPLE_TABLEがSYSTEM表領域に属していることがわかります。
これを別の表領域に変更するにはALTER TABLEを使用します。
ALTER TABLE SAMPLE_TABLE MOVE TABLESPACE SAMPLE_SPACE;
SAMPLE_SPACEは別の表領域です。
再度、検索します。
select table_name,tablespace_name from user_tables order by tablespace_name;
結果は以下のようになりました。
TABLE_NAME | TABLESPACE_NAME |
---|---|
SAMPLE_TABLE | SAMPLE_SPACE |
ちなみにdba_tablesからも表領域は確認できます。
select table_name,tablespace_name from dba_tables where owner = 'USER002';
OWNERを指定しないとSYSが所有するテーブルなども表示されるのでOWNERで条件を絞った方が良いです。
表領域の使用率の確認
表領域の使用率を確認するには、以下SQLを発行します。
select tablespace_name, to_char(nvl(total_bytes / 1024 / 1024,0),'999,999,999') as "size(MB)", to_char(nvl((total_bytes - free_total_bytes) / 1024 / 1024,0),'999,999,999') as "used(MB)", to_char(nvl(free_total_bytes/1024 / 1024,0),'999,999,999') as "free(MB)", round(nvl((total_bytes - free_total_bytes) / total_bytes * 100,100),2) as "rate(%)" from ( select tablespace_name, sum(bytes) total_bytes from dba_data_files group by tablespace_name ), ( select tablespace_name free_tablespace_name, sum(bytes) free_total_bytes from dba_free_space group by tablespace_name ) where tablespace_name = free_tablespace_name(+)
参考サイト:Oracle使いのネタ帳
実行結果は以下のようになりました。
TABLESPACE_NAME SIZE(MB) USED(MB) FREE(MB) USED(%) --------------- -------- -------- -------- ------- SYSTEM 360 354 6 98.32 SYSAUX 670 632 38 94.37 UNDOTBS1 25 9 16 36.75 USERS 100 7 94 6.5 SAMPLE_SPACE 10 1 9 10.63
ちょっと気になったので表領域SAMPLE_SPACEに属するテーブルにレコードを10万件くらいインサートしてみました。
すると、「ORA-01653: 表USER002.SAMPLE_TABLEを拡張できません(128分、表領域SAMPLE\SPACE)。」と表示されました。
このエラーを解決するには、データファイルのリサイズなどが考えられます。具体的な対策方法は、ORA-01653: 表スキーマ名.テーブル名を拡張できません(XXX分、表領域XXX)。を参照ください。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント