##########################
监听检查
lsnrctl start listener
lsnrctl start listener2

启动cdb1和cdb2
export ORACLE_SID=cdb1
sqlplus '/as sysdba'
startup
exit

export ORACLE_SID=cdb2
sqlplus '/as sysdba'
startup
exit

cdb1注册到listener
cdb2注册到listener2

lsnrctl status listener    
lsnrctl status listener1
##########################

演示1. 创建PDB
连接CDB1
sqlplus /nolog
connect sys/!QAZ2wsx@localhost:1521/cdb1 as sysdba

2.检查连接环境, 这里介绍两种方法。
show con_name

select
'DB Name: ' ||Sys_Context('Userenv', 'DB_Name')||
' / CDB?: ' ||case
when Sys_Context('Userenv', 'CDB_Name') is not null then 'YES'
else 'NO'
end||
' / Auth-ID: ' ||Sys_Context('Userenv', 'Authenticated_Identity')||
' / Sessn-User: '||Sys_Context('Userenv', 'Session_User')||
' / Container: ' ||Nvl(Sys_Context('Userenv', 'Con_Name'), 'n/a')
"Who am I?"
from Dual
/
3. 检查当前cdb内有几个pdb
show pdbs  --注意pdb1 是mount状态,
create pluggable database PDB2 admin user PDB_Admin identified by "oracle";  --30 seconds
show pdbs --检查新建pdb的状态, mount状态
alter pluggable database PDB2 open;   --打开pdb2
alter session set container = PDB2;   --切换到pdb2

4. 授权sysdba给用户pdb_admin,创建用户表空间users,在pdb2内创建一用户表在users表空间内
grant sysdba to pdb_admin;
create tablespace users datafile size 10M autoextend on next 1M maxsize unlimited segment space management auto;
alter database default tablespace Users;
grant create table, unlimited tablespace to pdb_admin;

connect pdb_admin/oracle@localhost:1521/pdb2;
show con_name
create table my_tab(my_col number);
insert into my_tab values (1);
commit;

CDB内能看到这个table吗?CDB root内可以通过CDB_TALBES来查询所有容器的表。
PDB1内能看到这个table吗?pdb之间需要相互访问数据需要使用db link.
connect sys/!QAZ2wsx@localhost:1521/cdb1 as sysdba
select table_name from dba_tables where table_name='MY_TAB';  
select table_name from cdb_tables where table_name='MY_TAB';
exit
   
检查cdb1 内的数据文件
sqlplus /nolog
connect sys/!QAZ2wsx@localhost:1521/cdb1 as sysdba

COLUMN "Con_Name" FORMAT A10
COLUMN "T'space_Name" FORMAT A12
COLUMN "File_Name" FORMAT A120
SET LINESIZE 220
SET PAGES 9999
with Containers as (
select PDB_ID Con_ID, PDB_Name Con_Name from DBA_PDBs
union
select 1 Con_ID, 'CDB$ROOT' Con_Name from Dual)
select
Con_ID,
Con_Name "Con_Name",
Tablespace_Name "T'space_Name",
File_Name "File_Name"
from CDB_Data_Files inner join Containers using (Con_ID)
union
select
Con_ID,
Con_Name "Con_Name",
Tablespace_Name "T'space_Name",
File_Name "File_Name"
from CDB_Temp_Files inner join Containers using (Con_ID)
order by 1, 3
/

为什么pdb1的数据文件看不到?因为pdb1没有打开,只有打开pdb1,我们才能看到其数据字典的信息。
alter pluggable database pdb1 open;

COLUMN "Con_Name" FORMAT A10
COLUMN "T'space_Name" FORMAT A12
COLUMN "File_Name" FORMAT A120
SET LINESIZE 220
SET PAGES 9999
with Containers as (
select PDB_ID Con_ID, PDB_Name Con_Name from DBA_PDBs
union
select 1 Con_ID, 'CDB$ROOT' Con_Name from Dual)
select
Con_ID,
Con_Name "Con_Name",
Tablespace_Name "T'space_Name",
File_Name "File_Name"
from CDB_Data_Files inner join Containers using (Con_ID)
union
select
Con_ID,
Con_Name "Con_Name",
Tablespace_Name "T'space_Name",
File_Name "File_Name"
from CDB_Temp_Files inner join Containers using (Con_ID)
order by 1, 3
/
exit

##################################
演示2. 克隆PDB2 至PDB3
sqlplus /nolog
connect sys/!QAZ2wsx@localhost:1521/cdb1 as sysdba

冷克隆,所以需要将pdb2置为read only mode
alter pluggable database PDB2 open read only force;

show pdbs  --确认pdb2 为RO模式
create pluggable database PDB3 from PDB2;
alter pluggable database PDB3 open ;
show pdbs

##################
演示3. pdb的拔插操作
本实验将pdb3 从cdb1内拔出,然后插入cdb2 内。
sqlplus /nolog
connect sys/!QAZ2wsx@localhost:1521/cdb1 as sysdba

show pdbs
--unplug pdb3 
alter pluggable database PDB3 close immediate;
alter pluggable database PDB3 unplug into '/home/oracle/oradata/CDB1/pdb3.xml'; 
  
unplug 命令只是导出pdb的相关信息,pdb未被真正移除,但已经不能操作了,需要手工drop.
alter pluggable database pdb3 open;  --error, 因为pdb已经被unplugged了。

查看xml 文件内容,留意pdb3的数据文件保存在CDB1子目录下的。
!vi /home/oracle/oradata/CDB1/pdb3.xml   --xml文件存放pdb数据库的版本信息及数据文件等信息

drop pluggable database PDB3 keep datafiles;  --1s
show pdbs

#############
将pdb3 插入cdb2
sqlplus /nolog
connect sys/!QAZ2wsx@localhost:1522/cdb2 as sysdba

COLUMN "Who am I?" FORMAT A120
select
'DB Name: ' ||Sys_Context('Userenv', 'DB_Name')||
' / CDB?: ' ||case
when Sys_Context('Userenv', 'CDB_Name') is not null then 'YES'
else 'NO'
end||
' / Auth-ID: ' ||Sys_Context('Userenv', 'Authenticated_Identity')||
' / Sessn-User: '||Sys_Context('Userenv', 'Session_User')||
' / Container: ' ||Nvl(Sys_Context('Userenv', 'Con_Name'), 'n/a')
"Who am I?"
from Dual
/
show pdbs

首先检查将要插入的pdb是否和当前的cdb环境兼容,比如component或者参数设置等。
begin
if not
Sys.DBMS_PDB.CHECK_PLUG_COMPATIBILITY('/home/oracle/oradata/CDB1/pdb3.xml')
then
Raise_Application_Error(-20000, 'Incompatible');
end if;
end;
/
如果有检查报错,查询以下视图。
select * from PDB_PLUG_IN_VIOLATIONS;

create pluggable database pdb3
using '/home/oracle/oradata/CDB1/pdb3.xml'
move;   --使用move/copy/nocopy 控制数据文件存放路径。

查看pdb3 数据文件已经移到cdb2子目录下
connect sys/!QAZ2wsx@localhost:1522/pdb3 as sysdba
set pages 999
select * from v$dbfile;

##############################
演示4. 热克隆
sqlplus /nolog
connect sys/!QAZ2wsx@localhost:1521/cdb1 as sysdba

create pluggable database oe admin user soe identified by soe roles=(dba);
alter pluggable database oe open;
alter session set container = oe;
grant create session, create table to soe;
alter user soe quota unlimited on system;

connect soe/soe@localhost:1521/oe
CREATE TABLE sale_orders
(ORDER_ID number,
ORDER_DATE date,
CUSTOMER_ID number);

开启新terminal窗口,启动脚本循环往sale_orders表内插入数据。
connect soe/soe@localhost:1521/oe
select count(*) from sale_orders;

cd /home/oracle/script/
./write-load.sh

cdb2上创建db link 指向cdb1
sqlplus /nolog
connect sys/!QAZ2wsx@localhost:1522/cdb2 as sysdba
drop database link cdb1_link;
create database link cdb1_link using 'cdb1';

创建可刷新的pdb clone 
sqlplus /nolog
connect sys/!QAZ2wsx@localhost:1522/cdb2 as sysdba
create pluggable database oe_refresh from oe@cdb1_link refresh mode manual;   --13s
alter pluggable database oe_refresh open read only;     --1s

conn soe/soe@localhost:1522/oe_refresh
select count(*) from sale_orders;

对oe_refresh pdb进行刷新
conn sys/!QAZ2wsx@localhost:1522/oe_refresh as sysdba
alter pluggable database oe_refresh close;
alter session set container=oe_refresh;
alter pluggable database oe_refresh refresh;
alter pluggable database oe_refresh open read only;

conn soe/soe@localhost:1522/oe_refresh
select count(*) from sale_orders;

conn sys/!QAZ2wsx@localhost:1522/cdb2 as sysdba
alter pluggable database oe_refresh close;
drop pluggable database oe_refresh including datafiles;

###############
演示5. pdb 热迁移

conn sys/!QAZ2wsx@localhost:1522/cdb2 as sysdba;
alter system set local_listener='LISTENER_CDB1' scope=both;

conn sys/!QAZ2wsx@localhost:1521/cdb2 as sysdba;
drop database link cdb1_link;
create database link cdb1_link using 'cdb1';

show pdbs
create pluggable database oe from oe@cdb1_link relocate ;
alter pluggable database oe open;     --30s
show pdbs   --cdb2内有oe pdb了。

检查write-load脚本输出已经连接至CDB2内的oe pdb了。

conn sys/!QAZ2wsx@localhost:1521/cdb1 as sysdba;
show pdbs   --cdb1内已经没有oe pdb

Oracle 19C CDB操作课程笔记相关推荐

  1. oracle19c只使用pdb模式,oracle 19c CDB vs pdb 创建

    概念理解 CDB就是一个容器(或者说实例instance),PDB就是传统的database概念, CDB可以包含多个pdb 来自官方文档:Administrator's Guide--> Mu ...

  2. Oracle 19c OCP认证 学习笔记(82) —— 约束的DEFERRABLE, NOT DEFERRABLE, INITIALLY IMMEDIATE 和 INITIALLY DEFERRED

    一.约束语句 [ CONSTRAINT constraint_name ]{ NOT NULL |NULL |CHECK ( expression ) [ NO INHERIT ] |DEFAULT ...

  3. Oracle 19c VLDB and Partitioning Guide 第8章:Using Parallel Execution 读书笔记

    本文为Oracle 19c VLDB and Partitioning Guide第8章Using Parallel Execution的读书笔记. 并行执行是通过使用多个进程将多个 CPU 和 I/ ...

  4. Oracle 19c VLDB and Partitioning Guide 第1章:Introduction to Very Large Databases 读书笔记

    本文为Oracle 19c VLDB and Partitioning Guide第1章Introduction to Very Large Databases的读书笔记. 超大型数据库 (VLDB) ...

  5. Oracle 19c VLDB and Partitioning Guide 第2章:Partitioning Concepts 读书笔记

    本文为Oracle 19c VLDB and Partitioning Guide第2章Partitioning Concepts的读书笔记. 分区可提高各种应用程序的性能.可管理性和可用性,并有助于 ...

  6. Oracle 19c VLDB and Partitioning Guide 第5章:管理和维护基于时间的信息 读书笔记

    本文为Oracle 19c VLDB and Partitioning Guide第5章Managing and Maintaining Time-Based Information的读书笔记. Or ...

  7. Oracle 19c VLDB and Partitioning Guide 第4章:分区管理 读书笔记

    本文为Oracle 19c VLDB and Partitioning Guide第4章Partition Administration的读书笔记. 使用分区表和索引时,分区管理是一项重要任务. 本章 ...

  8. Oracle 19C优化器中自动使用了filter操作

    文章涉及问题和Oracle 19c版本及新特性并无直接关系,团队正在进行有条不紊的Oracle19c升级工作,刚好此版本遇到问题,影响大且波及范围广,故记录之,以便大家有他山石可引鉴.话不多说,看正文 ...

  9. 30分钟!一键部署Oracle 19C单机CDB+PDB

    无人值守安装Oracle 19C单机CDB+PDB,只需要30分钟?没错,通过脚本静默安装,真的只需要30分钟,包括安装补丁,建库. 脚本下载链接:SHELL脚本进行oracle数据库一键安装,实现真 ...

  10. ORACLE学习笔记-CentOS 7.5 Oracle 19C安装部署

    CentOS 7.5 Oracle 19C安装部署 一.环境检查 1.操作系统检查 2.内存检查 3.SWAP检查 4.共享内存检查 5.磁盘空间检查 二.YUM配置及RPM依赖包安装 1.YUM源搭 ...

最新文章

  1. java负数右移_收入囊中篇---Java程序基础(二)
  2. 与技术无关的书单--你可以笑着说有些是“精神鸦片”
  3. 2016-8-18晨型养成第三天
  4. Spring学习9之静态代理再理解
  5. python用字典统计出现次数_python 字典(dict)列表(list),统计重复出现字典的数量...
  6. 东大OJ-1544: GG的战争法则
  7. Go语言的变量、函数、Socks5代理服务器 1
  8. 怎么在CAD编辑工具中绘制多边形线
  9. RHCS Oracle HA for OEL5.8 KVM实践配置
  10. C语言中多维数组的内存分配和释放(malloc与free)(转)
  11. 只要是[运算] 就会提升数据类型
  12. 定义一个扁平的按钮样式
  13. 高德地图哪个语音包最好_高德语音导航怎么呼叫?高德地图语音包怎么设置
  14. 区块链大咖谈之董天一:深度理解IPFS与Filecoin应用的几个关键点
  15. python拼图_利用python制作拼图小游戏的全过程
  16. 通过SqlDbx导出*.sql,然后倒入到SQLServer2005
  17. ios 隐藏app的插件_教你如何在iPad和iPhone中隐藏APP应用 划重点了
  18. 浅析小程序云原生数据库的设计与应用
  19. 解决ModuleNotFoundError: No module named ‘celery.five‘的问题
  20. 工作第十六七周:生活这么繁琐,我们还要努力爱她

热门文章

  1. 聊一聊如何准备计算机Python二级考试
  2. 华三V5交换机ssh配置
  3. php数组倒排,js中数组倒序排列的方法
  4. 4、计算矩阵A的平方
  5. 自考《数据库系统原理》(3)之关系模式设计理论
  6. 梦工厂动画CEO:不迷信大数据,只迷信耐心与好故事
  7. 自考招生工商学院类网站织梦模板
  8. python饼图 立体_【Python基础】惊叹,Pyecharts绘制饼图原来可以如此漂亮!
  9. ddos应急处理_DDOS攻击应急响应预案
  10. iPhone手机越狱不只是为了安装盗版应用、越狱的十大好处