Oracle Multitenant Option - 12c Frequently Asked Questions (文档 ID 1511619.1)译文

适用于:
企业版数据库——版本12.1.0.1(12.1)
本文档中的知识对所有平台均适用。
文档目的
文档描写了插接式数据库的许多方面和用法,以更好的理解该产品,同时,该文档也可做为一个快速参考手册。
问答
12c多租户架构中的CDB/PDB概念知识。
多租户架构中的可插接数据库(PDB)是什么意思?
可插接数据库(PDB)是Oracle数据库12c(12.1)中的新特性。可以在一个数据库内部拥有多个可插接数据库。可插接数据库是完全向后兼容的。
为什么要使用多租户选件?
是为了实现以下数据库整合目标:
	降低操作管理的总成本:
	--管理成本
	--数据中心成本
	--存储成本
	--意外事故成本
	提升性能:
	--资源利用
	--可管理性
	--集成
	--服务管理
	不需要更改应用程序
	不会降低性能
	必须在应用程序之间提供资源管理和隔离
	简化数据库升级和打补丁
从多租户选件中还能获得哪些益处?
多租户可插接数据库的益处有:
	能够快速配置一个新的数据库或者针对现存数据库的拷贝
	通过拔插功能,可以实现现存数据库到新平台的快速重部署
针对许多数据库,可以快速打补丁或者升级数据库版本,且这样做的成本只有一次
可以将PDB拔下打包或者升级,然后可以将它插到一个更新版本的不同的CDB中。
一台机器中以PDB的方式可以较单数据库运行更多的数据库实例
从Oracle提供的系统管理员的职责中分离应用程序管理员的职责
从现有的数据库版本升级到12c多租户数据库有多简单呢?
	迁移到12c可插接数据库是很简单的。你可以在一下方案中选择一个最适合你的:
	方法1:
		升级现低版本数据库到12.1
		将数据库插入后升级成CDB
	方法2:
		给需要升级的每个数据库提供一个空的PDB
		用数据泵或者ogg将数据库迁移到PDB
多租户架构中,现阶段不支持哪些数据库特性?
当前在CDB中不支持的数据库特性如下:
	一致性查询通知
	闪回数据归档
	热图
	自动数据优化
如果必须使用以上的特性,那么需要创建一个非CDB。
多租户CDB/PDB的基本操作
如何知晓数据库是否为多租户数据库?
使用如下语句查询:
SQL> select NAME, DECODE(CDB, 'YES', 'Multitenant Option enabled', 'Regular 12c Database: ') "Multitenant Option ?" , OPEN_MODE, CON_ID from V$DATABASE;
如何确认在CDB中有哪些PDB呢?
SQL>  select CON_ID, NAME, OPEN_MODE from V$PDBS;
如何连接到一个特定的PDB,如:PDB6?
可以使用如下命令从其他PDB或者root容器切换到PDB6:
SQL> alter session set container = pdb6;
也可以使用如下方法使用SQL*PLUS的connect命令连接到PDB:
使用快速连接
CONNECT username/[email protected][:port][/service_name][:server][/instance_name]
如果从OS:
$ sqlplus hpal/[email protected]//hpal-node1:1521/pdb2
OR
$ sqlplus hpal/[email protected]//localhost:1521/pdb2
OR
$ sqlplus hpal/[email protected]//localhost/pdb2
查看当前连接PDB:
show con_name
使用服务名连接
例:sqlplus hpal/[email protected]
如何切换到主容器数据库?
SQL> ALTER SESSION SET CONTAINER = CDB$ROOT;
如何确认当前连接的PDB或者CDB?
SQL> show con_name
SQL>  select sys_context ( 'Userenv', 'Con_Name') "Container DB" from dual;
如何启动一个PDB?
如果当前连接PDB:
SQL> alter pluggable database open;
如果当前连接root:
QL> alter pluggable database pdb6 open;
如何关闭PDB?
如果当前连接是PDB:
SQL> alter pluggable database close;
如果当前连接是root:
SQL> alter pluggable database pdb6 close;
容器数据库如何启停呢?
像非CDB那样使用startup/shutdown启停CDB:
如果CBD关闭了,那么无法访问PDB。
在CDB中,root和所有的PDB共享一个单实例,或者,当使用RAC的时候,共享多个并发数据库实例。启动和关闭整个CDB,而不是单一的PDB。然而,当CDB打开,可以通过ALTER PLUGGABLE DATABASE命令改变某一个PDB的打开状态。
哪些参数是可以在PDB级别改变的呢?
select NAME, ISPDB_MODIFIABLE from V$PARAMETER;
CDB中有哪些普通用户呢?
SQL> select distinct USERNAME from CDB_USERS where common = 'YES';
如何创建普通用户?
SQL> create user c##db_dba1 identified by manager1 container=all;
如何创建本地用户?
SQL> create user pdb6_dba1 identified by manager1 container=current;
多租户架构
容器ID=0和1有什么区别呢?
CON_ID “0“意味着数据不属于任何一个容器,而是CDB整体的。比如:从V$DATABASE返回的数据属于CDB但不适于任一特定的容器,所以CON_ID设为”0“。一个CONTAINER_DATA对象能够返回属于不同容器(包括CON_ID==1的root)或者属于CDB的数据,属于CDB的行的CON_ID会被设置为0.
容器数据对象中不同CONN_ID的不同值的含义:
0=数据属于整个CDB
1=数据属于root
2=数据属于seed
3-254=数据属于PDB,每个PDB有其自己的容器ID。
有与PDB关联的后台进程么?如:PMON,SMON等
没有。只有一组root和所有PDB共享的后台进程。
每个PDB要有单独的控制文件么?
不。整个CDB只有一个单独的redo log和控制文件。
每个PDB要有单独的日志文件么?
不。整个CDB只有一个单独的redo log和控制文件。
可以通过PDB的PDB basis监控PDB上SGA的使用么?
所有PDB是共享一个SGA的。然而,可以通过root或者PDB监控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的PDB basis监控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表空间么?
单实例CDB中只有一个在用的undo表空间。RAC CDB中,每个实例有一个在用undo表空间。只有一个具有适当权限且当前连接容器是root的普通用户可以创建undo表空间。
每个PDB都需要单独的system表空间么?
root和每个PDB都有一个system表空间。
每个PDB都需要单独的sysaux表空间吗?
root和每个PDB都有一个sysaux表空间。
每个PDB都需要有单独的临时表空间吗?
对于整个CDB,只有一个默认的临时表空间。然而,可以为每个PDB创建另外的临时表空间。对于单实例CDB,只需要一个在用的临时表空间;对于RAC CDB,每个实例需要一个在用临时表空间。
能够为root和每个PDB指定不同的默认表空间么?
当然可以。
root和PDB的物理数据文件都是分开的么?
数据文件对于每个PDB,seed和root都是分开的。
那么在CBD中,用户数据存储在哪里呢?
CDB中,大部分用户数据存在PDB中。root不存储或者存储少量用户数据。
可插接数据库支持分离的字符集么?
CDB使用一个字符集。CDB中所有的PDB使用与CDB相同字符集。
Oracle建议:
	对于所有新的部署而且如果所有的PDB为空,那么Oracle强烈建议CDB数据库字符集使用AL32UTF8,CDB国家字符集使用AL16UTF8.
	Oracle强烈建议,合并之前根据需求,将现有数据库转换为一个或多个AL32UTF8字符集的CDB。可以使用数据库Unicode转换助手将一个非CDB转为AL32UTF8。但是在创建以后,就不能使用数据库转换助手转换CDB字符集。
	如果在合并数据库之前不能转换字符集,那么需要使用插件兼容的数据库字符集分组,然后将每个组使用适当的超集插接到不同的CDB。
参考文档:
https://support.oracle.com/epmos/faces/Oracle%20Database%20Globalization%20Support%20Guide,%2012c%20Release%201%20(12.1)
在可插接数据库环境中,如何配置网络文件?
CDB有一个唯一的listener.ora,tnsnames.ora,sqlnet.ora文件,CDB中所有的PDB共用这些文件。
CDB/PDB高级操作
如何安装设置可插接数据库?
使用runInstaller安装数据库软件
使用dbca创建数据库。在一个操作中可以创建多个PDB。
DBCA在创建CDB的时候允许指定PDB的个数,可以使用DBCA从CDB拔插PDB。
什么操作作为实体作用在PDB上?
这些操作:
创建PDB(全新的,现存PDB的拷贝,插入未接入的PDB)
拔出PDB
删除PDB
设置PDB的Open_Mode
如何创建一个可拔插数据库?
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');
如何彻底删除一个PDB?
drop pluggable database x
including datafiles;
使用PL/SQL管理PDB的配置有多简单?
例:
OMF:
declare
t0 integer not null := -1;
procedure Show_Time(What in varchar2) is
t varchar2(10);
begin
t := Lpad((DBMS_Utility.Get_Time() - t0), 5);
DBMS_Output.Put_Line('create PDB:'||t||' centiseconds');
end Show_Time;
begin
t0 := DBMS_Utility.Get_Time();
execute immediate '
create pluggable database x
admin user a identified by p
';
Show_Time('create PDB:');
t0 := DBMS_Utility.Get_Time();
execute immediate '
drop pluggable database x
including datafiles
';
Show_Time('drop PDB: ');
end;
如何克隆PDB?
被克隆PDB必须以read only模式打开。
OMF:
create pluggable database x2
from x;
如何拔出一个PDB?
alter pluggable database x unplug into '/some_directory/x_description.xml' ;
语句中的into后面必须跟描述PDB的全路径的xml文件。
可扩展性&RAC
如何添加或者更改用户管理的服务?
rvctl add service … –pdb <pdb_name>
srvctl将会在有服务启动的所有实例上自动打开PDB。
如果将<pdb_name>设置为‘’,也就意味着将此服务属性值设置为空,那么这个服务就只能连接到root
如何查看有哪些服务绑定到了可插接数据库上?
SQL> column NAME format a30
SQL> select PDB, INST_ID, NAME from gv$services order by 1;
诊断有关
如何查找PDB的告警日志?
所有PDB的告警信息都放到同一个告警日志中。
容器数据库的信息可以在xml格式中的Diag Alert和文本格式中的Diag Trace找到。
也可通过查看动态性能视图v$diag_info查看明细信息。
如何查看与PDB相关的跟踪文件?
PDB产生的所有跟踪文件当前都可以在容器数据库的Diag Trace发现。
可以通过查看动态性能视图v$diag_info查看明细信息。
其他
如果PDB中,有用户定义的,或者普通用户创建的模式对象,在拔出然后插到另一个CDB中,且原有的普通用户在这个新的CDB中不存在,那么原来的模式对象怎么办?他们会属于哪个用户呢?PDB中,原来被授予对这些模式对象拥有权限的其他用户,还依然拥有那些权限吗?
如果在CDB中插入一个含有普通用户的PDB,会发生:
PDB中的普通用户以前被授予的一般性权限(包括SET CONTAINER权限)将被取消。
如果CDB中有与新插入的PDB相同的普通用户名,那么他们将会合并。且用户密码以CDB的为准。否则,新插入的PDB中的用户将被锁定。这种情况下,你可以:
	让它保持锁定,使用该模式的对象。
	使用数据泵将这些对象迁移到另一个模式中,然后将锁定的用户账号删掉。
	关闭PDB,连接到root,然后创建一个与锁定账号相同名称的用户。当重新打开PDB,数据库会处理锁定用户与新建用户之间的权限差异。之后,就可以解锁PDB中的锁定用户。该用户以前有的权限和角色将保持不变。
在标准版本中,多租户选件可用吗?
可用,但是每个CDB将只能创建一个PDB。
事务可以跨PBD么?
不可以。虽然在一个PDB上开始一个事务之后可以使用alter session set container,但是只可以在第二个PDB使用select语句。事务是保留的,可以切换回原来的PDB执行提交或者回滚。
每个容器里面的CDB_和V$视图中都存储什么数据?
CDB_视图是容器数据对象。当一个用户连接到root然后查询一个CDB_视图,查询结果取决于该视图对该用户设置的CONTAINER_DATA值。CONTAINER_DATA的SQL ALTER USER语句用来设置和修改用户的CONTAINER_DATA值。
多租户CDB的root下,CDB_视图可以用来查询root和PDB中的表、表空间、用户、权限、参数等信息。
不管CDB_视图收集的谁的信息,CDB_视图属于SYS用户。默认情况下,一个用户连接到root后只能看到属于root的信息。
每个PDB可以设置自己的时区么?
可以。
每个PDB可以设置自己的NLS参数么?
可以。
如何监控CDB/PDB中每个容器/数据库的undo使用?
select NAME,MAX(TUNED_UNDORETENTION), MAX(MAXQUERYLEN), MAX(NOSPACEERRCNT), MAX(EXPSTEALCNT)
from V$CONTAINERS c , V$UNDOSTAT u
where c.CON_ID=u.CON_ID
group by NAME;

select NAME,SNAP_ID,UNDOTSN,UNDOBLKS,TXNCOUNT,MAXQUERYLEN,MAXQUERYSQLID
from V$CONTAINERS c , DBA_HIST_UNDOSTAT u
where c.CON_ID=u.CON_ID
and u.CON_DBID=c.DBID
order by NAME;
多租户架构与基于模式有什么区别?
用户名冲突会组织基于模式的整合。
基于模式的整合安全性不高。
per-application,back-end,point-in-time恢复很难
很难协调应用和back-ends之间的资源分配。
为单个应用和back-end打补丁是做不到的。
对单个应用和back-end的克隆是很难的。

时间: 2024-10-06 11:57:06

Oracle Multitenant Option - 12c Frequently Asked Questions (文档 ID 1511619.1)译文的相关文章

Oracle Grid Infrastructure: Understanding Split-Brain Node Eviction (文档 ID 1546004.1)

In this Document   Purpose   Scope   Details   What does "split brain" mean?   Why is this a problem?   How does the clusterware resolve a "split brain" situation?   Identifying a split-brain eviction   Finding the cohort   Understandi

Oracle Database Release Update Introduction and FAQ (文档 ID 2285040.1)

Overview Beginning in July 2017, Oracle has transitioned to a more flexible and responsive strategy for the database software release process.  These changes only affect Database and Grid Infrastructure release 12.2 or later.  The primary goals of th

How to Analyze Problems Related to Internal Errors (ORA-600) and Core Dumps (ORA-7445) using My Oracle Support (文档 ID 260459.1)

Oracle Database - Enterprise Edition - Version 8.1.7.4 and later Information in this document applies to any platform. **Checked for relevance 06-Apr-2010 **Checked for relevance 17-Apr-2013 *** Checked for relevance on 16-Nov-2011 *** Purpose 1.1 Ab

Procwatcher: Script to Monitor and Examine Oracle DB and Clusterware Processes (文档 ID 459694.1)

Applies to: Oracle Database - Enterprise Edition - Version 10.2.0.2 to 12.1.0.1 [Release 10.2 to 12.1] Linux x86 HP-UX PA-RISC (64-bit) IBM AIX on POWER Systems (64-bit) Oracle Solaris on SPARC (64-bit) HP-UX Itanium Linux x86-64 Oracle Server Enterp

Oracle 11.2.0.4 PSU实施文档

1. 本次服务详细过程 1.1 背景概述 升级数据库PUS,数据库环境,操作系统版本:RedHat5.8 x64,数据库版本Oracle 11.2.0.4 x64 RAC Grid: 11.2.0.4,Oracle database: 11.2.0.4 1.2 安装前准备 -rw-r--r-- 1 oracle oinstall  93376160 Mar 25 11:43 p21948347_112040_Linux-x86-64.zip -rw-r--r-- 1 oracle oinstal

Oracle官网JDK的API离线文档下载方法

最近在学习JAVA开发,使用频率最高的工具莫过于JAVA API,当我们身边没有可连接的网络,而又急需API文档时候,很明显我们需要在我们的电脑存储一份离线文档.下面是去Oracle官网下载API Documentation的步骤: 0.在地址栏输入http://www.oracle.com/index.html 进入Oracle官网,如下图: 1.把鼠标移到Downloads那里,不要点它哦!会看到展开一系列Oracle的产品下载,注意到第一列有个叫做“Popular Downloads” 红

Rolling Cursor Invalidations with DBMS_STATS.AUTO_INVALIDATE (文档 ID 557661.1)

  Rolling Cursor Invalidations with DBMS_STATS.AUTO_INVALIDATE (文档 ID 557661.1) 转到底部 In this Document   Purpose   Scope   Details   Cursor Invalidations on Gathering Statistics prior to Oracle10g   Cursor Invalidations with Oracle10g and AUTO_INVALID

Introduction to 600/7445 Internal Error Analysis (文档 ID 390293.1)

In this Document   Purpose   Troubleshooting Steps   References Applies to: Oracle Database - Enterprise Edition - Version 8.1.7.4 to 11.2.0.3 [Release 8.1.7 to 11.2] Information in this document applies to any platform. ***Checked for relevance on 2

Master Note for Diagnosing ORA-7445 and Related Core Dumps (文档 ID 1092855.1)

In this Document   Details   Actions   Concepts/Definitions   Diagnosing (starting point isNote 7445.1)   Additional Resources   Community:Incident (600-7445) Analysis and Other Diagnostics   References Applies to: Oracle Database - Enterprise Editio