在前面的测试过程中,偶然发现12.1版本的一个表现,确切的说,应该是在12.1.0.1版本中。当关闭数据库前,当前会话中,未被提交的事务将会隐式被提交。
[oracle@12c01db trace]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Thu Dec 1 16:48:42 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> select con_id,name,open_mode from v$pdbs;
CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
2 PDB$SEED READ ONLY
3 YHEM MOUNTED
SQL> alter session set container=YHEM;
Session altered.
SQL> startup
Pluggable Database opened.
SQL> alter session set current_schema=EYGLE;
Session altered.
SQL> create table enmotech as select con_id,name,open_mode from v$pdbs;
Table created.
SQL> select * from enmotech;
CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
3 YHEM READ WRITE
SQL> update enmotech set con_id=10000+con_id;
1 row updated.
SQL> select * from enmotech;
CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
10003 YHEM READ WRITE
SQL> shutdown immediate;
Pluggable Database closed.
正常情况下,这个未完成的事务应当被回滚。
SQL> connect / as sysdba
Connected.
SQL> alter pluggable database yhem open;
Pluggable database altered.
SQL> alter session set container=YHEM;
Session altered.
SQL> select * from eygle.enmotech;
CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
10003 YHEM READ WRITE
在12.1.0.2中已经改变。注意在以下的测试中,直接关闭PDB,Oracle会提示事务在进行中,需要提交或者回滚。此时abort命令拥有了进一步的实质性含义,不再提示,直接停止了PDB。当然最后事务被成功回退。
[oracle@enmocoredb ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Thu Dec 1 17:06:53 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> col name for a30
SQL> select con_id,name,open_mode from v$pdbs;
CON_ID NAME OPEN_MODE
---------- ------------------------------ --------------------
2 PDB$SEED READ ONLY
3 PDBPROD1 READ WRITE
4 PDBPROD2 MOUNTED
SQL> alter session set container=PDBPROD1;
Session altered.
SQL> create table enmotech as select con_id,name from v$pdbs;
Table created.
SQL> select * from enmotech;
CON_ID NAME
---------- ------------------------------
3 PDBPROD1
SQL> update enmotech set con_id=10000+con_id;
1 row updated.
SQL> select * from enmotech;
CON_ID NAME
---------- ------------------------------
10003 PDBPROD1
SQL> shutdown immediate;
ORA-01097: cannot shutdown while in a transaction - commit or rollback first
SQL> shutdown abort;
Pluggable Database closed.
SQL> startup
Pluggable Database opened.
SQL> select * from enmotech;
CON_ID NAME
---------- ------------------------------
3 PDBPROD1
一个新特性的引入,往往是牵一发动全身的改变,完善就需要从头再来。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




