株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

ALTER SESSION SET CONTAINER実行時のトランザクションの保留 – (全部俺)某Oracle書籍を25日後に脱稿するXX歳のAdvent Calendar 2021 6日目

Oracle ACEの渡部です。

この記事は(全部俺)某Oracle書籍を25日後に脱稿するXX歳の Advent Calendar 2021の6日目の記事です。5日目の記事はPDB接続互換性とアップグレード - (全部俺)某Oracle書籍を25日後に脱稿するXX歳のAdvent Calendar 2021 2日目でした。

つい「カッと」なって(全部俺)某Oracle書籍を25日後に脱稿するXX歳の Advent Calendar 2021を作ってしまいました。

オラクルマスター教科書 Bronze DBA Oracle Database Fundamentalsオラクルマスター教科書 Silver DBA Oracle Database Administration Iに続く「某Oracle書籍」を執筆中のOracle ACE 渡部が、12月25日のドラフト脱稿目指して1日1記事頑張って投稿してゆきたいと思います!

(注意点) 一連の投稿について

  • 「某Oracle書籍」執筆中に実施した下調べの内容や、「某Oracle書籍」のターゲットを超える内容、内容的に関連するセミナー資料の抜粋などを記載する予定です。
  • 2021年12月時点で「某Oracle書籍」の発売時期は未定です。もう少々お待ちを。
  • 万が一、関係者から怒られたら途中でやめるかも(たぶん大丈夫だと思うのだけど)
  • 執筆中の「某Oracle書籍」の記載内容と、一連の投稿の記載内容は異なります

    • そもそも、同じ内容を投稿したら「問題」になる!
  • 「某Oracle書籍」の記載と、一連の投稿は品質が全く異なります

    • 「某Oracle書籍」の記載は、十分に推敲を重ねた、図や表を用いた丁寧なものです。一方、一連の投稿はメモ書きの延長のレベルで、概して推敲が不十分で図や表はあまり使っていません。
    • 「某Oracle書籍」の記載は、先頭から読んでいけばスンナリ理解できるように工夫された完結性・完備性が高いものです。一方、一連の投稿は特定の観点やトピックにのみ関連するものです。内容を理解するには前提知識が求められます。

[宣伝] これまでに渡部が執筆した書籍の一覧

2022/3/25 追記

12月中の脱稿には失敗してしまいましたが、その後鋭意執筆を進め、2022年5月27日に「オラクルマスター教科書 Gold DBA Oracle Database Administration II」を販売開始します。詳細は以下をご覧ください。

ORACLE MASTER Bronze DBA 2019試験対策本の発売日が決定しました

ALTER SESSION SET CONTAINER実行時のトランザクションの保留

特定のコンテナに接続した状態で、接続先コンテナを切り替えるためには、 ALTER SESSION SET CONTAINERを使用します。

イマイチ背景がよくわからないのですが、トランザクションの実行中にALTER SESSION SET CONTAINERによって接続先コンテナを切り替えた場合、実行中のトランザクションは一旦保留扱いになるようです。

以下に実行例を示します。

SQL> CONNECT C##u1/Password123

ALTER SESSION SET CONTAINER=pdb1;

接続されました。
SQL> SQL>
セッションが変更されました。

SQL> SQL> DROP TABLE t1;

表が削除されました。

SQL> ALTER SESSION SET CONTAINER=pdb1;

セッションが変更されました。

SQL> show con_name

CON_NAME
------------------------------
PDB1

SQL> CREATE TABLE t1 (n number, s varchar2(8));

表が作成されました。

SQL> SELECT * FROM t1;

レコードが選択されませんでした。

SQL> INSERT INTO t1 VALUES(1,'AAA');    ── (1)

1行が作成されました。

SQL> SELECT * FROM t1;

         N S
---------- --------
         1 AAA

SQL> ALTER SESSION SET CONTAINER=pdb2;    ─── (2)

セッションが変更されました。

SQL> show con_name

CON_NAME
------------------------------
PDB2

SQL> ALTER SESSION SET CONTAINER=pdb1;    ─── (3)

セッションが変更されました。

SQL> show con_name

CON_NAME
------------------------------
PDB1

SQL> SELECT * FROM t1;

         N S
---------- --------
         1 AAA

SQL> ROLLBACK;

ロールバックが完了しました。

SQL> SELECT * FROM t1;

レコードが選択されませんでした。

(1)のINSERT文によりPDB1において開始されたトランザクションは、(2)の ALTER SESSION SET CONTAINER=pdb2の実行により一旦保留扱いになります。 (3)のPDB1に戻ったところでで保留されたトランザクションが再開されます。

この例では、ROLLBACKを実行して、INSERT文によるデータ変更を取り消しています。 このような操作はトランザクションが実行中でなければできないことです。

これから、トランザクションが保留→再開という流れで継続していたことがわかります。

2022/3/25 追記

12月中の脱稿には失敗してしまいましたが、その後鋭意執筆を進め、2022年5月27日に「オラクルマスター教科書 Gold DBA Oracle Database Administration II」を販売開始します。詳細は以下をご覧ください。

ORACLE MASTER Bronze DBA 2019試験対策本の発売日が決定しました

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ