- TOP
- BLOG
- 技術ブログ
- ALTER SESSION SET CONTAINER実行時のトランザクションの保留 – (全部俺)某Oracle書籍を25日後に脱稿するXX歳のAdvent Calendar 2021 6日目
技術ブログ
目次
この記事は(全部俺)某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書籍」の記載と、一連の投稿は品質が全く異なります 。
オラクルマスター教科書 Silver DBA Oracle Database Administration I https://www.amazon.co.jp/dp/4798166359/ (2021年5月28日 発売)
オラクルマスター教科書 Bronze DBA Oracle Database Fundamentals https://www.amazon.co.jp/dp/4798166367/ (2020年9月17日 発売)
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によって接続先コンテナを切り替えた場合、実行中のトランザクションは一旦保留扱いになるようです。
以下に実行例を示します。
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試験対策本の発売日が決定しました