システム運用保守でよく使うORACLEのSQLコマンドまとめ

システム運用保守でよく使うORACLEのSQLコマンドをいくつか紹介します。

テーブルのデータごとコピー(バックアップ)

テーブルをデータごとコピーするにはCREATE AS~を使います。

<SQLサンプル>
create as test_bk20190101 select * from test;

↑のようにすることでテーブルのレイアウトをそのままに、データ丸ごとテーブルをコピーすることが出来ます。

統計情報の取得日付の確認・更新(再取得)

統計情報の取得日付の確認は、all_tablesテーブルで確認できます。dba_tablesでも確認可能です。統計情報の取得は、DBMS_STATSパッケージで行います。パラレル実行する場合はパラメータを指定します。

・統計情報の取得日付の確認
select
a.TABLE_NAME –テーブル名
,a.NUM_ROWS –件数
,a.LAST_ANALYZED –統計情報を取得した日付
from
all_tables a
where
a.OWNER = ” –オーナー名
and a.TABLE_NAME = ” –テーブル名
 begin
DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME =>’user1′
,TABNAME=>’table1′
,degree =>;4 –パラレル実行数
);
end;

・表の統計情報の取得
begin
DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME =>’user1′
,TABNAME=>’table1′
);
end; 

・表の統計情報の取得(パラレル実行)
begin
DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME =>’user1′
,TABNAME=>’table1′
,degree =>;4 –パラレル実行数
);
end;

インデックスの統計情報の取得(パラレル実行)
begin
DBMS_STATS.GATHER_INDEX_STATS(ownname => ‘user1’, indname => ‘ix_table1’, degree => ‘4’);
end;

表(テーブル)の再構築・再編成

<SQL構文>
ALTER TABLE 表名 MOVE TABLESPACE 表領域名

<SQLサンプル>
alter table test1 move

tablespace以降を省略することで、同一表領域内で再編成・再構築のみを実行します。ONLINE句を付けることでオンラインで再構築することもできます。

索引(インデックス)の再構築・再編成

<SQL構文>
ALTER INDEX 索引名 REBUILD

<SQLサンプル>
alter INDEX test1_idx1 rebuild;

ALTER REBUILD文でインデックスの再編成が出来ます。データの更新や削除を繰り返し行っている項目については、定期的に再編成を行うことをオススメします。ONLINE句を付けることでオンラインで再構築することもできます。

表領域の再構築・再編成

表領域を再構築・再編成するためには、エクスポート・インポートを実行します。

<SQL例>
expdp user/oracle dumpfile=dmp_dir:expdat_tb.dmp tables=TBS_EMP
impdp user/oracle dumpfile=dmp_dir:expdat_tb.dmp tables=TBS_EMP TABLE_EXISTS_ACTION=REPLACE