免费注册 查看新帖 |

ChinaUnix.net

  天发娱乐城 天发国际娱乐城 天发88娱乐城 文库
最近访问板块 发新帖
查看: 2531 | 回复: 0
打印 上一主题 下一主题

[分享] Oraclewwwhj8828com1332O4895OO数据库容器使用指南 [复制链接]

天发国际娱乐城徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-01-10 15:32 |只看该作者 |倒序浏览
本帖最后由 库萨克德 于 2019-04-18 10:18 编辑

CDB与PDB是Oracle 12C引入的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多

个可插拔数据库(PDB)。

CDB全称为ContaineDatabases,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一

或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE

12C后,实例与数据库可以是一对多的关系。

关于CDB与PDB的关系图:

一个CDB数据库容器包含了下面一些组件:

ROOT组件

ROOT又叫CDB$ROOT, 存储着ORACLE提供的元数据和Common User,元数据的一个例子是ORACLE提供的PL/SQL包的源代码,Common User 是指在每个容器中

都存在的用户。

SEED组件

Seed又叫PDB$SEED,这个是你创建PDBS数据库的模板,你不能在Seed中添加或修改一个对象。一个CDB中有且只能有一个Seed. 这个感念,个人感觉非常

类似SQL SERVER中的model数据库。

PDB

CDB中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。

这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个PDB是一个容器。每个容器在CDB中都有一个独

一无二的的ID和名称。

对于CDB,启动和关闭与之前传统的方式一样,具体语法如下:

STARTUP[NOMOUNT | MOUNT | RESTRICT | UPGRADE | FORCE | READ ONLY]
SHUTDOWN[IMMEDIATE | ABORT]
Oracle12c的安装可以参考:  拒绝手残!!! 快速部署Oracle数据库

手动创建CDB

1、 修改~/.bash_profile文件,修改ORACLE_SID名称

export ORACLE_SID=orcl
2、创建所需要目录

$ mkdir -p /data/app/oracle/oradata/orcl
$ mkdir -p /data/app/oracle/oradata/pdbseed
$ mkdir -p /data/app/oracle/admin/orcl/adump
$ mkdir -p /data/app/oracle/fast_recovery_area
3、创建初始化配置文件

$ vim $ORACLE_HOME/dbs/initcdb.ora

db_name='orcl'
memory_target=1G
processes = 150
#audit_file_dest='<ORACLE_BASE>/admin/orcl/adump'
audit_file_dest='/data/app/oracle/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/data/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/data/app/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=orcl)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
control_files = (/data/app/oracle/oradata/orcl/ora_control01.ctl, /data/app/oracle/oradata/orcl/ora_control02.ctl)
compatible ='12.2.0'
enable_pluggable_database=true
4、开始创建CDB
创建CDB等待的过程比较长

$ sqlplus / as sysdba
SQL> shutdown abort
SQL> create spfile from pfile='$ORACLE_HOME/dbs/initcdb.ora';
SQL> startup nomount

SQL> @?/rdbms/admin/catcdb.sql
执行后会提示,要输入以下信息

Enter value for 1: /data/app/oracle/product/12.2.0/db_1/rdbms/admin
Enter value for 2: /data/app/oracle/product/12.2.0/db_1/rdbms/admin/catcdb.pl
如果出现以下报错,可以使用解决方案
1) 错误-1

Can't locate util.pm in @INC (@INC contains: /data/app/oracle/product/12.2.0/db_1/rdbms/admin

/usr/local/lib64/perl5<br>/usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5

/usr/share/perl5 .) at <br>/data/app/oracle/product/12.2.0/db_1/rdbms/admin/catcdb.pl line 35.
BEGIN failed--compilation aborted at /data/app/oracle/product/12.2.0/db_1/rdbms/admin/catcdb.pl line 35.
解决方法:

$ find $ORACLE_HOME -name util.pm | wc -l
0
$ find $ORACLE_HOME -name Util.pm | wc -l
5
$ find $ORACLE_HOME -name Util.pm
/data/app/oracle/product/12.2.0/db_1/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/Util.pm
/data/app/oracle/product/12.2.0/db_1/perl/lib/5.22.0/x86_64-linux-thread-multi/List/Util.pm
/data/app/oracle/product/12.2.0/db_1/perl/lib/5.22.0/x86_64-linux-thread-multi/Scalar/Util.pm
/data/app/oracle/product/12.2.0/db_1/perl/lib/5.22.0/x86_64-linux-thread-multi/Sub/Util.pm
/data/app/oracle/product/12.2.0/db_1/perl/lib/site_perl/5.22.0/HTTP/Headers/Util.pm
手工修改catcdb.pl脚本

use Util qw(trim, splitToArray);     //util改为Util
再来一轮测试,结果发现还是会有报错,这种尝试会让你开始怀疑自己的选择到底是不是正确的方向。

如果还是没有找到,说明在当前的环境变量中没有匹配到相关的内容,我们需要直接切换到目录Hash下,然后运行脚本才可以,这个时候又出现一个错



2) 错误-2

Can'tlocate Term/ReadKey.pm in @INC (@INC contains: /data/app/oracle/product/12.2.0/db_1/rdbms/admin
/usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at
/data/app/oracle/product/12.2.0/db_1/rdbms/admin/catcdb.pl line 30.
BEGINfailed--compilation aborted at
/data/app/oracle/product/12.2.0/db_1/rdbms/admin/catcdb.pl line 30.
声明环境变量

export PATH=$ORACLE_HOME/binORACLE_HOME/OPatchORACLE_HOME/perl/binORACLE_HOME/jdk/binPATH
再次执行

SQL> @?/rdbms/admin/catcdb.sql
验证结果

SQL> SELECT name,
   DECODE (cdb,
     'YES', 'Multitenant Option enabled',
     'Regular 12c Database: ')
   "Multitenant Option",
   open_mode,
   con_id
FROM v$database;
PDB的创建与使用

1、查看当前容器

$ sqlplus / as sysdba
SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT
2、创建一个新的PDB

$ mkdir -p /data/app/oracle/oradata/pdb1

SQL> create pluggable database pdb1 admin
user pdb1 identified by pdb1
file_name_convert=('/data/app/oracle/oradata/pdbseed/',
'/data/app/oracle/oradata/pdb1/');
3、查看所有PDB

SQL> show pdbs;

    CON_ID CON_NAME           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     2 PDB$SEED           READ ONLY  NO
     3 PDB1               MOUNTED
4、启动和关闭一个创建好的PDB
1) 启动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
2) 关闭pdb

SQL> alter pluggable database pdb1 close;

Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     2 PDB$SEED           READ ONLY  NO
     3 PDB1               MOUNTED
3) 通过sqlplus使用传统的startup和shutdown命令来启动和关闭PDB

启动:
SQL> alter session set container=pdb1;

Session altered.

SQL> show pdbs;

    CON_ID CON_NAME           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     3 PDB1               MOUNTED
SQL> startup
Pluggable Database opened.
SQL> show pdbs;

    CON_ID CON_NAME           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     3 PDB1               READ WRITE NO

关闭:
SQL> shutdown immediate;
Pluggable Database closed.
SQL> show pdbs;

    CON_ID CON_NAME           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     3 PDB1               MOUNTED
5、删除一个pdb

SQL> alter pluggable database pdb2 close;
SQL> DROP PLUGGABLE DATABASE pdb2 INCLUDING DATAFILES;
6、配置监听

$ vim $ORACLE_HOME/network/admin/tnsnames.ora    //如果此文件不存在,手动创建

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = DB)(PORT = 1521))

pdb1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = DB)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb1)
    )
  )
7、测试与登陆

$ tnsping pdb1               //测试登陆
$ sqlplus pdb1/pdb1@pdb1     //登陆
数据泵导入导出PDB数据

以pdb1数据库为例

1、启动pdb1数据库

$ sqlplus / as sysdba
SQL> alter session set container=pdb1;
SQL> startup
2、创建导入数据目录和数据库映射关系

$ mkdir -p /home/oracle/dump_dir
SQL> alter session set container=pdb1;
SQL> create directory dump_dir as '/home/oracle/dump_dir';
3、 创建一个dba权限的数据泵导入导出用户

SQL> grant dba to dp identified by dp;
SQL> grant read,write on directory dump_dir to dp;
4、创建表空间

SQL> CREATE TABLESPACE "DB1" DATAFILE
'/data/app/oracle/oradata/pdb1/pdb101.dbf' SIZE 128M AUTOEXTEND
ON NEXT 128M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
5、 导出数据

$ expdp dp/dp@pdb1 directory="dump_dir" dumpfile="aa.dmp" logfile=aa.log
6、 导入数据

$ impdp dp/dp@pdb1 directory="dump_dir" dumpfile="aa.dmp" logfile=bb.log

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

基于案例的 SQL 优化实战训练营

讲师:中电福富特级专家梁敬彬,参与本次课程培训,你将收获:
1. 能编写出较为高效的 SQL;
2. 能解决70%以上的数据库常见优化问题;
3. 能得到老师提供的高效的相关工具和解决方案;
4. 能举一反三,收获不仅仅是 SQL 优化。
现在购票享受8.8折优惠!
----------------------------------------
优惠时间:2019年3月20日前

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP