本篇文章给大家带来了关于Oracle的相关知识,其中主要整理了容器数据库的安装和使用的相关问题,其中包括了Oracle容器数据库基本知识、容器数据库的安装及使用和容器数据库的创建等等内容,下面一起来看一下,希望对 ...
本篇文章给大家带来了关于Oracle的相关知识,其中主要整理了容器数据库的安装和使用的相关问题,其中包括了Oracle容器数据库基本知识、容器数据库的安装及使用和容器数据库的创建等等内容,下面一起来看一下,希望对大家有帮助。Oracle 19c的安装和使用Oracle容器数据库基本知识 ??容器数据库,又称为可插入数据库,又可以称为多租户容器数据库 容器数据库的组成2.1.1ROOT??Root容器数据库,是CDB环境中的根数据库,在根数据库中含有主数据字典视图,其中包含了与Root容器有关的元数据和CDB中所包含的所有的PDB信息。在CDB环境中被标识为CDB$ROOT,每个CDB环境中只能有一个Root容器数据库。 2.1.2CDB seed??CDB seed为PDB的种子,其中提供了数据文件,在CDB环境中被标识为PDBSEED,**是创建新的 PDB的模板**,你可以连接PDB SEED,??是创建新的PDB的模板??,你可以连接PDBSEED,但是不能执行任何事物,因为PDB$SEED是只读的,不可进行修改。 2.1.3PDBs??PDB数据库,在CDB环境中每个PDB都是独立存在的,与传统的Oracle数据库基本无差别,每个PDB拥有自己的数据文件和objects,唯一的区别在于PDB可以插入到CDB中,以及在CDB中拔出,并且在任何一个时间点之上PDB必须拔出或者插入到一个CDB中,当用户链接PDB时不会感觉到根容器和其他PDB的存在。 2.1.4Application Containers??Oracle在12cR2版本中,对容器功能进行了增强,在CDB root容器中可以还创建一个叫做Application root的容器,可在其内创建多个依赖于Application root的Application PDBs,架构图如下: 根环境的用户??在之前的版本中,单个PDB可以有多个用户,每个用户又可以有自己的表空间,上升到CDB级别,用户被分成了两类:
另外值得一提的是, 容器数据库的安装及使用安装记得之前的版本安装时的第四步要取消勾选容器数据库吗 常用命令在安装好之后,打开sqlplus,用管理员账户登录 查看当前的容器show con_name;
查看数据库是否为CDBselect name,cdb,open_mode,con_id from v$database;
查看CDB中的PDB信息show pdbs;
启动和关闭已创建好的PDB数据库先将会话切换至想用的PDB。 alter session set container = orclpdb;
alter pluggable database pdb1 open;
alter pluggable database pdb1 close;
shartup;
shutdown immediate;
CDB与PDB的切换alter session set container=ORCLPDB; --PDBalter session set container=CDB$ROOT;--CDBshow con_name --查看当前容器 通过plsql使用但是,我们日常使用时是用plsql的,这里与我们平时使用的又有一点区别。 打开PDB首先,还是用管理员账户登录(此时数据库选项里是没有我们想用的PDB的) 创建用户并授权上面说了,PDB里是没有我们所知道的Scott用户的,这里需要我们重新创建他 create user scott identified by tiger;--给用户授予权限 grant connect,resource,dba to scott; --删除用户drop user truedata scott; 创建表空间,为用户指定表空间及为用户授予权限都与以前的使用方式一样。 配置想要用plsql登录PDB,我们需要更改一个配置文件 如果连接可插拔数据库时出现: 容器数据库的创建??PDB数据库的创建可以从现存的数据库中复制数据文件,包括种子容器、可插拔数据库、non-CDB数据库,创建时可以使用CREATE PLUGGABLE、RMAN、DBCA以及EM等。 创建方式使用CREATE PLUGGABLE命令可以使用以下资源创建PDB: 如果把数据库从11g 升级到12c,或者在12c中创建的,就是NON CDB,那么这样的数据库就是普通的单实例,和12c 之前的数据库没有区别 链接: Oracle 12c系列(七)| Non-CDB转换为PDB 拔下的PDB 使用DBCA可以使用以下资源创建PDB: 使用CDB seed创建PDB
CREATE PLUGGABLE DATABASE ypdb1 ADMIN USER ypdb1 IDENTIFIED BY oracle STORAGE (MAXSIZE 2G)DEFAULT TABLESPACE ypdb1 DATAFILE '/u01/app/oracle/oradata/ora12c/ypdb1/ypdb01.dbf' SIZE 100M AUTOEXTEND ONPATH_PREFIX = '/u01/app/oracle/oradata/ora12c/ypdb1/'FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/ora12c/pdbseed', '/u01/app/oracle/oradata/ora12c/ypdb1');
sys. ora12c>show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 YPDB1 MOUNTED 克隆已经存在的PDB这种方式可以通过使用当前CDB中的其他PDB,以及复制远端CDB中的PDB,还可以复制non-CDB数据库创建成PDB。 Clone a Local PDB (说明:如果是Oracle Database 版本为12.1,那么PDB只能为READ-ONLY状态,因在12.1中undo模式,还只能选择shared undo。) sys. ora12c>show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 YPDB1 READ WRITE NOsys. ora12c> 这里使用YPDB1做为源PDB,创建的PDB为YPDB2。 COL PROPERTY_NAME FOR A30 COL PROPERTY_VALUE FOR A30SELECT property_name, property_valueFROM database_propertiesWHERE property_name='LOCAL_UNDO_ENABLED';PROPERTY_NAME PROPERTY_VALUE------------------------------ ------------------------------LOCAL_UNDO_ENABLED TRUE (2) 检查是否未archivelog模式 sys. ora12c>ARCHIVE LOG LISTDatabase log mode Archive ModeAutomatic archival Enabled Archive destination /u01/app/oracle/recovery/ora12c/arch Oldest online log sequence 21Next log sequence to archive 23Current log sequence 23sys. ora12c> (3) 创建验证数据 zhaoweiqing. ypdb1>CONN /AS SYSDBA Connected.sys. ora12c>conn zhaoweiqing/zhaoweiqing@ypdb1Connected.zhaoweiqing. ypdb1>SELECT COUNT(*) FROM t;COUNT(*)----------22198Elapsed: 00:00:00.01zhaoweiqing. ypdb1> (4) 执行CREATE PLUGGABLE DATABASE语句(这里使用sys用户连接根容器) CREATE PLUGGABLE DATABASE ypdb2 FROM ypdb1 PATH_PREFIX = '/u01/app/oracle/oradata/ora12c/ypdb2/'FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/ora12c/ypdb1/', '/u01/app/oracle/oradata/ora12c/ypdb2/')SERVICE_NAME_CONVERT = ('ypdb1t','ypdb2t'); (5) 查看创建完成的YPDB2 sys. ora12c>show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 YPDB1 READ WRITE NO 4 YPDB2 MOUNTED sys. ora12c>SELECT pdb_id, pdb_name, con_uid, status, creation_scn, con_id FROM cdb_pdbs;PDB_ID PDB_NAME CON_UID STATUS CREATION_SCN CON_ID---------- -------------------- ---------- ---------- ------------ ---------- 2 PDB$SEED 1453953285 NORMAL 213 2 3 YPDB1 2376019304 NORMAL 697945 3 4 YPDB2 3908707960 NEW 707501 4Elapsed: 00:00:00.02sys. ora12c> (6) 检查数据文件 sys. ora12c>ALTER PLUGGABLE DATABASE YPDB2 OPEN;Pluggable database altered.Elapsed: 00:00:14.02sys. ora12c>SELECT con_id, tablespace_name, file_name FROM cdb_data_files WHERE con_id=4;CON_ID TABLESP FILE_NAME------ ------- ---------------------------------------------------------4 SYSTEM /u01/app/oracle/oradata/ora12c/ypdb2/system01.dbf4 SYSAUX /u01/app/oracle/oradata/ora12c/ypdb2/sysaux01.dbf4 DEFTBS /u01/app/oracle/oradata/ora12c/ypdb2/deftbs01.dbf4 USERTBS /u01/app/oracle/oradata/ora12c/ypdb2/usertbs01.dbf4 UNDO_1 /u01/app/oracle/oradata/ora12c/ypdb2/system01_i1_undo.dbf4 YPDB1 /u01/app/oracle/oradata/ora12c/ypdb2/ypdb01.dbf6 rows selected.Elapsed: 00:00:00.01sys. ora12c> (7) 检查service_name sys. ora12c>SELECT service_id, name, network_name, enabled, pdb, con_id FROM cdb_services;SERVICE_ID NAME NETWORK_NAME ENA PDB CON_ID---------- ------------------- -------------------- --- --------- ---------- 1 SYS$BACKGROUND NO CDB$ROOT 1 2 SYS$USERS NO CDB$ROOT 1 3 ora12c.linux.com ora12c.linux.com NO CDB$ROOT 1 6 ypdb1.linux.com ypdb1.linux.com NO YPDB1 3 1 ypdb1t ypdb1t NO YPDB1 3 1 ypdb2t ypdb2t NO YPDB2 4 2 ypdb2.linux.com ypdb2.linux.com NO YPDB2 47 rows selected.Elapsed: 00:00:00.00sys. ora12c> 源PDB中的service_name已经被更改指定的service_name. (8) 检查验证数据 sys. ora12c>conn zhaoweiqing/zhaoweiqing@ypdb2Connected.zhaoweiqing. ypdb2>SELECT COUNT(*) FROM t;COUNT(*)----------22198Elapsed: 00:00:00.11zhaoweiqing. ypdb2> 克隆远程PDB
如果PDB被Clone到的CDB的字符集不是AL32UTF8,那么源与目标字符集必须兼容。 源端与目标端的字节顺序必须相同。 连接的用户在CDB中必须拥有’CREATE PLUGGABLE DATABASE’的权限。 源PDB不可以是关闭状态。 如果远端CDB为shared undo,源PDB必须为READ-ONLY状态。 如果远端CDB不是归档模式,源PDB必须为READ-ONLY状态。 这里测试将win平台ORA12CW中的PDB(ORA12CWPDB)复制到Linux的,目标PDB为PDB2。 (1) 查看源端与目标的字符集 col parameter for a30 col value for a30select * from nls_database_parameters where parameter='NLS_CHARACTERSET'or parameter='NLS_LANGUAGE' or parameter='NLS_NCHAR_CHARACTERSET';```**(2) 查看源端与目标端字节顺序** ```sqlcol platform_name for a40SELECT d.inst_id, t.platform_id, t.platform_name, t.endian_format, d.name FROM v$transportable_platform t, gv$database dWHERE t.platform_name = d.platform_name; (3) 查看源端归档模式 archive log list (4) 查看源端undo模式 SELECT property_name, property_valueFROM database_propertiesWHERE property_name='LOCAL_UNDO_ENABLED'; (5) 目标端创建dblink CREATE DATABASE LINK ora12cw CONNECT TO system IDENTIFIED BY oracle USING 'ORA12CW'; (6) 运行CREATE PLUGGABLE DATABASE语句进行复制PDB CREATE PLUGGABLE DATABASE pdb2 FROM ORA12CWPDB@ora12cwPATH_PREFIX = '/u01/app/oracle/oradata/ora12cl/pdb2/'FILE_NAME_CONVERT = ('D:\U01\APP\ORACLE\ORADATA\ORA12CW\ORA12CWPDB\', '/u01/app/oracle/oradata/ora12cl/pdb2/'); (7) 创建完成后目标端查看PDB2 sys. ora12cl>show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 4 PDB2 MOUNTED 5 PDB1 MOUNTED sys. ora12cl>SELECT pdb_id, pdb_name, con_uid, status, creation_scn, con_id FROM cdb_pdbs;PDB_ID PDB_NAME CON_UID STATUS CREATION_SCN CON_ID---------- -------------------- ---------- ---------- ------------ ---------- 2 PDB$SEED 3409233005 NORMAL 1408788 2 4 PDB2 2218727525 NEW 1824437 4 5 PDB1 1058019921 NORMAL 1535445 5Elapsed: 00:00:00.00sys. ora12cl> (8) 目标查看数据文件 sys. ora12cl>alter pluggable database pdb2 open;Pluggable database altered.Elapsed: 00:00:14.02sys. ora12cl>SELECT con_id, tablespace_name, file_name FROM cdb_data_files WHERE con_id=4;CON_ID TABLESPACE_NAME FILE_NAME------ --------------- --------------------------------------------------4 SYSTEM /u01/app/oracle/oradata/ora12cl/pdb2/SYSTEM01.DBF4 SYSAUX /u01/app/oracle/oradata/ora12cl/pdb2/SYSAUX01.DBF4 UNDOTBS1 /u01/app/oracle/oradata/ora12cl/pdb2/UNDOTBS01.DBF4 USERS /u01/app/oracle/oradata/ora12cl/pdb2/USERS01.DBF Elapsed: 00:00:00.00sys. ora12cl> 克隆远端的PDB成功。 克隆本地PDB在克隆已有的PDB或者non CDB时,我们也可以将克隆语句中加入NO DATA子句,在使用NO DATA子句时,仅仅会克隆源PDB中的模型定义,并不会克隆PDB中的数据。(Oracle数据库内自动创建的schemas下的对象会被成功克隆,而用户创建的schemas下的对象仅仅会克隆对象的定义结构)。 测试克隆本地PDB时使用no data子句 这里将WOQUPDB克隆为PDBTEST. (1)源PDB sys. woqu>show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 WOQUPDB READ WRITE NOsys. woqu>COL PROPERTY_NAME FOR A30 sys. woqu>COL PROPERTY_VALUE FOR A30 sys. woqu> (2)检查UNDO模式及归档模式 sys. woqu>SELECT property_name, property_value2 FROM database_properties3 WHERE property_name='LOCAL_UNDO_ENABLED';PROPERTY_NAME PROPERTY_VALUE------------------------------ ------------------------------LOCAL_UNDO_ENABLED TRUEElapsed: 00:00:00.04sys. woqu>sys. woqu>archive log listDatabase log mode Archive ModeAutomatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 7Next log sequence to archive 9Current log sequence 9sys. woqu> (3)创建测试数据表t,注意这里的t表位于sys用户下 05:51:10 sys. woqupdb>create table t as select * from dba_objects where rownum<=10;Table created.Elapsed: 00:00:00.1005:52:41 sys. woqupdb>select count(*) from t;COUNT(*)----------10Elapsed: 00:00:00.0105:52:50 sys. woqupdb> 表t中共有10条数据。 05:51:46 zhaoweiqing. woqupdb>create table t_tab as select * from dba_objects where rownum<=999;Table created.Elapsed: 00:00:01.8405:52:15 zhaoweiqing. woqupdb>select count(*) from t_tab;COUNT(*)----------999Elapsed: 00:00:00.0105:52:19 zhaoweiqing. woqupdb> (5)使用create pluggable database + NO DATA子句创建pdb:pdbtest sys. woqu>CREATE PLUGGABLE DATABASE pdbtest FROM woqupdb NO DATA2 PATH_PREFIX = '/u01/app/oracle/oradata/woqu/pdbtest'3 FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/woqu/woqupdb', '/u01/app/oracle/oradata/woqu/pdbtest');Pluggable database created.Elapsed: 00:00:09.35sys. woqu> (6)检查克隆完成的pdbtest sys. woqu>show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ----------- ---------- ---------- 2 PDB$SEED READ ONLY NO 3 WOQUPDB READ WRITE NO 5 PDBTEST MOUNTED sys. woqu>SELECT pdb_id, pdb_name, con_uid, status, creation_scn, con_id FROM cdb_pdbs;PDB_ID PDB_NAME CON_UID STATUS CREATION_SCN CON_ID---------- ----------- ---------- ---------- ------------ ---------- 3 WOQUPDB 1167267009 NORMAL 1443334 3 2 PDB$SEED 399989944 NORMAL 1408751 2 5 PDBTEST 3356573055 NEW 1956581 5Elapsed: 00:00:00.05sys. woqu>alter pluggable database pdbtest open;Pluggable database altered.Elapsed: 00:00:07.09sys. woqu>show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ----------- ---------- ---------- 2 PDB$SEED READ ONLY NO 3 WOQUPDB READ WRITE NO 5 PDBTEST READ WRITE NOsys. woqu>SELECT pdb_id, pdb_name, con_uid, status, creation_scn, con_id FROM cdb_pdbs;PDB_ID PDB_NAME CON_UID STATUS CREATION_SCN CON_ID---------- --------- ---------- ------ ------------ ---------- 3 WOQUPDB 1167267009 NORMAL 1443334 3 2 PDB$SEED 399989944 NORMAL 1408751 2 5 PDBTEST 3356573055 NORMAL 1956581 5Elapsed: 00:00:00.02sys. woqu> (7)查看测试数据 sys. woqu>alter session set container=pdbtest;Session altered.Elapsed: 00:00:00.07sys. woqu>show user con_idUSER is "SYS"CON_ID------------------------------5sys. woqu>select count(*) from t;COUNT(*)----------10Elapsed: 00:00:00.00sys. woqu>select count(*) from zhaoweiqing.t_tab;COUNT(*)---------- 0Elapsed: 00:00:00.02sys. woqu> 通过测试可以看到sys下的对象中的数据依然克隆成功,而自建用户下的对象中数据并没有跟着一起克隆。 |