Oracle 12c PDB浅析(r9笔记第10天)
发布日期:2021-06-30 13:32:24
浏览次数:3
分类:技术文章
本文共 6933 字,大约阅读时间需要 23 分钟。
不管怎么样,12c出来这么久,总是因为各种各样的原因没有开始学习,现在似乎还是有些晚了。总是耳闻PDB在12c是一种全新的架构模式,在各种技术聊 天也大概知道是一种可插拨的新型架构模式,但是似乎SQLServer中也有类似的架构,不管怎么样Oracle圈内还是很火,而且听说12c r2可以支持4096个pdb,这个也太大了,docker装一下试试:) 自己也在本地尝试了一下,其实中间了花了些时间,中途总是被各种事情打断,所以留下的都是一些零碎的知识片段,自己索引把环境重新删了再做几次。 在这种尝试中我试了两种学习方法,第一种是压根不看官方文档,纯是凭着感觉做,碰到问题查google,百度,metalink来做,最后也勉强出了点成 果,但是总体感觉有些问题的解决不是常规思路,月解决离本身的学习好像偏差越大。最后竟然还有改到隐含参数,我觉得对于初入门的学习来说,还是很不可取 的,所以尽管勉强出了点东西,但是我的感觉是这种学习方法不系统不全面,很容易被各种攻略来影响,还是不推荐的。 然后中间隔了一天,今天再来准备抽一个小时左右来学习一下,发现官方文档着实要详细的多,而且介绍的系统性,更全面,很多博客中的图也基本都是官网中的,所以说自己学习的时候就会方便一些,照着做出错的概率要小,不会很折腾。 不过文档我也是选看,我整理了一下我掌握的信息,做一个简单的总结。 这个图是官方的,我觉得实在弄不出比这个更好的图了,直接贴出来。这个里面的CDB就是容器,PDB就是插件数据库,hrpdb,salespdb都有对 应的PDBA来管理,综合的管理由CDB管理员来负责。Root是存储了容器的基本模板,而seed则是提供了一套模板机制。可以基于seed模板来创建 对应的PDB,我要演示的也是这个方法。 首先我们创建一个12c的数据库自带pluggable database,还是选用dbca silent方式来做,一个命令直接搞定。 这种方式和10g,11g的主要差别就是有一个创建CDB的选项。 dbca -silent -createDatabase -templateName $ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc -gdbname newtest -sid newtest -characterSet UTF8 -createAsContainerDatabase true -sysPassword oracle -systemPassword oracle Copying database files 1% complete 3% complete 11% complete 18% complete 37% complete Creating and starting Oracle instance 40% complete 45% complete 46% complete 47% complete 52% complete 57% complete 58% complete 59% complete 62% complete Completing Database Creation 66% complete 70% complete 74% complete 85% complete 96% complete 100% complete 创建完成之后我们就开始来了解一下CDB,PDB的一些简单操作。 首先来个二连发,看看容器id和容器name sqlplus / as sysdba SQL> show con_id con_name CON_ID ------------------------------ 1 CON_NAME ------------------------------ CDB$ROOT SQL> select file_name from dba_data_files; FILE_NAME -------------------------------------------------------------------------------- /U01/app/oracle/oradata/newtest/system01.dbf /U01/app/oracle/oradata/newtest/sysaux01.dbf /U01/app/oracle/oradata/newtest/undotbs01.dbf /U01/app/oracle/oradata/newtest/users01.dbf 切换到seed,查看容器的id和name SQL> alter session set container=pdb$seed; Session altered. SQL> show con_id con_name CON_ID ------------------------------ 2 CON_NAME ------------------------------ PDB$SEED 查看数据文件,这个时候可以看出其实root和seed都会有独立的system表空间。 SQL> select file_name from dba_data_files; FILE_NAME -------------------------------------------------------------------------------- /U01/app/oracle/oradata/newtest/pdbseed/system01.dbf /U01/app/oracle/oradata/newtest/pdbseed/sysaux01.dbf 当然想得到更清晰的pdb概览信息,可以使用show pdbs SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 我们再用sysdba登录,如果存在多个pdb,show pdbs显示的结果会更多。目前还没有创建PDB,只有seed一个 SQL> conn / as sysdba Connected. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 我们来创建一个新的PDB,使用基于seed来创建的方式。 默认创建PDB的时候,如果不指定文件的映射关系,会有下面的问题,我们可以省事先用OMF来做。 SQL> CREATE PLUGGABLE DATABASE pdb1 ADMIN USER pdb1admin IDENTIFIED BY oracle; CREATE PLUGGABLE DATABASE pdb1 ADMIN USER pdb1admin IDENTIFIED BY oracle * ERROR at line 1: ORA-65016: FILE_NAME_CONVERT must be specified SQL>alter system set db_create_file_dest='/U01/app/oracle/oradata/newtest'; System altered. SQL> CREATE PLUGGABLE DATABASE pdb1 ADMIN USER pdb1admin IDENTIFIED BY oracle; Pluggable database created. 启动一下新的pdb SQL> alter pluggable database pdb1 open; Pluggable database altered. 这个时候再次查看就是两条记录了。 SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PDB1 READ WRITE NO 如果查看更多的角色,可以发现其实DBA相关的角色新增了不少,其中就有PDB_DBA这么一个角色。 SQL> SELECT ROLE FROM DBA_ROLES WHERE ROLE LIKE '%DBA%'; ROLE ------------------------------ DBA CDB_DBA PDB_DBA XDBADMIN OLAP_DBA LBAC_DBA 6 rows selected. 1* ALTER SESSION SET CONTAINER=PDB$SEED SQL> SELECT ROLE FROM DBA_ROLES WHERE ROLE LIKE '%DBA'; ROLE ------------------------------ DBA CDB_DBA PDB_DBA OLAP_DBA LBAC_DBA 创建了之后,我们来看看怎么删除PDB 删除pdb SQL> alter session set container=pdb1; Session altered. SQL> select file_name from dba_data_files; FILE_NAME -------------------------------------------------------------------------------- /U01/app/oracle/oradata/newtest/NEWTEST/23CD9A96BE236CE4E0532F857F0A62CC/datafil e/o1_mf_system_c3pwol80_.dbf /U01/app/oracle/oradata/newtest/NEWTEST/23CD9A96BE236CE4E0532F857F0A62CC/datafil e/o1_mf_sysaux_c3pwol8c_.dbf 开始删除。 SQL> drop pluggable database pdb1 including datafiles; drop pluggable database pdb1 including datafiles * ERROR at line 1: ORA-65040: operation not allowed from within a pluggable database 不能在当前的用户下删除,现在也没有CDB管理员,就用sysdba来删除。 SQL> conn / as sysdba Connected. SQL> drop pluggable database pdb1 including datafiles; drop pluggable database pdb1 including datafiles * ERROR at line 1: ORA-65025: Pluggable database PDB1 is not closed on all instances. 想要删除先得close SQL> alter pluggable database pdb1 close; Pluggable database altered. close之后就可以放心删除了 SQL> drop pluggable database pdb1 including datafiles; Pluggable database dropped. 我们现在来看看CDB的管理员怎么创建 SQL> create user c##cdbadmin identified by oracle default tablespace users temporary tablespace temp; User created. 赋予DBA权限。 SQL> grant dba to c##cdbadmin; Grant succeeded. 这个时候尝试连接就可以了,当然CDB的管理员名称就是c##开头,就是这么规定。 SQL> conn c##cdbadmin/oracle Connected. SQL> show pdbs SP2-0382: The SHOW PDBS command is not available 再次创建PDB,可能有朋友想怎么又开始说PDB创建了,卖个关子,因为有个问题还是值得一说的。 SQL> CREATE PLUGGABLE DATABASE pdb1 ADMIN USER pdb1admin IDENTIFIED BY oracle; Pluggable database created. SQL>conn / as sysba SQL> alter session set container=pdb1; Session altered. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 3 PDB1 MOUNTED 来换个写法启动一下,这个时候就有问题了,刚刚还是可以的,怎么现在修不行了,和语法没关系。 SQL> startup Warning: PDB altered with errors. Pluggable Database opened. 但是查看PDB的状态是没有问题的。 SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 3 PDB1 READ WRITE YES SQL> conn / as sysdba Connected. 可以通过下面的方式来分析错误。 SQL> select message,time from pdb_plug_in_violations; MESSAGE -------------------------------------------------------------------------------- TIME --------------------------------------------------------------------------- Sync PDB failed with ORA-959 during ' create user c##cdbadmin identified by * d efault tablespace users temporary tablespace temp container = all' 05-NOV-15 11.30.37.118745 PM 如果对于ora-959还有疑问,就使用oerr来看一下 SQL> !oerr ora 00959 00959, 00000, "tablespace '%s' does not exist" // *Cause: // *Action: 这样问题就一目了然了。因为目前没有uers的表空间 alter session set container=pdb1; 创建一个即可。 SQL> create tablespace users datafile '/U01/app/oracle/oradata/newtest/NEWTEST/23CDBE4149E16F08E0532F857F0A58E3/users01.dbf' size 20M; Tablespace created. 再次shutdown和startup就没有任何问题了。 SQL> shutdown immediate Pluggable Database closed. SQL> startup Pluggable Database opened. 这些都是PDB学习的开始,也希望继续总结,把这些地方要不断练习,要做数据迁移的好手。
转载地址:https://jeanron100.blog.csdn.net/article/details/102507227 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年05月04日 02时44分56秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
eclipse C/C++开发环境配置全过程
2019-05-01
程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
2019-05-01
计算机科学中最重要的32个算法
2019-05-01
Linux的历史、linux当前市场情况及Linux目录结构
2019-05-01
Linux 开发环境工具 下载网址大全
2019-05-01
x86机器(VMware安装Linux系统)启动日志、日志分析、故障分析
2019-05-01
LINUX 常见问题处理
2019-05-01
Linux 下通过脚本实现远程自动备份
2019-05-01
SpringOne会前访谈:Josh Long谈Spring发展
2019-05-01
信息技术领域会议(技术领域和非技术领域)
2019-05-01
影响计算机算法世界的十位大师
2019-05-01
vi/vim 基本使用方法
2019-05-01
linux gcc编译C程序 分享
2019-05-01
用 GDB 调试程序
2019-05-01
Java 6 JVM参数选项大全(中文版)
2019-05-01
Linux 2.6.36内核优化指南
2019-05-01
如何认知(考察)面试者?
2019-05-01
C语言
2019-05-01
计算机语言
2019-05-01