Oracle Database 18cの
新機能ガイド
をみると複数の機能が追加されています。今回はその中でもDBA観点で簡単に使えて便利そうな機能を3つご紹介します。
ALTER SYSTEM CANCEL SQL(SQLの中断)
Oracle Database 12cR2までのリリースにおいて、高負荷なSQLを実行しているセッションへの処理を止めるにはALTER SYSTEM KILL SESSIONでセッションを終了させる方法が一般的でした。
Oracle Database 18cからは、次の構文でセッションを終了させずに処理実行中のSQLをキャンセルさせることができるようになっています。
--処理の停止
SQL> ALTER SYSTEM CANCEL SQL 'SID,SERIAL#,@INSTANCE_ID,SQL_ID';
セッション(SID,SERIAL#,SQL_ID)の特定にはV$SESSIONなどを利用します。INSTANCE_NUMBERは対象セッションが存在するインスタンスのV$INSTANCEから確認可能ですが、シングルインスタンスであれば"1"です。
SQLの実行を中断させられたセッションは「ORA-01013: user requested cancel of current operation」のエラーを受けますが、その後も処理を続けることが可能です。
##SYSユーザから中断コマンドの実行
SQL> ALTER SYSTEM CANCEL SQL '275,4806,@1,6x6uf7ydy8gpa';
##対象セッションの処理はORA-01013で終了するもセッションは切れていないため後続の処理は実行可能
SQL> select d1.text from dba_source d1, dba_source d2 order by d1.line;
select d1.text from dba_source d1, dba_source d2 order by d1.line
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
SQL> select count(*) from test;
COUNT(*)
----------
1
Oracle® Database SQL言語リファレンス 18cバージョン 18.1
12 SQL文: ALTER SYNONYMからCOMMENT
Data Pump IMPORTのエラー発生オブジェクトのスキップ
IMPDP実行時にDATA_OPTIONS=CONTINUE_LOAD_ON_FORMAT_ERRORを指定することで、エラーが発生したオブジェクトのインポートをスキップして続行できるようになりました。
Oracle® Database データベース・ユーティリティ 18c
第I部 Oracle Data Pump
データ・ポンプ・インポート
インポート・ユーティリティのコマンドライン・モードで使用可能なパラメータ
従来のリリースではData Pumpを利用した複数テーブル、大規模データの移行の際にダンプファイルに含まれているテーブルが1つでも破損していた場合は、他の表が無事でもIMPDPができませんでした。
Data Pumpを利用したデータの移行中にエラーを受け、長時間かかるEXPDPからのやり直しを経験したことがあるデータベース管理者の方もいらっしゃるかと思います。
本オプションが追加されたことで、万が一ダンプファイルが破損していたとしても、後ほどエラーを受けたオブジェクトのみ個別にEXPDP/IMPDPするという選択もできそうです。※具体的にどのエラーを回避できるかは分かり次第追記します。
##コマンド実行例
impdp system/oracle@pdb1 full=y directory=data_pump_dir dumpfile=expfull.dmp data_options=continue_load_on_format_error
スキーマ限定アカウントの作成
CREATE USER文を実行する際にNO AUTHENTICATION句を指定することで、オブジェクトを所有することを目的としたログインできないアカウントを作成することができるようになりました。
SQL> CREATE USER user_name NO AUTHENTICATION;
Oracle Databaseではスキーマとユーザは分けられておらず、スキーマを用意するためには不要であってもユーザを作成する必要があります。従来のリリースでは、オブジェクトのオーナーであるユーザでのログインを抑制するにはアカウントロックする必要がありました
スキーマ限定アカウントでは、ログインを試みてもORA-01017エラーとなります。※アカウントをロックしている場合だとORA-28000: The account is locked エラーになります。
また、新規ユーザ作成(CREATE USER)時のみではなく、次のようにALTER USER文で既存のユーザをスキーマ限定アカウントに変更することも可能です。
##ユーザ'SCHEMA_ONLY'は表を保持
SQL> conn schema_only/test@pdb1
Connected.
SQL> select * from t;
C1
----------
TEST DATA
##スキーマ限定アカウントに変更
SQL> conn system/oracle@pdb1
SQL> alter user schema_only no authentication;
User altered.
##参照権限のあるユーザからは表は引き続き参照可能
SQL> conn appuser/test@pdb1
SQL> select * from schema_only.t;
C1
----------
TEST DATA
##ログインはORA-01017で失敗
SQL> conn schema_only/test@pdb1
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
##パスワードを再設定するとログイン可能
SQL> conn system/oracle@pdb1
SQL> alter user schema_only identified by test;
User altered.
SQL> conn schema_only/test@pdb1
Connected.
スキーマ限定アカウントには幾つか制限がありますので、作成前に必ずマニュアルも併せてご確認ください。
Oracle® Database セキュリティ・ガイド 18c
3 認証の構成
まとめ
今回はEditionに依存しない、簡単に使えそうな機能をご紹介させていただきました。新機能ガイドからは色々な機能が追加されていることがわかりますが、ライセンス情報ユーザーマニュアルと併せて確認するとCloudやEngineered Systemでのみ利用可能な機能も少なくありません。
参考:
Oracle® Database ライセンス情報ユーザー・マニュアル 18c
18cへのバージョンアップを検討される際は利用したい機能が移行予定のライセンスで使えるか?についても確認をしておきましょう。
--変更履歴
2018/10/11 ALTER SYSTEM CANCEL SQLの例文誤りを修正
筆者情報
サービス事業部 付加価値創造部 カスタマーエンゲージメント・プランナー
2007年アシスト入社。Oracle Databaseのサポート業務を経て、サポートセンターに蓄積されたナレッジを使用したサービスの立ち上げに従事。「アシストの超サポ」を広め、カスタマーエンゲージメントの構築を実現するための活動を行っている。