Know more Oracle Pluggable/Multitenant DB – Under the Hood

Know more Oracle Pluggable/Multitenant DB – Under the Hood

 

• Multitenant Database – use cases ?
• Oracle Multitenant – Single yet Separate
• Architecture
• Take Home

 

[gview file=”https://www.askmac.cn/wp-content/uploads/2014/07/12cPluggableDB.pdf”]

【Oracle database 12c】12c官方Note信息汇总

【Oracle database 12c】12c官方Note信息汇总:

 

DB 12.1 Information Centers
Master Note For Oracle Database 12c Release 1 (12.1) Database/Client Installation/Upgrade/Migration Standalone Environment (Non-RAC) [Document 1520299.1]
Master Note for the Oracle Multitenant Option [Document 1519699.1]
Master Note for Oracle Data Mining 12c [Document 1523136.1]

 

 

 

DB 12.1 knowledge documents created in last 60 days
After Database creation Catalog And Catproc Components Are Invalid [Created: 10/16/2013]
Installation Of 12.1 Oracle Database/Client On 64-Bit Windows Returns The Error “AddACLForUserException” [Created: 09/25/2013]

 

 

DB 12.1 New Features
Oracle Database 12c Release 1 (12.1) Upgrade New Features [Document 1515747.1]
RMAN Enhancements in Oracle 12c [Document 1534487.1]
Features per Version of Oracle Multimedia/interMedia [Document 223443.1]
New Features in XML Database (XDB) 12.1.0.1.0 [Document 1516818.1]
New Features in XML Developers Kit (XDK) v12.1.0.1.0 [Document 1520623.1]
12c Partitioning Enhancements [Document 1568010.1]
Oracle ASM 12c New Features (Technical Overview) [Document 1569648.1]
Data Guard: Oracle 12c %u2013 New and updated Features [Document 1558256.1]

 

 

 

 

DB 12.1 knowledge documents updated in last 60 days
12c Partitioning Enhancements (Doc ID 1568010.1)
DB Vault Show Audit On Success Does Not Match On OEM 12c (Doc ID 1579830.1)
After Database creation Catalog And Catproc Components Are Invalid (Doc ID 1592604.1)
Installation Of 12.1 Oracle Database/Client On 64-Bit Windows Returns The Error “AddACLForUserException” (Doc ID 1587322.1)
FAQ: Oracle Flex ASM 12c / 12.1 (Doc ID 1573137.1)
MISSING FILE CATCDB.SQL IN $ORACLE_HOME/RDBMS/ADMIN in 12C RDBMS software (Doc ID 1575778.1)
12.1 : Installation of 12.1 Oracle Database/Client throws the Error “[INS-32104] The user of the Oracle Home directory shown is not the owner of the Oracle home directory specified database.” (Doc ID 1581850.1)

【Oracle Database 12c新特性】In-Memory Option

12c中提出了In-Memory Option,虽然在12.1.0.1中还未引入该特性,12c in-memory database cache的灵魂是 in memory in compressed columnar 简称IMCC ,在数据库中所有启用了IMCC 的表 将被加载在 in-memory snapshot store. 中。这个 in-memory snapshot store要通过 transaction journal 来更新。

 

该In-Memory Option特性致力于使用内存中的列存处理来实现以下4个主要目标:

  1. 显著增快SQL的全表扫描处理速度, 全表扫描将增快10~100倍,基于CPU的最大数据处理速度,对于简单扫描可以每秒扫描10亿行数据;  对于简单的连接过滤谓词最终选出少量数据行的达到每秒1亿条每秒。 与今日ORACLE数据库中对于内存在的大表访问最多处理2000万行每秒对比,将有巨大的进步。对于长向量CPU处理和压缩 积极使用有效内存
  2. 显著增快复杂SQL的处理,在绝大多数场景中连接处理将变快10倍或者更多。聚集,排序,分组也将随之变快。 积极使用内存、物化的连接键合以及压缩将使用in-memory算法大大得益,比之将临时数据溢出到磁盘的效益多出不可以道里计。
  3. 显著增快事务处理,DML操作-单行DML和批量DML都将运行地更快; 单行的处理收益主要来源于降低10倍的索引维护。
  4. 100%的应用程序透明。类似于OLTP压缩,主要的优势在于对于应用而言完全透明。所有的其他ORACLE特性均将可以与in-memory option一起工作,包括partitioning, indexes, text indexes,而没有明确的数据类型或者存储类型限制。

 

in-memory columnar & compression简称 (IMCC)项目, 会在ORACLE数据库内核中修改指定的层面来提供增强的性能,并保持数据库组件的接口不变; ORACLE在开发这一重量级特性的时候,反复强调该特性要与其他每一个数据库特性互通,类似于当初设计Exadata Hybrid Columnar Compression混合列压缩项目时的原则, 虽然IMCC的影响会更深,它会深植于SQL处理的关键区域。

 

IMCC项目包含了一个新的 数据引擎(就像MYSQL那样 ,ORACLE开始给自己添加引擎了) ,即IN-MEMORY Data Engine (IMCC-DE)组件,用以将表以压缩的列格式存放在内存中,并启用各种表的访问方法,包括扫描,行查找,lock,插入等等。 这个IMCC-DE组件由几个子组件构成:

 

  1. IMCC-DE-VetctorScanEngine: 这是一个矢量处理引擎,让in-memory columnar列存格式来提供额外的快速谓词评估和位操作
  2. IMCC-DE-SnapshotStore:  一个新的in-memory的矢量数据存储
  3. IMCC-DE-TransactionManager:一个高效的in-memory 事务管理器,会跟踪在内存中的行变化并针对上面的Snapshot Store启用CR一致性读。 它同时也提供快速CR以便有效扫描长的列矢量,同时也管理事务提交,回滚。 这个组件也要管理集群同步以便扩展RAC并发查询
  4. IMCC-DE-OverlayStore: 是一个存储组件 用来延迟对磁盘上数据结构的修改,并在in-memory中存放覆盖的变化以便快速查询处理。 这将包含一个索引的列差存储,由此常规的OLTP操作才能跳过大量的索维护操作。 第二,它将包含一个覆盖存储即将批量修改和删除延迟应用到表上,这样可以不消耗大量的CPU,redo和解压/重压缩代价。 这个overlay结构将在事务周期内被保存到磁盘上。
  5. 为了管理数TB的内存,为几十万个数据库对象分配和消费内存,一个新的空间管理组件要被引入,这是IMCC-Space。 这个组件用来在内存盘区中追踪,即为元数据提供一致性机制且将元数据映射到磁盘上的盘区。此外,DDL操作和直接路径加载将执行盘区创建和删除,同时也将执行对应的IN-MEMORY操作。
  6. Evaluation Engine (IMCC-EE)帮助加速谓词表达式的评估和聚集
  7. in-memory Temp module (IMCC-TP)更积极使用内存,来优化HASH JOIN,排序和分组

 

【Oracle Database 12c】12c 常见问题FAQ

【Oracle Database 12c】12c 常见问题FAQ

补充:

#ORACLE DATABASE 12c# 很多运营商那里遇到了scn headroom的问题,在12cR2中将引入BIG SCN的特性,SCN的格式将从6个字节变成8个字节存储,这意味着更高的SCN上限 以及能满足更快的SCN增速

#ORACLE DATABASE 12c# 随着12c In-Memory Option IMCC 特性的引入, 12c的内核将加入一个新的模块 Kernel Data Layer in-memory database 简称 KDM, 这个模块已经有了几十万行的代码量

【Oracle Database 12c新特性】In-Memory Option 虽然在12.1.0.1中还未引入该特性,12c in-memory database cache的灵魂是 in memory in compressed columnar 简称IMCC ,在数据库中所有启用了IMCC 的表 将被加载在 in-memory snapshot store.http://t.cn/8kvLc2A

#ORACLE DATABASE 12c# 12c的SPM加强了对SQL PLAN Baseline执行计划基线的分类功能,这个特性同样是为了满足某日本汽车企业的EA架构需求。可以看到ORACLE database的新特性开发在国外还是很贴地气的, 有国内企业的新特性需求直接在新版本中得到满足的例子吗,bug不算,scn 搞死DB那事也不算.

#ORACLE DATABASE 12c# 12c的32k varchar出现之前,竞争对手如DB2 支持32k的char,SQL SERVER支持2GB(虽然order by 操作有限制),MYSQL是65535字节。12c的varchar选择32k,一方面是为了持平DB2,另一方面产品用户 Toyota丰田汽车对这个特性的明确要求,ORACLE数据库为日本的用户特意开发了不少特性。

#ORACLE DATABASE 12c# 11g中推出的高可用特性Automatic Block Media Repair BMR可以有效利用物理备库来修复主库上的坏块,具体见http://t.cn/zRW02vd。 但该特性在11g中只能修复普通data block,对于datafile header无能为力,12.2中将加入datafile header的修复功能,总的来说DG越来越有用了!

#ORACLE DATABASE 12c# 12c中将加强查询重写能力,原来的Query WRite只支持如MV: SUM(c1 + c2), Query: SUM(c2 + c1),12c中将加强分配性,支持例如MV: SUM(c1*(c2+c3)), Query: SUM(c1*c2 +c1*c3) MV: SUM(2*c1), Query: SUM(10*c1) 的组合

12c中可能出现一个有点吓人的新特性《nologging standby》,无需在primary上设置FORCE LOGGING,由于 nologging造成的无效数据块,通过直接传输数据块来解决,从而大幅减少DW系统中数据加载产生的大量redo

#ORACLE DATABASE 12c# 12c 分区特性官方课程,学习地址:http://t.cn/zRSo2DO

12c: Network Recovery in RMAN新特性,可以在standby数据库上直接recover database from service 来恢复备库,这个算实用特性了。 对于那些使用迁移数据库后要apply日志来追平数据的场景,不需要再搞归档那么复杂了,一条命令搞定。 http://t.cn/zRJRMMH

oracle database 12c 是否比11g要更快? 可以参考下这篇文章, http://t.cn/zRJRylq ,需要科学上网。 作者的观点是 逻辑读上12c要比11g少。

Oracle GoldenGate 12c – 新版本,新特性 ogg 12c支持DB 12c的multi-tenant container databases (CDB).多租户特性,同时现在有了不急于trigger触发器捕捉DDL的天然Native DDL Capture http://t.cn/zRx3ufi

 

配合ORACLE DATABASE 12C (12.1.0.1) 安装 ORACLE GOLDEN GATE 12C (12.1.2) ,OGG oracle goldengate 终于有了oracle标准的 OUI安装界面!!! http://t.cn/zRx3Ogy

 

 

问题 : 从哪里可以下载到Oracle Database 12c?

目前从OTN页面:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 可以下载到

 

问题 : 12c的补丁机制 patchset、security patch update spu和 patch set update PSU有改变吗?

从Oracle数据库版本12.1.0.1起,Oracle将只提供Patch Set Update (PSU)补丁来满足Critical Patch Update (CPU)对于安全性补丁程序的要求。SPU(Security Patch Update)补丁将不再提供

 

 

问题 :那些Solaris版本与Oracle Database 12c兼容?

Solaris Sparc
Solaris 10
Solaris 11

Solaris X86_64
Solaris 10
Solaris 11

 

问题 : 对于Oracle Database 12c而言那些平台目前或今后会出32bit的CLIENT客户端软件?

Linux x86
Solaris x86 and Solaris SPARC
Windows 7 & 8

 

 

问题 :在OOW 2013中宣传的”in-memory” database cache特性 何时可用?

在”in-memory” database cache特性将在Oracle Database 12c patchset 12.1.0.2中release ,12.1.0.2计划在2014年度放出

 

问题 : 与Oracle Database 12c支持较好的Linux版本是哪几个?

Oracle Linux 5
Oracle Linux 6
RedHat Linux 5
RedHat Linux 6
SLES 11

 

问题 : 如何配置数据库实例以便其能运行在12.1.0.1的Oracle Flex cluster leaf nodes上?

Oracle Database 12c中引入了新的集群拓扑,称之为Flex Cluster ,在Flex CLuster集群中节点被按照角色分为 HUB node 和 Leaf Node。 在版本12.1.0.1中,LEAF Node不能配置数据库, 数据库实例不支持运行在12.1.0.1的Leaf Node上。 askmac.cn

 

 

问题 :  在新的多租户架构中,数据库(PDBS)以及其他options选项需要如何购买许可证license?

虽然多租户是一种新的逻辑架构, 但其许可证license仍采取和版本12.1之前一样的模式。  软件 包括 数据库和 其他选项的license基于CPU数目 计算。 对于 Named User  Plus NUP也是如此的。

 

因此一台 2个Intel 处理器总共8核的服务器,需要购买4个core( 8* 0.5    , 0.5是Intel 核心的license 因子)的  包括 数据库和 其他选项(例如分区)的license 。

举例来说, 例子1:

1个CDB 带了 3个PDB , PDB1 使用了partitioning 分区特性, PDB2只使用ASO特性,而PDB3 不使用任何options。 由此 基于core的数目,用户必须购买 database 、multitenant 多租户特性、ASO 特性 ,以及4个 core 的partitioning分区特性,所有上述的许可证license。 如果使用Named User Plus 命名用户方式计算, 则 最少需要购买 100个NUP(4*25),或者实际的用户数量, 哪个更高则采用哪一个。

综上所述,license的计算和实际某个PDB使用或者不使用某个options是没关系的, 只要你的这个CDB里有用任何option,就需要根据服务器核数来决定license 。 同时CDB里的任何一个PDB都可以使用已购买的option 。

 

例子2:

在与例子1中同样的硬件环境中,有3个CDB运行着,每一个CDB都包含多个PDB,而仅有CDB2的一个PDB1使用分区选项。 和之前的例子完全一样,还是要购买4核的 数据库,multitenant 多租户特性 和分区特性。

 

 问题 : 到目前为止(12.1.0.1) Oracle Database 12c是否支持Oracle Database Appliance (ODA)?

目前还不支持,  Oracle计划在12.1.0.2版本中支持Oracle Database Appliance (ODA)

 

问题 :Oracle Database 12.1是否支持Exadata 数据库一体机?

是的, Oracle Database 12.1支持Exadata 。 最低的支持Oracle 12.1的Exadata Storage Server Software 版本是11.2.3.2.1, 同时也可以在Exadata上同时运行 12.1 和 11.2的数据库。

 

所有Oracle 12.1的新特性,包括 多租户可拔插数据库都在  Exadata上支持。 但在12.1中 smart scan智能扫描不从Exadata Storage上过滤行,同时12.1的IORM plan可能不适用。 这些限制将在 Exadata storage server software version 12.1.1.1.0中被改善。 其他特性例如HCC, Smart Flash Cache, Smart Logging均支持。

 

问题 : 在多租户架构中的pluggable database 可拔插数据库是什么玩样?

 

pluggable database (PDBS)是Oracle Database Release 12.1中的新特性,  你可以在一个Oracle数据库中 存放很多个pluggable database。 pluggable database 向后兼容,可以像操作12.1之前的数据库那样操作pluggable database ,这里指绝大多数常规操作。

 

问题 :  哪样场景我应当考虑使用pluggable database PDB?

以下几个场景适合于使用pluggable database:

  1. 在产品系统中的某些应用实际仅使用十分少量的硬件资源。但是如果存在大量这样的应用,则还是需要构造大量的数据库实例并为这些小规模的数据库分配存储空间
  2. 对于那些并不十分复杂或重要,需要全职DBA花费大量时间管理的数据库
  3. 为了更好地利用硬件和DBA资源,用户有必要将大量的部门级应用整合到少数几个oracle RDBMS数据库中以便部署和管理

 

Pluggable Database 可拔插数据库允许DBA整合大量的小的部门级数据库到一个更庞大的数据库中。

 

问题: 为什么我启用了heat_map=on 但是 v$heat_map_segment没有数据?

检查下 enable_pluggable_database,如果=true 那说明是CDB,目前(12.1.0.1)多租户特性无法 与 heat map特性一起工作。如果启用了CDB就用不了heat map

 

 

 

问题 : PDB带来哪些好处?

 

在一个集中化的平台上操作多个数据库将有效降低成本:

  1. 更少的实例损耗
  2. 更低的存储成本

 

减少对DBA资源的使用,以及便于维护安全性:

  • 无需应用修改
  • 更快和简便的配置
  • 节省了打patch和升级的时间
  • 分离了以下责任:
    • 不同应用的管理员
    • 应用程序管理员和DBA
    • 应用用户
  • 提供isolation
  • 保证与非CDB 完整的向后兼容性
  • 完整的RAC操作使用
  • 与Oracle Enterprise Manager和Resource Manager整合在一起
  • 可以集中化管理多个数据库
    • 备份和灾难恢复
    • 补丁和升级

 

 

问题 : 如何从12.1之前的数据库迁移到 12c的多租户数据库?

 

计划A:

  • 先把12.1之前的数据库升级到12.1
  • 将数据库装换为CDB container database

 

计划B:

  • 创建一个12c的CDB,并建立一个空的PDB
  • 使用data pump/goldengate工具将数据导入到新的PDB中

 

 

问题  : 哪些 Oracle Database 特性还在12.1.0.1多租户环境中不被支持?

  • Continuous Query Notification
  • Flashback Data Archive
  • Heat Maps
  • Automatic Data Optimization

如果必须使用以上特性,则必须要创建non-cdb数据库

 

问题  : 如何知道我的数据库是否是多租户的CDB/PDB?

 

可以通过如下语句查询:

SQL> select NAME, DECODE(CDB, 'YES', 'Multitenant Option enabled', 'Regular 12c Database: ') "Multitenant Option ?" , OPEN_MODE, CON_ID from V$DATABASE;

NAME                        Multitenant Option ?                  OPEN_MODE              CON_ID
---------           ------------------------------           --------------------           ----------
CDB2              Multitenant Option enabled                      MOUNTED                       0

OR

SQL>  select NAME, DECODE(CDB, 'YES', 'Multitenant Option enabled', 'Regular 12c Database: ') "Multitenant Option ?" , OPEN_MODE, CON_ID from V$DATABASE;

NAME               Multitenant Option ?           OPEN_MODE                                    CON_ID
------------------ ------------------------------ ---------------------------------------- ----------
MACLEAN            Regular 12c Database:          MOUNTED                                           0

 

 

问题  : 如何知道一个容器数据库中有多少个pluggable database?

可以通过下面的查询得知:

 

 

 

SQL>  select CON_ID, NAME, OPEN_MODE from V$PDBS;

    CON_ID NAME                          OPEN_MODE
---------- ------------------------       ------------
         2 PDB$SEED                         READ ONLY
         3 PDB1                                 MOUNTED
         4 PDB2                                 MOUNTED
         5 PDB3                                 MOUNTED
         6 PDB4                                 MOUNTED
         7 PDB5                                 MOUNTED
         8 PDB6                                 MOUNTED
         9 PDB7                                 MOUNTED
 ...

 

 

问题  : 如何连接到一个PDB ,例如PDB6?

 

你可以从现有的链接切换到PDB6:

SQL> alter session set container = pdb6;

你也可以直接从SQLPLUS里直接登录PDB:

A)

使用easy connect 方式:

CONNECT username/password@host[:port][/service_name][:server][/instance_name]

例如:

$ sqlplus hpal/hpal@//hpal-node1:1521/pdb2
OR
$ sqlplus hpal/hpal@//localhost:1521/pdb2
OR
$ sqlplus hpal/hpal@//localhost/pdb2

SQL> show con_name

CON_NAME
——————————
PDB2

 

B)

通过Net Service name 连接

 

TNSNAMES.ora:

=======

LISTENER_CDB1 =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
CDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cdb1)
)
)

PDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hpal-node1.us.oracle.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb2)
)
)
=======
使用sqlplus 登录

$ sqlplus hpal/hpal@pdb2

 

问题: 是否支持将 non-cdb非CDB转换为CDB?

不行, 无法直接转换。

对于12c之前的数据库 可以在升级到12c之后,然后作为PDB 插入plug到12c的CDB中。

或者采用data pump导入到12c的CDB中。  但是目前(12.1.0.1)不存在直接将non-CDB转换为CDB的方法。

For upgrade of 11g database to 12c, can we not convert non container database to CDB, during upgrade or post upgrade?

 

The only option I know is to move non-cdb as pdb.

that’s true – you can only create a fresh CDB in Oracle 12c. Earlier database versions need to be either upgraded first to 12c and can be plugged in as a PDB, or you can use Data Punp export/import or Full Transportable Export/Import for 11.2.0.3 databases.

 

问题  : 连接后如何切换到容器root数据库?

SQL> ALTER SESSION SET CONTAINER = CDB$ROOT;

 

问题  : 如何判断我连接的是CDB还是PDB?

可以通过 show con_name  或者 select sys_context ( ‘Userenv’, ‘Con_Name’) “Container DB” from dual;  查看

 

问题  : 如何启动一个 Pluggable Database?

启动当前已连接的PDB :

alter pluggable database open;

连接到root 后启动某一个PDB:

alter pluggable database pdb6 open;

 

 问题  : 如果shutdown 关闭一个Pluggable Database?

关闭当前已连接的PDB :

alter pluggable database close;

连接到root 后关闭某一个PDB:

alter pluggable database pdb6 close;

 

问题: 如何关闭和启动容器数据库 container database?

使用管理普通数据库的 shutdown /startup命令来关闭和启动 ROOT Database

当容器数据库被关闭,则所有的PDB均不可访问。

 

问题: 那些参数可以在PDB级别做修改?

select NAME, ISPDB_MODIFIABLE from V$PARAMETER;

==》主要是一些优化器参数、Pl/SQL、NLS参数可以被在pluggable databasei级别修改

 

问题: 在我的CDB中有那些用户是 common user?

select distinct USERNAME from CDB_USERS where common = ‘YES’;

 

问题: 如何创建一个 common user?

create user c##db_dba1 identified by manager1 container=all;

 

问题: 为什么我在12c中创建user失败 ORA-65049? 

在CDB 中创建common user,用户名必须以C##开头,例如C##MACLEAN

 

问题 : 我在CDB中创建common user能够不以c##为开头吗?

可以的,需要修改隐藏参数 _common_user_prefix   (默认为:C## Enforce restriction on a prefix of a Common User/Role/Profile name)

 

问题: 如何创建一个 local user?

create user pdb6_dba1 identified by manager1 container=current;

 

 问题: Container ID   CON_ID  0 和1 的区别是什么?

CON_ID =0  不指代任何的特定 容器,而指代整个CDB。  举例来说从V$DATABASE返回的一行结果 指代整个CDB 而非某一个容器, 因此CON_ID是0 。

CON_ID=0  代表整个CDB

1 代表root container
2 代表seed
3~254 指向某一个PDB

 

问题: 对于 PDB是否有独立的一套PMON、SMON后台进程?

没有, PDB和root共享同一套 后台进程

 

问题: 对于 PDB是否有独立的控制文件?

没有,  整个CDB 使用同一套redolog 和 controlfile

 

问题: 对于 PDB是否有独立的redo重做日志文件?

没有,  整个CDB 使用同一套redolog 和 controlfile

 

 

问题: 如何监控一个PDB对于SGA内存的使用?

PDB和root共享同一个SGA, 但仍可以通过如下脚本来计算每一个容器消耗的内存量:

SQL> alter session set container=CDB$ROOT;

SQL> select POOL, NAME, BYTES from V$SGASTAT where CON_ID = ‘&con_id’;

SQL> select CON_ID, POOL, sum(bytes) from  v$sgastat
group by CON_ID, POOL order by  CON_ID, POOL;

 

问题: 我可以限制某一个PDB对SGA内存的使用吗?

目前12.1.0.1中还不可以,可能作为今后 12.2的新特性加入该功能

 

问题: 如何监控一个PDB对PGA内存的使用?

select CON_ID, sum(PGA_USED_MEM), sum(PGA_ALLOC_MEM), sum(PGA_MAX_MEM)
from  v$process
group by CON_ID order by  CON_ID;

 

alter session set container =CDB$ROOT;
select NAME , value from  v$sysstat  where NAME like ‘workarea%’;

alter session set container = <targetPDB>;
select NAME , value from  v$sysstat  where NAME like ‘workarea%’;

 

问题: 每一个PDB是否独立配置一套Undo tablespace?

还是和普通数据库一样, 一个实例拥有一套undo tablespace, RAC每个实例一个undo tablespace

 

问题: 每一个PDB是否配置独立的SYSTEM表空间?

是的, root和每一个pdb都有独立的SYSTEM表空间

 

问题: 每一个PDB是否配置独立的SYSAUX表空间?

是的, root和每一个pdb都有独立的SYSAUX表空间

 

问题: 每一个PDB是否配置独立的Temporary tablespaces临时表空间?

整个CDB使用一个默认的临时表空间,但确实可以在独立的PDB中创建临时表空间。

 

问题: 我可以为PDB指定默认的表空间default tablespace吗?

可以

 

问题 : 对于root和PDB是否所有的物理数据文件都是独立的?

对于root、seed、和每一个pdb 都有独立的数据文件

在一个CDB中,绝大多数用户数据应当存放在PDB中。

 

问题 : PDB可以使用不同的字符集吗?

不能,整个CDB中的root、pdb使用同一套字符集

 

问题 : 在pluggable database环境下如何配置Oracle NET文件?

对整个CDB仍是使用同一套listener.ora, tnsnames.ora和 sqlnet.ora 网络配置文件

 

问题s : 我如何能够创建一个Container Database?

首先安装12c软件,之后启动DBCA 创建数据库为 容器数据库:

 

cdb1

 

 

 

问题s : 对于PDB有那些常见操作?

  • 创建PDB
  • 拔出PDB unplug pdb
  • 插入PDB plug pdb
  • drop pdb
  • 设置pdb的open_mode

 

问题s : 如何创建一个pluggable database?

create pluggable database x admin user a identified by p;

create pluggable database y admin user a identified by p file_name_convert = (‘pdbseed’, ‘y’);

问题s : 如何drop一个pluggable database?

drop pluggable database x  including datafiles;

问题s : 如何从现有的pdb 克隆一个新的pdb?

被克隆的PDB应当是read only状态

— Using Oracle-Managed Files

create pluggable database x2  from x;

 

问题s : 如何拔出一个pdb?

alter pluggable database x unplug into ‘/some_directory/x_description.xml’ ;

INTO后面指向 一个绝对目录,会写出描述PDB的XML

 

 

问题s : 如何增加或修改 user-managed service?

srvctl add service … –pdb <pdb_name>

 

问题s : 如何查看某个服务是否加入了某个pluggable database?

SQL> column NAME format a30

SQL> select PDB, INST_ID, NAME from gv$services order by 1;

PDB                                    INST_ID    NAME
——————————– ———- ——————————–
CDB$ROOT                                  1 cdb1XDB
CDB$ROOT                                  1 SYS$BACKGROUND
CDB$ROOT                                  1 SYS$USERS
CDB$ROOT                                  1 cdb1
PDB1                                           1 pdb1
PDB2                                           1 pdb2

 

 

问题: 我的pluggable database的alert log在哪里?

所有的PDB都只有一份alert log ,XML版和TEXT文本版的告警日志在12c中仍同时存在,具体可以参考 V$DIAG_INFO视图

 

问题: 我的pluggable database的trace file在哪里?

所有的PDB的trace文件一样存放在container database的DIAG TRACE目录下

具体可以参考V$DIAG_INFO视图

 

问题: 在Oracle标准版standard edition中多租户选项是否可用?

是的,但是在一个CDB里你只能建一个PDB

 

问题: 事务内否在PDB之间跨越?

不能,虽然可以在启动一个事务后 使用”alter session set container”在PDB之间切换,但仅有select 查询允许在第二PDB中操作。原事务被保留,用户仍可以切换到原来的PDB并commit或者rollback。

 

 

 问题: 在PDB中如果有一个用户定义的common user创建了对象,之后这个PDB 被拔出了,并插入到另一个CDB中,且该CDB中不存在该common user, 则如何?

 

如果用户将一个包含common user的PDB插入到一个CDB中,则将发生如下情况:

在PDB中的common user 账号丢失commonly赋予的权限,包括SET CONTAINER这个权限。

如果目标CDB中含有与 该common user账号一样名字的common user账号,则新的common user将被合并到目标库的common user。并采用目标CDB common user的密码。   否则在新的插入的PDB中的common user将被锁住locked。

在此情况下,用户可以选择:

保持该账号被锁,并使用其名下的对象

使用Oracle Data Pump将数据复制到别的schema 下,并删除源账号

关闭PDB,并连接到ROOT,并创建一个与被锁定的账号同名的 common user。当重新打开PDB时,Oracle自动会将必要的commonly 角色和权限赋予给锁定的用户。 之后用户可以解锁PDB中的账号,本地授予的权限和角色保持不变。

 

 

问题: 12c中的Flex ASM是什么东西?

Oracle Flex ASM是指在集群中以预定义的基数数量运行的ASM实例。默认的基数cardinality是3,用户可以通过srvctl modify asm来修改该基数。  换句话说,ASM不需要运行在集群中的每一个节点上。

在之前的版本中,ASM运行在集群的每一个节点上,ASM的客户程序例如database、ACSF、ADVM均只能访问本地主机上的ASM实例。

通过Oracle Flex ASM, 客户程序可以通过网络连接(例如ASM network)远程ASM实例。 如果运行着一个ASM的主机宕了,Oracle Clusterware会在别的服务器上启动一个ASM实例,以便维持基数。  如果一个12c的数据库使用某个特定的ASM实例,当该ASM实例由于服务器crash或者ASM实例奔溃而不可用,则Oracle 12c数据库实例将重新连接到现有运行的其他ASM实例中。 该特性统称Oracle Flex ASM。

 

 

问题: Oracle Flex Cluster和Oracle Flex ASM有什么区别?

Oracle Flex Cluster是将集群中的节点分为 Hub和Leaf 节点。  仅仅有Hub Node可以直接访问OCR和VoteDisk, Leaf node不能直接访问共享存储。

Flex Cluster需要Flex ASM,而Flex ASM不需要Flex Cluster。

在Flex Cluster节点中,Flex ASM运行在HUB node上并服务于Flex Cluster中的其他HUB node上的应用。

默认情况下不启用Flex Cluster,需要用户显式地自行启用。

 

 

问题: 什么是ASM Network和ASM listener?

在12c之前, Oracle 集群软件要求一个公用网络以便客户端访问 和 一个私有网络以便节点之间通信,并包括了ASM的节点之间通信。

在Flex ASM中,ASM network提供分离ASM内部网络流量的功能,以便其独享一个私有网络。OUI安装界面上会让DBA选择是否为ASM使用独占的网络。  ASM network是数据库与ASM以及ASM与ASM之间通信的通路,其主要流量应当是一些文件extent map类的元数据信息。基于用户的选择,ASM 私有网络可以为ASM通信而独占,也可以与CSS服务共享。

 

在Flex ASM运行的节点上将有本地ASM监听运行。 ASM的客户端透过3个ASM监听获得endpoint信息并通过ASM network连接到Flex ASM。ASM集群的负载应当是均衡的。

 

 

问题: 如何启用Flex ASM特性?

以以下2种途径启用Flex ASM

纯12c Flex ASM,该模式下Grid Infrastructure 和数据库均运行12c版本,这样database数据库将充分利用12c系特性

与12c之前的版本混合使用 ,该模式下为了支持12c之前的数据库,ASM需要运行每一个节点上。 只需要设置ASM cardinality为ALL即可保证ASM运行在集群中的每一个节点上。 这种方式的优势是如果12c的数据库实例丢失与ASM实例的连接,则数据库连接将切换到另一个服务器上的另一个ASM实例。

 

 

问题: 如何检查Oracle Flex ASM是否启用了?

ASMCMD> showclustermode
ASM cluster : Flex mode enabled

 

ASMCMD> showclusterstate
Normal

 

问题:如何修改集群中ASM实例启动的数量,基数cardinality?

[root@ol6r02 bin]# ./srvctl modify asm -count 1
[root@ol6r02 bin]# ./srvctl config asm
ASM home: /u01/app/12.1.0/grid
Password file: +DATA/orapwASM
ASM listener: LISTENER
ASM instance count: 1
Cluster ASM listener: ASMNET1LSNR_ASM

 

问题: 如何重定位数据库到其他ASM?

如果ASM实例奔溃,客户程序将自动重定位到可用ASM实例,并保证连接是负载均衡的。

也可以手动来重定位:

ALTER SYSTEM RELOCATE CLIENT

SQL> ALTER SYSTEM RELOCATE CLIENT ‘<instance_name>:<db_name>’;
— Query GV$ASM_CLIENT to determine instance_name and db_name.

 

 

问题: 如何检查ASM实例运行在哪几个节点上?

$ srvctl status asm -detail
ASM is running on ol6r01,ol6r02
ASM is enabled

 

 

问题:如何非Flex ASM切换到 Flex ASM

 

可以使用asmca图形界面 或者 静默模式

 

 

[oracle@ol6r01 ~]$ asmca -silent -convertToFlexASM -asmNetworks eth1/10.154.138.0 -asmListenerPort 1521

To complete ASM conversion, run the following script as privileged user in local node.

/u01/app/oracle/cfgtoollogs/asmca/scripts/converttoFlexASM.sh

CRS-2673: Attempting to stop 'ora.crsd' on 'ol6r01'
CRS-2790: Starting shutdown of Cluster Ready Services-managed resources on 'ol6r01'
CRS-2673: Attempting to stop 'ora.LISTENER_SCAN2.lsnr' on 'ol6r01'
CRS-2673: Attempting to stop 'ora.LISTENER_SCAN3.lsnr' on 'ol6r01'
CRS-2673: Attempting to stop 'ora.DATA.dg' on 'ol6r01'
CRS-2673: Attempting to stop 'ora.LISTENER.lsnr' on 'ol6r01'
CRS-2673: Attempting to stop 'ora.cvu' on 'ol6r01'
CRS-2677: Stop of 'ora.LISTENER_SCAN2.lsnr' on 'ol6r01' succeeded
CRS-2673: Attempting to stop 'ora.scan2.vip' on 'ol6r01'
CRS-2677: Stop of 'ora.LISTENER.lsnr' on 'ol6r01' succeeded
CRS-2673: Attempting to stop 'ora.ol6r01.vip' on 'ol6r01'
CRS-2677: Stop of 'ora.LISTENER_SCAN3.lsnr' on 'ol6r01' succeeded
CRS-2673: Attempting to stop 'ora.scan3.vip' on 'ol6r01'
CRS-2677: Stop of 'ora.cvu' on 'ol6r01' succeeded
CRS-2672: Attempting to start 'ora.cvu' on 'ol6r02'
CRS-2676: Start of 'ora.cvu' on 'ol6r02' succeeded
CRS-2677: Stop of 'ora.scan2.vip' on 'ol6r01' succeeded
CRS-2672: Attempting to start 'ora.scan2.vip' on 'ol6r02'
CRS-2677: Stop of 'ora.scan3.vip' on 'ol6r01' succeeded
CRS-2672: Attempting to start 'ora.scan3.vip' on 'ol6r02'
CRS-2676: Start of 'ora.scan2.vip' on 'ol6r02' succeeded
CRS-2672: Attempting to start 'ora.LISTENER_SCAN2.lsnr' on 'ol6r02'
CRS-2677: Stop of 'ora.ol6r01.vip' on 'ol6r01' succeeded
CRS-2672: Attempting to start 'ora.ol6r01.vip' on 'ol6r02'
CRS-2676: Start of 'ora.scan3.vip' on 'ol6r02' succeeded
CRS-2672: Attempting to start 'ora.LISTENER_SCAN3.lsnr' on 'ol6r02'
CRS-2676: Start of 'ora.ol6r01.vip' on 'ol6r02' succeeded
CRS-2672: Attempting to start 'ora.storage' on 'ol6r02'
CRS-2676: Start of 'ora.storage' on 'ol6r02' succeeded
+ echo 'Cluster bounced in node ol6r02'

Cluster bounced in node ol6r02

ASMCMD> showclustermode
ASM cluster : Flex mode enabled
ASMCMD> showclusterstate
Normal

 

 

 

【Oracle Database 12c新特性】DROP Index/CONSTRAINT ONLINE

12c中提供了DROP Index/CONSTRAINT ONLINE的新特性, ONLINE意味着在drop index期间对于表或分区的DML操作不被阻塞。

DROP INDEX ONLINE对于分区索引或者非分区索引均可用。

 

在12c drop index online之前普通的drop index操作会可能导致短暂的enq: TM 等待,原因是

 

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

SQL> 
SQL> create table DML_ONLINE as select * from dba_tables;

Table created.

SQL> create index idx_name on DML_ONLINE(table_name);

Index created.

SQL> alter session set events '10704 trace name context forever , level 10';

Session altered.

SQL> drop index idx_name ;

Index dropped.

SQL> select object_id from dba_objects where object_name='DML_ONLINE';

 OBJECT_ID
----------
     97302

	97302=>17C16 

SQL> oradebug setmypid

Statement processed.

SQL> oradebug tracefile_name

/s01/admin/G10R25/udump/g10r25_ora_7007.trc

[oracle@vrh8 ~]$ grep "ksqgtl \*\*\*" /s01/admin/G10R25/udump/g10r25_ora_7007.trc
ksqgtl *** TX-00080027-000021d4 mode=6 flags=0x401 timeout=0 ***
ksqgtl *** TM-00017c16-00000000 mode=6 flags=0x401 timeout=0 ***
ksqgtl *** TM-00000318-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** CU-92e387e8-00000000 mode=6 flags=0x10 timeout=300 ***
ksqgtl *** TM-0000023a-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000049-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000004a-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000004b-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000004c-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-000002d8-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000039-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** CU-92e37c98-00000000 mode=6 flags=0x10 timeout=300 ***
ksqgtl *** CU-92e37c98-00000000 mode=6 flags=0x10 timeout=300 ***
ksqgtl *** TM-00000014-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** CU-92e377a8-00000000 mode=6 flags=0x10 timeout=300 ***
ksqgtl *** CU-92e377a8-00000000 mode=6 flags=0x10 timeout=300 ***
ksqgtl *** TM-00000013-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000000e-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000012-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TS-00000000-00414641 mode=6 flags=0x11 timeout=0 ***
ksqgtl *** TT-00000000-00000010 mode=4 flags=0x11 timeout=21474836 ***
ksqgtl *** RO-00010014-00000001 mode=6 flags=0x11 timeout=21474836 ***
ksqgtl *** RO-00010014-00000002 mode=1 flags=0x11 timeout=21474836 ***
ksqgtl *** TM-0000000e-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TX-00010018-00001cbc mode=6 flags=0x401 timeout=0 ***
ksqgtl *** TX-00030006-00002417 mode=6 flags=0x401 timeout=0 ***
ksqgtl *** CI-00000001-00000005 mode=6 flags=0x10 timeout=21474836 ***
ksqgtl *** TM-0000000e-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** CU-92e372b8-00000000 mode=6 flags=0x10 timeout=300 ***

97302=>17C16  ksqgtl *** TM-00017c16-00000000 mode=6   这里可以看到 drop index 期间拿了对应表的TM mode=6 exclusive mode table lock

 

 

 

 

如果使用12c 中的drop index Online则:

 

 

 

SQL> select banner from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> create table DML_ONLINE as select * from dba_tables;

表已创建。

SQL> create index idx_name on DML_ONLINE(table_name);

索引已创建。

SQL> alter session set events '10704 trace name context forever , level 10';

会话已更改。

SQL> drop index idx_name online ;

索引已删除。

SQL> select object_id from dba_objects where object_name='DML_ONLINE';

 OBJECT_ID
----------
    117648

SQL>  oradebug setmypid
已处理的语句
SQL> oradebug tracefile_name
maclean_ora_1212.trc

[oracle@vrh8 ~]$ grep "ksqgtl \*\*\*"  maclean_ora_1212.trc 

[oracle@vrh8 ~]$ grep "ksqgtl \*\*\*"  maclean_ora_4280.trc 
ksqgtl *** CU-0FE14E98-000007FF-00000000-00000000 mode=6 flags=0x10000 timeout=300 ***
ksqgtl *** TM-0001CB90-00000000-00000000-00000000 mode=2 flags=0x401 timeout=0 ***
ksqgtl *** OD-0001CB90-00000000-00000000-00000000 mode=4 flags=0x10401 timeout=0 ***
ksqgtl *** OD-0001CB91-00000000-00000000-00000000 mode=6 flags=0x10401 timeout=0 ***
ksqgtl *** TM-0001CB90-00000000-00000000-00000000 mode=2 flags=0x401 timeout=0 ***
ksqgtl *** CU-0FE103C8-000007FF-00000000-00000000 mode=6 flags=0x10000 timeout=300 ***
ksqgtl *** CU-0FE103C8-000007FF-00000000-00000000 mode=6 flags=0x10000 timeout=300 ***
ksqgtl *** TM-0000004B-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** CU-0FE07708-000007FF-00000000-00000000 mode=6 flags=0x10000 timeout=300 ***
ksqgtl *** CU-0FE07708-000007FF-00000000-00000000 mode=6 flags=0x10000 timeout=300 ***
ksqgtl *** TM-00000013-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TX-00090010-00000C08-00000000-00000000 mode=6 flags=0x401 timeout=0 ***
ksqgtl *** TM-00000012-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TX-00030006-00000D1A-00000000-00000000 mode=6 flags=0x401 timeout=0 ***
ksqgtl *** CU-0FDFABF8-000007FF-00000000-00000000 mode=6 flags=0x10000 timeout=300 ***
ksqgtl *** TM-00000224-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00001569-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000004D-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000265-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000007F-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-000000EB-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-000000ED-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-000000F3-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000026C-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000142-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000143-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000123-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-000002AF-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000146-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000127-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000128-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000129-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000012A-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000138-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000003D-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000014-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000013-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000000E-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000012-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TS-00000000-00419660-00000000-00000000 mode=6 flags=0x10001 timeout=0 ***
ksqgtl *** TT-00000000-00000010-00000000-00000000 mode=4 flags=0x10001 timeout=21474836 ***
ksqgtl *** TS-00000000-00419661-00000000-00000000 mode=6 flags=0x10001 timeout=21474836 ***
ksqgtl *** RO-00010038-00000001-00000000-00000000 mode=6 flags=0x10001 timeout=21474836 ***
ksqgtl *** RO-00010038-00000002-00000000-00000000 mode=6 flags=0x10001 timeout=21474836 ***
ksqgtl *** TM-0000000E-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TX-00040014-00000BB2-00000000-00000000 mode=6 flags=0x401 timeout=0 ***
ksqgtl *** TX-00090006-00000C0D-00000000-00000000 mode=6 flags=0x401 timeout=0 ***
ksqgtl *** CR-00010038-00000001-00000000-00000000 mode=6 flags=0x10001 timeout=21474836 ***
ksqgtl *** CR-00010038-00000002-00000000-00000000 mode=6 flags=0x10001 timeout=21474836 ***
ksqgtl *** TM-0000000E-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** CU-0FDFA688-000007FF-00000000-00000000 mode=6 flags=0x10000 timeout=300 ***
ksqgtl *** MC-00000000-87EFB967-00000000-00000000 mode=4 flags=0x10001 timeout=21474836 ***

[oracle@vrh8 ~]$ grep "ksqgtl \*\*\*"  maclean_ora_4280.trc |grep TM-
ksqgtl *** TM-0001CB90-00000000-00000000-00000000 mode=2 flags=0x401 timeout=0 ***
ksqgtl *** TM-0001CB90-00000000-00000000-00000000 mode=2 flags=0x401 timeout=0 ***
ksqgtl *** TM-0000004B-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000013-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000012-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000224-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00001569-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000004D-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000265-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000007F-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-000000EB-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-000000ED-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-000000F3-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000026C-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000142-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000143-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000123-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-000002AF-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000146-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000127-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000128-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000129-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000012A-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000138-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000003D-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000014-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000013-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000000E-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-00000012-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000000E-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl *** TM-0000000E-00000000-00000000-00000000 mode=3 flags=0x401 timeout=21474836 ***

117648=> 1CB90  

可以看到 drop index online之后只 获取了 mode=2 SS的 TM lock  TM-0001CB90-00000000-00000000-00000000 mode=2

 

 

 

类似于 INDEX , 12c中还提供了 DROP CONSTRAINT ONLINE的新特性, 允许在线drop 约束; 但是存在如下限制:

  • Cannot drop a constraint with CASCADE
  • Cannot drop a referencing constraint

 

具体语法如下:

 

 

ALTER TABLE hr.employees DROP CONSTRAINT emp_email_uk ONLINE;

 

 

这2中 ONLINE DROP 新特性 究其根本都是在DROP 过程中不在acquire TM mode=6的表队列锁,虽然这些操作本身的耗时并不久,也就不会长时间阻塞DML ,但是对于高并发的OLTP系统而言 阻塞仍可能是致命的。

【Oracle Database 12c】RMAN新特性

在12c中提出了不少RMAN备份恢复的新特性,这里我们先草草地过一下这些新特性。

sysbackup 管理角色覆盖了 备份backup和recovery恢复所需要的权限, 还包括连接到已关闭的 数据库。  系统管理员可以将sysbackup而非sysdba赋予给那些只操作备份和恢复的用户,由此减少了SYSDBA这个超级用户权限过重的问题。  与SYSDBA相反,SYSBACKUP不包含访问所有表的SELECT ANY TABLE权限。

 

 

使用SYSBACKUP登陆RMAN 
C:\Users\xiangbli>rman target "'/ as sysbackup'"

恢复管理器: Release 12.1.0.1.0 - Production on 星期一 8月 19 07:55:45 2013

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

已连接到目标数据库: MACLEAN (DBID=1694338843)

现在RMAN增强了SQL接口可以通过RMAN做一些查询了。

RMAN> select user from dual;

使用目标数据库控制文件替代恢复目录
USER
------------------------------
SYSBACKUP

 

 

 

尝试在非归档模式下 热备份hot backup

 

 

 

RMAN> SELECT NAME, DBID, LOG_MODE FROM V$DATABASE;

NAME            DBID LOG_MODE
--------- ---------- ------------
MACLEAN   1694338843 NOARCHIVELOG

RMAN> backup database;

启动 backup 于 19-8月 -13
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=365 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup 命令 (ORA_DISK_1 通道上, 在 08/19/2013 08:06:10 上) 失败
ORA-19602: 无法按 NOARCHIVELOG 模式备份或复制活动文件

非归档模式是不能 在线 热备份的! 这一点没有变

 oerr ORA 19602
19602, 00000, "cannot backup or copy active file in NOARCHIVELOG mode"
// *Cause:  You tried to copy or backup a file that was not closed cleanly,
// and the database was in NOARCHIVELOG mode.  This is not allowed
// because when restored, the file will require redo application
// before it is usable, and redo is not currently being saved
// beyond the contents of the online redo logs.
// *Action: Take the tablespace offline clean or close the database and retry
// the copy or backup.
$

 

 

 

 

将数据库修改为归档模式后 再次备份

 

 

RMAN> shutdown immediate;

数据库已关闭
数据库已卸装
Oracle 实例已关闭

RMAN> startup mount;

已连接到目标数据库 (未启动)
Oracle 实例已启动
数据库已装载

系统全局区域总计    1737031680 字节

Fixed Size                     2403544 字节
Variable Size                536871720 字节
Database Buffers            1191182336 字节
Redo Buffers                   6574080 字节

RMAN> alter database archivelog;

已处理语句

RMAN> alter database open;

已处理语句

RMAN> show all;

db_unique_name 为 MACLEAN 的数据库的 RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:\APP\XIANGBLI\PRODUCT\12.1.0\DBHOME_2\DATABASE\SNCFMACLEAN.ORA'; # default

RMAN> backup database;

启动 backup 于 19-8月 -13
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=373 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00006 名称=C:\APP\XIANGBLI\ORADATA\MACLEAN\USERS01.DBF
输入数据文件: 文件号=00003 名称=C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSAUX01.DBF
输入数据文件: 文件号=00001 名称=C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSTEM01.DBF
输入数据文件: 文件号=00005 名称=C:\APP\XIANGBLI\ORADATA\MACLEAN\UNDOTBS01.DBF
输入数据文件: 文件号=00002 名称=C:\APP\XIANGBLI\ORADATA\MACLEAN\EXAMPLE01.DBF
输入数据文件: 文件号=00009 名称=C:\APP\XIANGBLI\ORADATA\MACLEAN\LOW_COST_STORE.DBF
输入数据文件: 文件号=00007 名称=C:\APP\XIANGBLI\ORADATA\MACLEAN\ILM_PART1.DBF
输入数据文件: 文件号=00008 名称=C:\APP\XIANGBLI\ORADATA\MACLEAN\ILM_PART2.DBF
输入数据文件: 文件号=00004 名称=C:\APP\XIANGBLI\ORADATA\MACLEAN\MACLEAN1.DBF
输入数据文件: 文件号=00010 名称=C:\APP\XIANGBLI\ORADATA\MACLEAN\SOURCE_TBS.DBF
通道 ORA_DISK_1: 正在启动段 1 于 19-8月 -13
通道 ORA_DISK_1: 已完成段 1 于 19-8月 -13
段句柄=C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\BACKUPSET\2013_08_19\O1_MF_NNNDF_TAG20130819T081144_912RP1LP_.BKP 标记=TAG20130819T081144 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:02:40
完成 backup 于 19-8月 -13

启动 Control File and SPFILE Autobackup 于 19-8月 -13
段 handle=C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\AUTOBACKUP\2013_08_19\O1_MF_S_823853664_912RV130_.BKP comment=NONE
完成 Control File and SPFILE Autobackup 于 19-8月 -13

 

 

 

 

以上备份结束后列出了 备份用时。

之后我们列出之前的备份情况,并删除 对于备份策略而言无用的备份:

 

 

 

 

 

RMAN> list backup;

备份集列表
===================

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
1       Full    9.61M      DISK        00:00:02     31-7月 -13
        BP 关键字: 1   状态: AVAILABLE  已压缩: NO  标记: TAG20130731T135056
段名:C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\BACKUPSET\2013_07_31\O1_MF_NCNNF_TAG20130731T135056_8ZK9G27G_.BKP
  包括的控制文件: Ckp SCN: 2891741      Ckp 时间: 31-7月 -13

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
2       Full    9.64M      DISK        00:00:01     31-7月 -13
        BP 关键字: 2   状态: AVAILABLE  已压缩: NO  标记: TAG20130731T135059
段名:C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\AUTOBACKUP\2013_07_31\O1_MF_S_822232259_8ZK9G48J_.BKP
  包含的 SPFILE: 修改时间: 31-7月 -13
  SPFILE db_unique_name: MACLEAN
  包括的控制文件: Ckp SCN: 2891749      Ckp 时间: 31-7月 -13

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
3       Full    2.15G      DISK        00:02:35     19-8月 -13
        BP 关键字: 3   状态: AVAILABLE  已压缩: NO  标记: TAG20130819T081144
段名:C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\BACKUPSET\2013_08_19\O1_MF_NNNDF_TAG20130819T081144_912RP1LP_.BKP
  备份集 3 中的数据文件列表
  文件 LV 类型 Ckp SCN    Ckp 时间   名称
  ---- -- ---- ---------- ---------- ----
  1       Full 4736749    19-8月 -13 C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSTEM01.DBF
  2       Full 4736749    19-8月 -13 C:\APP\XIANGBLI\ORADATA\MACLEAN\EXAMPLE01.DBF
  3       Full 4736749    19-8月 -13 C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSAUX01.DBF
  4       Full 4736749    19-8月 -13 C:\APP\XIANGBLI\ORADATA\MACLEAN\MACLEAN1.DBF
  5       Full 4736749    19-8月 -13 C:\APP\XIANGBLI\ORADATA\MACLEAN\UNDOTBS01.DBF
  6       Full 4736749    19-8月 -13 C:\APP\XIANGBLI\ORADATA\MACLEAN\USERS01.DBF
  7       Full 4736749    19-8月 -13 C:\APP\XIANGBLI\ORADATA\MACLEAN\ILM_PART1.DBF
  8       Full 4736749    19-8月 -13 C:\APP\XIANGBLI\ORADATA\MACLEAN\ILM_PART2.DBF
  9       Full 4736749    19-8月 -13 C:\APP\XIANGBLI\ORADATA\MACLEAN\LOW_COST_STORE.DBF
  10      Full 4736749    19-8月 -13 C:\APP\XIANGBLI\ORADATA\MACLEAN\SOURCE_TBS.DBF

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
4       Full    9.64M      DISK        00:00:01     19-8月 -13
        BP 关键字: 4   状态: AVAILABLE  已压缩: NO  标记: TAG20130819T081424
段名:C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\AUTOBACKUP\2013_08_19\O1_MF_S_823853664_912RV130_.BKP
  包含的 SPFILE: 修改时间: 19-8月 -13
  SPFILE db_unique_name: MACLEAN
  包括的控制文件: Ckp SCN: 4736816      Ckp 时间: 19-8月 -13

RMAN> delete obsolete;

RMAN 保留策略将应用于该命令
将 RMAN 保留策略设置为冗余 1
使用通道 ORA_DISK_1
删除以下已废弃的备份和副本:
类型                 关键字 完成时间           文件名/句柄
-------------------- ------ ------------------ --------------------
备份集               1      31-7月 -13
备份片段       1      31-7月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\BACKUPSET\2013_07_31\O1_MF_NCNNF_TAG20130731T135056_8ZK9G27G_.BKP
存档日志          1      15-8月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_15\O1_MF_1_68_90SB5GVH_.ARC
备份集               2      31-7月 -13
备份片段       2      31-7月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\AUTOBACKUP\2013_07_31\O1_MF_S_822232259_8ZK9G48J_.BKP
存档日志          2      16-8月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_16\O1_MF_1_69_90TYSCY3_.ARC
存档日志          3      16-8月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_16\O1_MF_1_70_90TYX340_.ARC
存档日志          4      17-8月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_17\O1_MF_1_71_90Y7D6DP_.ARC

是否确定要删除以上对象 (输入 YES 或 NO)? no

RMAN>

RMAN> delete noprompt obsolete;

RMAN 保留策略将应用于该命令
将 RMAN 保留策略设置为冗余 1
使用通道 ORA_DISK_1
删除以下已废弃的备份和副本:
类型                 关键字 完成时间           文件名/句柄
-------------------- ------ ------------------ --------------------
备份集               1      31-7月 -13
备份片段       1      31-7月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\BACKUPSET\2013_07_31\O1_MF_NCNNF_TAG20130731T135056_8ZK9G27G_.BKP
存档日志          1      15-8月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_15\O1_MF_1_68_90SB5GVH_.ARC
备份集               2      31-7月 -13
备份片段       2      31-7月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\AUTOBACKUP\2013_07_31\O1_MF_S_822232259_8ZK9G48J_.BKP
存档日志          2      16-8月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_16\O1_MF_1_69_90TYSCY3_.ARC
存档日志          3      16-8月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_16\O1_MF_1_70_90TYX340_.ARC
存档日志          4      17-8月 -13         C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_17\O1_MF_1_71_90Y7D6DP_.ARC
已删除备份片段
备份片段句柄=C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\BACKUPSET\2013_07_31\O1_MF_NCNNF_TAG20130731T135056_8ZK9G27G_.BKP RECID=1 STAMP=822232258
已删除的归档日志
归档日志文件名=C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_15\O1_MF_1_68_90SB5GVH_.ARC RECID=1 STAMP=823543727
已删除备份片段
备份片段句柄=C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\AUTOBACKUP\2013_07_31\O1_MF_S_822232259_8ZK9G48J_.BKP RECID=2 STAMP=822232260
已删除的归档日志
归档日志文件名=C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_16\O1_MF_1_69_90TYSCY3_.ARC RECID=2 STAMP=823597614
已删除的归档日志
归档日志文件名=C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_16\O1_MF_1_70_90TYX340_.ARC RECID=3 STAMP=823597732
已删除的归档日志
归档日志文件名=C:\APP\XIANGBLI\FAST_RECOVERY_AREA\MACLEAN\ARCHIVELOG\2013_08_17\O1_MF_1_71_90Y7D6DP_.ARC RECID=4 STAMP=823704734
6 对象已删除

Oracle Database 12c新特性汇总页面

Maclean Liu关于DB 12c新特性的研究文章如下:

 

 

【Oracle Database 12c新特性】 In-Database Archiving数据库内归档

【Oracle Database 12c新特性】SYS_AUTO_SPM_EVOLVE_TASK 自动作业

【Oracle Database 12c新特性】Online Statistics Gathering for Bulk-Load 针对批量数据加载的在线统计信息收集

【Oracle Database 12c新特性】32k varchar2 max_string_size

【12c新特性】RAC Cluster Hub Node-Leaf Node

【Oracle Database 12c新特性】ASM Scrubbing Disk Groups

【Oracle Database 12c新特性】TTnn TMON新的redo传输后台进程

【12c database 新特性】Adaptive Execution Plans 自适应的执行计划

【Oracle Database 12c新特性】wait event DISPLAY_NAME

【Oracle Database 12c新特性】Information Lifecycle Management ILM和Storage Enhancements

【Oracle Database 12c新特性】ORACLE_MAINTAINED

12c Pluggable Database Container Database可插拔数据库特性专题

从谷歌趋势看谁在研究Oracle 12c

【12c新特性】12cR1 ROWID IO Batching特性

【12c新特性】12cR1中新加入的Statistic

【12c新特性】12c中新后台进程

【12c新特性】12c中新加入的Enqueue Lock

【12c新特性】12c中新增的V$动态视图

【12c新特性】多LGWR进程SCALABLE LGWR “_use_single_log_writer”

【12c新特性】12cR1 diff 11gR2 Hidden Parameters

【12c新特性】CBO Optimizer优化器新特性列表

【12c新特性】12c中如何自动启动PDB Pluggable Database

Oracle Database 12c架构图

【Maclean Liu技术分享】12c 12.1.0.1 RAC安装教学视频 基于Vbox+Oracle Linux 5.7

oracle database 12c release 1 (12.1.0.1.0) 正式公开发布了

12c Pluggable Database Container Database权限与角色管理

【12c新特性】安装12c Standalone Grid Infrastructure

【12c新特性】EM Database Express

将在版本11.2之后废弃或不再支持的特性

解读Tom介绍的Oracle Database 12c的12个新特性

解读Oracle Database 12.1新特性Pluggable Databases

12c分页查询特性FETCH FIRST ROWS,OFFSET ROWS FETCH NEXT ROW LIMIT Clause子句

【12c新特性】dbms_stats report_gather_auto_stats统计信息报告特性

12c新特性:Recover Table

Oracle Database 12c(12.1) Beta已经开始内部测试

【Database 12c】手动创建CDB Container Database容器数据库

【Oracle Database 12c新特性】 12c DataPump Expdp/Impdp新特性

 

 

12c new feature

 

 

 

DB 12c的课程列表:

•Phase 1 (estimated completion February 2012):
1.Oracle Database 12c: Container Database
•Phase 2 (estimated completion April 2012):
2.Oracle Database 12c: Data Guard New Features
3.Oracle Database 12c: Oracle Availability Machine [was OHARA; may move this to phase 3 or 4]
4.Oracle Database 12c: Recovery Manager New Features
5.Oracle Database 12c: Resource Manager and Scheduler New Features
•Phase 3 (estimated completion May 2012):
6.Oracle Database 12c: Data Pump and SQL*Loader New Features
7.Oracle Database 12c: Information Lifecycle Management New Features [may move this to phase 2]
8.Oracle Database 12c: Performance Enhancements
•Phase 4 (estimated completion June 2012)
9.Oracle Database 12c: Application Continuity [not much functionality exposed to customer?]
10.Oracle Database 12c: Automatic Storage Management
11.Oracle Database 12c: Clusterware and Grid Infrastructure New Features
12.Oracle Database 12c: Installation and Upgrade New Features
13.Oracle Database 12c: Networking New Features
14.Oracle Database 12c: Online Operations New Features
15.Oracle Database 12c: Cloud Computing New Features [was Private Database Cloud]
16.Oracle Database 12c: Real Application Clusters New Features
17.Oracle Database 12c: Security New Features
•Phase 1 (estimated completion February 2012):
•None
•Phase 2 (estimated completion April 2012):
1.Oracle Database 12c: Application Migration New Features
2.Oracle Database 12c: BI and Data Warehousing New Features
3.Oracle Database 12c: Application Development New Features
4.Oracle Database 12c: Miscellaneous Database Enhancements
5.Oracle Database 12c: PL/SQL New Features
•Phase 3 (estimated completion May 2012):
6.Oracle Database 12c: OCI / OCCI New Features [may not create this due to limited interest]
7.Oracle Database 12c: Oracle Data Mining New Features
8.Oracle Database 12c: Oracle Spatial New Features
9.Oracle Database 12c: Real Application Security
10.Oracle Database 12c: SQL Tuning New Features
•Phase 4 (estimated completion June 2012)
11.Oracle Database 12c: Application Express New Features [APEX 4.2]
12.Oracle Database 12c: Java and JDBC New Features
13.Oracle Database 12c: ODP .Net New Features
14.Oracle Database 12c: Oracle XML DB New Features
15.Oracle Database 12c: Oracle Text New Features
16.Oracle Database 12c: Real Application Testing New Features
dba 12capp 12c

【Oracle Database 12c新特性】 In-Database Archiving数据库内归档

Oracle Database 12c中引入了 In-Database Archiving的新特性, 该特性允许用户通过对表上的数据行标记为inactive不活跃的,以归档数据。 这些inactive的数据行可以通过压缩进一部优化,且对应用来说默认不可见。    可以通过一个session级别的参数来控制数据的可见与否。

 

通过In-Database Archiving数据库内归档特性可以在单库中存放更长周期的数据, 而损耗很少的应用性能。 归档数据还可以通过压缩来进一步提升备份效能。

 

要管理一张表的In-Database Archiving,必须为表启用ROW ARCHIVAL  并操作ORA_ARCHIVE_STATE 这个隐藏字段 。 此外用户还可以指定session级别的 ROW ARCHIVAL VISIBILITY为ACTIVE  或者ALL。

 

下面为演示示例:

 

/* Set visibility to ACTIVE to display only active rows of a table.*/
ALTER SESSION SET ROW ARCHIVAL VISIBILITY = ACTIVE;

CREATE TABLE employees_indbarch 
 (employee_id NUMBER(6) NOT NULL, 
  first_name VARCHAR2(20), last_name VARCHAR2(25) NOT NULL, 
  email VARCHAR2(25) NOT NULL, phone_number VARCHAR2(20), 
  hire_date DATE NOT NULL, job_id VARCHAR2(10) NOT NULL, salary  NUMBER(8,2),
  commission_pct NUMBER(2,2), manager_id NUMBER(6), department_id NUMBER(4)) ROW ARCHIVAL;

INSERT INTO employees_indbarch(employee_id, first_name, last_name, email,
  hire_date, job_id, salary, manager_id, department_id) 
  VALUES (251, 'Scott', 'Tiger', 'scott.tiger@example.com', '21-MAY-2009',
 'IT_PROG', 50000, 103, 60);

INSERT INTO employees_indbarch(employee_id, first_name, last_name, email,
  hire_date, job_id, salary, manager_id, department_id) 
  VALUES (252, 'Jane', 'Lion', 'jane.lion@example.com', '11-JUN-2009', 
  'IT_PROG', 50000, 103, 60);

 commit;

 /* Show all the columns in the table, including hidden columns */
SELECT SUBSTR(COLUMN_NAME,1,22), SUBSTR(DATA_TYPE,1,20), COLUMN_ID AS COL_ID,
  SEGMENT_COLUMN_ID AS SEG_COL_ID, INTERNAL_COLUMN_ID AS INT_COL_ID, HIDDEN_COLUMN, CHAR_LENGTH
  FROM USER_TAB_COLS WHERE TABLE_NAME='EMPLOYEES_INDBARCH';

SELECT SUBSTR(COLUMN_NAME,1,22) NAME, SUBSTR(DATA_TYPE,1,20) DATA_TYPE, COLUMN_ID AS COL_ID,
  SEGMENT_COLUMN_ID AS SEG_COL_ID, INTERNAL_COLUMN_ID AS INT_COL_ID, HIDDEN_COLUMN, CHAR_LENGTH 
  FROM USER_TAB_COLS WHERE TABLE_NAME='EMPLOYEES_INDBARCH';

NAME                   DATA_TYPE                COL_ID SEG_COL_ID INT_COL_ID HID CHAR_LENGTH
---------------------- -------------------- ---------- ---------- ---------- --- -----------
ORA_ARCHIVE_STATE      VARCHAR2                                 1          1 YES        4000
EMPLOYEE_ID            NUMBER                        1          2          2 NO            0
FIRST_NAME             VARCHAR2                      2          3          3 NO           20
LAST_NAME              VARCHAR2                      3          4          4 NO           25
EMAIL                  VARCHAR2                      4          5          5 NO           25
PHONE_NUMBER           VARCHAR2                      5          6          6 NO           20
HIRE_DATE              DATE                          6          7          7 NO            0
JOB_ID                 VARCHAR2                      7          8          8 NO           10
SALARY                 NUMBER                        8          9          9 NO            0
COMMISSION_PCT         NUMBER                        9         10         10 NO            0
MANAGER_ID             NUMBER                       10         11         11 NO            0
DEPARTMENT_ID          NUMBER                       11         12         12 NO            0

/* Decrease the ORA_ARCHIVE_STATE column size to improve formatting in queries */
COLUMN ORA_ARCHIVE_STATE FORMAT a18;
/* The default value for ORA_ARCHIVE_STATE is '0', which means active */
SELECT employee_id, ORA_ARCHIVE_STATE FROM employees_indbarch;

EMPLOYEE_ID ORA_ARCHIVE_STATE
----------- ------------------
        251 0
        252 0

/* Insert a value into ORA_ARCHIVE_STATE to set inactive */
UPDATE employees_indbarch SET ORA_ARCHIVE_STATE = '20' WHERE employee_id = 252;

/* Only active records are in the following query */
SELECT employee_id, ORA_ARCHIVE_STATE FROM employees_indbarch;

EMPLOYEE_ID ORA_ARCHIVE_STATE
----------- ------------------
        251 0

/* Set visibility to ALL to display all records */
ALTER SESSION SET ROW ARCHIVAL VISIBILITY = ALL;

SELECT employee_id, ORA_ARCHIVE_STATE FROM employees_indbarch;

EMPLOYEE_ID ORA_ARCHIVE_STATE
----------- ------------------
        251 0
        252 20

SQL> desc employees_indbarch
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPLOYEE_ID                               NOT NULL NUMBER(6)
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 EMAIL                                     NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                       VARCHAR2(20)
 HIRE_DATE                                 NOT NULL DATE
 JOB_ID                                    NOT NULL VARCHAR2(10)
 SALARY                                             NUMBER(8,2)
 COMMISSION_PCT                                     NUMBER(2,2)
 MANAGER_ID                                         NUMBER(6)
 DEPARTMENT_ID                                      NUMBER(4)

  1* select COLUMN_NAME,COLUMN_ID,DATA_TYPE from dba_tab_cols where table_name=upper('employees_indbarch')
SQL> /

COLUMN_NAME          COLUMN_ID DATA_TYPE
-------------------- --------- --------------------
DEPARTMENT_ID               11 NUMBER
MANAGER_ID                  10 NUMBER
COMMISSION_PCT               9 NUMBER
SALARY                       8 NUMBER
JOB_ID                       7 VARCHAR2
HIRE_DATE                    6 DATE
PHONE_NUMBER                 5 VARCHAR2
EMAIL                        4 VARCHAR2
LAST_NAME                    3 VARCHAR2
FIRST_NAME                   2 VARCHAR2
EMPLOYEE_ID                  1 NUMBER
ORA_ARCHIVE_STATE              VARCHAR2

SQL> select dump(ORA_ARCHIVE_STATE,16),dump(EMPLOYEE_ID,16),dbms_rowid.rowid_block_number(rowid),dbms_rowid.rowid_relative_fno(rowid)  from employees_indbarch;

DUMP(ORA_ARCHIVE_STA DUMP(EMPLOYEE_ID,16) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID)
-------------------- -------------------- ------------------------------------ ------------------------------------
Typ=1 Len=1: 30      Typ=2 Len=3: c2,3,34                               109465                                    1
Typ=1 Len=2: 32,30   Typ=2 Len=3: c2,3,35                               109465                                    1

	SQL> alter system flush buffer_cache;

System altered.

SQL> alter system dump datafile 1 block 109465;

System altered.

tl: 73 fb: --H-FL-- lb: 0x0  cc: 12
col  0: [ 1]  30
col  1: [ 3]  c2 03 34
col  2: [ 5]  53 63 6f 74 74
col  3: [ 5]  54 69 67 65 72
col  4: [23]
 73 63 6f 74 74 2e 74 69 67 65 72 40 65 78 61 6d 70 6c 65 2e 63 6f 6d
col  5: *NULL*
col  6: [ 7]  78 6d 05 15 01 01 01
col  7: [ 7]  49 54 5f 50 52 4f 47  
col  8: [ 2]  c3 06
col  9: *NULL*
col 10: [ 3]  c2 02 04
col 11: [ 2]  c1 3d
tab 0, row 1, @0x1ecc
tl: 70 fb: --H-FL-- lb: 0x2  cc: 12
col  0: [ 2]  32 30
col  1: [ 3]  c2 03 35
col  2: [ 4]  4a 61 6e 65
col  3: [ 4]  4c 69 6f 6e
col  4: [21]
 6a 61 6e 65 2e 6c 69 6f 6e 40 65 78 61 6d 70 6c 65 2e 63 6f 6d
col  5: *NULL*
col  6: [ 7]  78 6d 06 0b 01 01 01
col  7: [ 7]  49 54 5f 50 52 4f 47
col  8: [ 2]  c3 06
col  9: *NULL*
col 10: [ 3]  c2 02 04  
col 11: [ 2]  c1 3d

 

 

 

可以看到这里 ORA_ARCHIVE_STATE是实际存放在块里的row piece上的第一个字段,类型为varchar2(4000);
In-Database Archiving的限制:

  • ILM is not supported with OLTP table compression for in-database archiving. Segment-level ILM and compression is supported if partitioned on the ORA_ARCHIVE_STATE column.

 

 

ORA_ARCHIVE_STATE相关:

/* constants specifying ROW ARCHIVAL state */
archive_state_active constant varchar2(1) := ‘0’;
archive_state_archived constant varchar2(1) := ‘1’;

/*
* description – Given a value for the ORA_ARCHIVE_STATE column this
* function returns the mapping for the value.
*
* value – “0”, “1” or other values from the ORA_ARCHIVE_STATE column of
* a row archival enabled table
* returns either “archive_state_active” or “archive_state_archived”
*/

【Oracle Database 12c新特性】SYS_AUTO_SPM_EVOLVE_TASK 自动作业

Oracle Database 12c中引入了一个新的自动系统作业,即SYS_AUTO_SPM_EVOLVE_TASK。 该作业将在每天的自动维护作业窗口中自动执行。 SYS_AUTO_SPM_EVOLVE_TASK负责检索和排序SPM中未被接受的执行计划non-accepted plan以便verification。 当此执行计划经过verified,过该计划满足性能阀值则将被自动接受accepted 。因此,当优化器将一个non-accepted的执行计划加入到SQL statement plan history中,在很多情况下若该计划确实是更好的,则会在第二天被接受并可以使用。

 

注意该自动task存在时间上的限制为一个小时(默认TIME_LIMIT=3600s),因此可能造成部分计划未被verified。 在此种场景下,下一个维护窗口该task执行时将处理剩余的执行计划。

 

 

SYS_AUTO_SPM_EVOLVE_TASK

  1  SELECT parameter_name, parameter_value
  2  FROM   dba_advisor_parameters
  3* WHERE  task_name = 'SYS_AUTO_SPM_EVOLVE_TASK'
SQL> /

PARAMETER_NAME                 PARAMETER_VALUE
------------------------------ ----------------------------------------
DAYS_TO_EXPIRE                 UNLIMITED
END_SNAPSHOT                   UNUSED
END_TIME                       UNUSED
INSTANCE                       UNUSED
JOURNALING                     INFORMATION
MODE                           COMPREHENSIVE
START_SNAPSHOT                 UNUSED
START_TIME                     UNUSED
TARGET_OBJECTS                 1
TIME_LIMIT                     3600
DEFAULT_EXECUTION_TYPE         SPM EVOLVE
CON_DBID_MAPPING               UNUSED
ORA_EM_PARAM1                  UNUSED
ORA_EM_PARAM2                  UNUSED
ORA_EM_PARAM3                  UNUSED
ORA_EM_PARAM4                  UNUSED
ORA_EM_PARAM5                  UNUSED
ORA_EM_PARAM6                  UNUSED
ORA_EM_PARAM7                  UNUSED
ORA_EM_PARAM8                  UNUSED
ORA_EM_PARAM9                  UNUSED
ORA_EM_PARAM10                 UNUSED
EXECUTION_DAYS_TO_EXPIRE       30
SQLSET_NAME                    UNUSED
SQLSET_OWNER                   UNUSED
ACCEPT_PLANS                   TRUE
_SPM_VERIFY                    TRUE
APPLY_CAPTURED_COMPILENV       UNUSED
LOCAL_TIME_LIMIT               UNUSED

已选择 29 行。

 select execution_name,status,execution_start,execution_end from dba_advisor_executions where task_name='SYS_AUTO_SPM_EVOLVE_TASK';


  --     time_limit  (IN) - Time limit in number of minutes.  The time limit
  --                        is global and it is used in the following manner.
  --                        The time limit for first non-accepted plan is equal
  --                        to the input value. The time limit for the second
  --                        non-accepted plan is equal to (input value - time
  --                        spent in first plan verification) and so on. The
  --                        default DBMS_SPM.AUTO_LIMIT means let the system
  --                        choose an appropriate time limit based on the
  --                        number of plan verifications required to be done.
  --                        The value DBMS_SPM.NO_LIMIT means no time limit.
  
  
  
DECLARE
   job                   BINARY_INTEGER := :job;
   next_date             TIMESTAMP WITH TIME ZONE := :mydate;
   broken                BOOLEAN := FALSE;
   job_name              VARCHAR2 (30) := :job_name;
   job_subname           VARCHAR2 (30) := :job_subname;
   job_owner             VARCHAR2 (30) := :job_owner;
   job_start             TIMESTAMP WITH TIME ZONE := :job_start;
   job_scheduled_start   TIMESTAMP WITH TIME ZONE := :job_scheduled_start;
   window_start          TIMESTAMP WITH TIME ZONE := :window_start;
   window_end            TIMESTAMP WITH TIME ZONE := :window_end;
   chain_id              VARCHAR2 (14) := :chainid;
   credential_owner      VARCHAR2 (30) := :credown;
   credential_name       VARCHAR2 (30) := :crednam;
   destination_owner     VARCHAR2 (30) := :destown;
   destination_name      VARCHAR2 (30) := :destnam;
   job_dest_id           VARCHAR2 (14) := :jdestid;
   log_id                NUMBER := :log_id;
BEGIN
   DECLARE
      ename   VARCHAR2 (30);
   BEGIN
      ename := DBMS_SQLTUNE.execute_tuning_task ('SYS_AUTO_SQL_TUNING_TASK');
      ename := DBMS_SPM.execute_evolve_task ('SYS_AUTO_SPM_EVOLVE_TASK');
   END;

   :mydate := next_date;

   IF broken
   THEN
      :b := 1;
   ELSE
      :b := 0;
   END IF;
END;




/* Formatted on 2013/8/4 10:48:19 (QP5 v5.163.1008.3004) */
  SELECT pl.signature,
         pl.category,
         pl.name,
         pl.plan_id,
         DECODE (BITAND (pl.flags, :1), 0, :2, :3) flags,
         pl.sql_handle,
         pl.sql_text,
         pl.comp_data,
         pl.optimizer_env,
         pl.bind_data,
         pl.parsing_schema_name,
         pl.creator,
         (CASE                                  /* plan is already accepted */
             WHEN (BITAND (pl.flags, :4) <> 0)
             THEN
                :5                       /* plan has recently been verified */
             WHEN (pl.is_auto IS NOT NULL
                   AND pl.last_verified >
                          SYSTIMESTAMP
                          - :6)
             THEN
                :7    /* plan's SQL statement hasn't been recently executed */
             WHEN (pl.is_auto
                      IS NOT NULL
                   AND pl.last_verified
                          IS NOT NULL
                   AND pl.sql_last_executed <
                          SYSTIMESTAMP
                          - :8)
             THEN
                :9
             ELSE
                :10
          END)
            pruned
    FROM (SELECT so.signature,
                 so.category,
                 so.name,
                 so.plan_id,
                 so.flags,
                 st.sql_handle,
                 st.sql_text,
                 (DECODE (
                     BITAND (so.flags, 128),
                     128, (SELECT EXTRACT (XMLTYPE (pl.other_xml),
                                           '/*/outline_data').getClobVal ()
                             FROM sys.sqlobj$plan pl
                            WHERE     pl.signature = so.signature
                                  AND pl.category = so.category
                                  AND pl.obj_type = so.obj_type
                                  AND pl.plan_id = so.plan_id
                                  AND pl.other_xml IS NOT NULL),
                     (SELECT sod.comp_data
                        FROM sys.sqlobj$data sod
                       WHERE     sod.signature = so.signature
                             AND sod.category = so.category
                             AND sod.obj_type = so.obj_type
                             AND sod.plan_id = so.plan_id)))
                    comp_data,
                 sox.optimizer_env,
                 sox.bind_data,
                 sox.parsing_schema_name,
                 sox.creator,
                 sox.last_verified,
                 sox.optimizer_cost,
                 sox.created,
                 :11 is_auto,
                 (SELECT MAX (last_executed)
                    FROM sys.sqlobj$ ob
                   WHERE     ob.signature = so.signature
                         AND ob.obj_type = so.obj_type
                         AND ob.category = so.category)
                    sql_last_executed
            FROM sys.sqlobj$ so, sys.sqlobj$auxdata sox, sys.sql$text st
           WHERE (:12 IS NULL
                  OR so.name IN (SELECT EXTRACTVALUE (VALUE (p), '/plan') pname
                                   FROM TABLE (
                                           XMLSEQUENCE (
                                              EXTRACT (XMLTYPE (:13),
                                                       '/plan_list/*'))) p))
                 AND (:14 IS NOT NULL
                      OR (BITAND (so.flags, :15) <> 0
                          AND BITAND (so.flags, :16) = 0))
                 AND so.obj_type = :17
                 AND so.signature = sox.signature
                 AND so.category = sox.category
                 AND so.obj_type = sox.obj_type
                 AND so.plan_id = sox.plan_id
                 AND so.signature = st.signature) pl
ORDER BY DECODE (:18, 0, NULL, pl.name),
         pl.last_verified NULLS FIRST,
         pl.sql_last_executed DESC NULLS LAST,
         pl.optimizer_cost,
         pl.created,
         pl.name

【Oracle Database 12c新特性】Online Statistics Gathering for Bulk-Load 针对批量数据加载的在线统计信息收集

Oracle database 12c中提出了Online Statistics Gathering for Bulk-Load 针对批量数据加载的在线统计信息收集的新特性。

 

通过online statistics gathering,当出现某些批量数据加载操作例如CREATE TABLE AS SELECT CTAS操作 或者 针对一个空表的INSERT INTO … SELECT操作时,统计信息将被自动收集。

 

online statistics gathering省略了当一个批量数据加载后的必要手动统计信息收集操作; 大家还记得我们在讲10/11g 性能调优时 关于数据量大幅变化操作后的手动收集统计信息建议吗? 实际上这个特性一定程度就是为了解决这里还需要手动去收集一次的麻烦。  这个特性表现的很像之前的CREATE INDEX或REBUILD INDEX时自动完成的统计信息收集。  Oracle通过内部维护操作来维护CTAS或物化视图刷新的统计信息更新 。

 

在数据仓库中,用户经常需要加载大量的数据到数据库中; 这里online statistics gathering 就可以起到作用。

Oracle Database 12c中默认启用这种自动统计信息收集特性,主要的收益在于提升批量加载数据后的SQL性能和可管理性,不在需要用户介入来人工收集了。 由于不在需要手动收集统计信息, 所以也就避免了后续的一次可能的全表扫描。

当使用Online Statistics Gathering时,数据库不收集索引统计信息和直方图。如果确实需要索引统计信息和直方图,则Oracle推荐在批量加载数据后再次使用DBMS_STATS.GATHER_TABLE_STATS。   默认情况下 DBMS_STATS.GATHER_TABLE_STATS仅收集缺失的统计信息,因此当你在bulk load批量加载后执行DBMS_STATS.GATHER_TABLE_STATS,数据库将仅仅收集索引统计信息和直方图histograms, 而表和字段的统计信息将不再被收集。

 

补充1点: SYS用户的对象不启用Online Statistics Gathering,不要使用SYS用户去测试该特性。

 

Online Statistics Gathering for Bulk-Load 的其他限制:

 

  1. It is in an Oracle-owned schema such as SYS.
  2. It is a nested table.
  3. It is an index-organized table (IOT).
  4. It is an external table.
  5. It is a global temporary table defined as ON COMMIT DELETE ROWS.
  6. It has virtual columns.
  7. It has a PUBLISH preference set to FALSE.
  8. It is partitioned, INCREMENTAL is set to true, and extended syntax is not used.

 

FROM 孟买-老托拉呱的笔记:

在Oracle Database 12c中,如下两种Bulk-Load方式下,系统将会自动收集表上的统计信息
¤ CTAS – Create Table As Select …
¤ IIS – Insert Into … Select …

说明:(1)必须是使用direct path insert到一个空表/空分区的情况下

(2)如果是空分区表,收集的是global statistics而不是partition-level statistics。

如果是插入到指定的分区/子分区(空),则收集partition-level statistics而不是global statistics。比如Insert Into sales PARTITION(sales_q1_2013) Select …
如果在插入前,分区sales_q1_2013是空的(其他分区不论是否为空),那么就会收集统计信息。如果表上启用了Incremental Statistics Maintenance属性(11gR2开始提供的特性),那么同时也会自动该分区的摘要(synopsis)信息。

(3)如果rollback,统计信息自动删除。

(4)这个特性,不收集index statistics or histograms,所以,如果需要,Oracle推荐通过DBMS_STATS.GATHER_TABLE_STATS(options => ‘GATHER AUTO’…)
来收集index statistics or histograms。

这就有点象从10g版本开始create index/rebuild index自动收集统计信息的意思了。在12c之前的版本,DBA是需要及时(数据插入之后)手工去收集Statistics,否则可能会在后面的使用中导致不正确的执行计划的出现。

 

 

 

隐藏参数_optimizer_gather_stats_on_load(enable/disable online statistics gathering,默认为TRUE)控制该Online Statistics Gathering for Bulk-Load特性是否打开,默认是打开的。

除了设置_optimizer_gather_stats_on_load=false之外还可以通过NO_GATHER_OPTIMIZER_STATISTICS(QKSFM_DBMS_STATS)的HINT来避免使用Online Statistics Gathering特性。 与之相对的是 GATHER_OPTIMIZER_STATISTICS。

 

测试1: Create table AS select 耗时上启用Online Statistics Gathering大约增加15%

 

 

SQL> create table online_gather as select rownum t1, 'maclean' t2 from dual connect by level<=900000; 

表已创建。 

已用时间:  00: 00: 01.09 

SQL> select num_rows,blocks from dba_tables where table_name='ONLINE_GATHER';

  NUM_ROWS     BLOCKS
---------- ----------
    900000       2282

已用时间:  00: 00: 00.17

SQL> alter session set "_optimizer_gather_stats_on_load"=false;

会话已更改。

已用时间:  00: 00: 00.00

SQL> create table online_gather2 as select rownum t1, 'maclean' t2 from dual connect by level<=900000; 

表已创建。 

已用时间:  00: 00: 00.93 

SQL> select num_rows,blocks from dba_tables where table_name='ONLINE_GATHER2';

  NUM_ROWS     BLOCKS
---------- ----------

已用时间:  00: 00: 00.09

 

 

 

 

2、测试 bulk load insert

 

 

conn malcean/maclean

SQL> create table online_load (t1 int, t2 varchar2(200));

表已创建。

SQL> insert into online_load select rownum t1, 'maclean' t2 from dual connect by level<=900000;

已创建 900000 行。

SQL> commit;

提交完成。

SQL> select num_rows,blocks from dba_tables where table_name='ONLINE_LOAD';

NUM_ROWS BLOCKS
---------- ----------

// 注意仅有INSERT APPEND的情况下才会触发Online Statistics Gathering

SQL> create table online_load1 (t1 int, t2 varchar2(200));

表已创建。

SQL> insert /*+ append */ into online_load1 select rownum t1, 'maclean' t2 from dual connect by level<=900000; 已创建 900000 行。 SQL> commit;

提交完成。

SQL> select num_rows,blocks from dba_tables where table_name='ONLINE_LOAD1';

  NUM_ROWS     BLOCKS
---------- ----------
    900000       2282

沪ICP备14014813号-2

沪公网安备 31010802001379号