Oracle 12c DBCA浅析(r12笔记第48天)

   我们知道在11g的环境中我们可以通过一些分析来得到DBCA的一些后台处理工作,有一点需要说明的是,如果一个12c的单实例数据库需要转换为12c的容器数据库,你去查看官方文档,会发现这是一个空白,不是做不了,而是里面有一些地方会干扰到你。

  所以在11g手工探究脚本过程的基础上,12c的部分你需要再进一步。常规来说,我们可以通过如下的命令得到一个12c的数据库创建的脚本。

dbca -silent  -templateName
$ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc -gdbname
testdb1 -sid testdb1 -characterSet ZHS16GBK -sysPassword oracle
-systemPassword oracle -createAsContainerDatabase true -generateScripts这个过程会创建一系列的脚本。

我们分为几个步骤来说。

初始化非容器数据库

假设我们创建的数据库为dbcadb。

我们可以通过下面的步骤来初始化默认的数据库,因为rman里面是seeddata,我们后期可以修改dbname为dbcadb

$ vi initseeddata.ora
db_name=seeddata
control_files=/U01/app/oracle/oradata/dbcadb/control01.ctl
sga_target=800M
enable_pluggable_database=true我们切换到下面的目录,就是dbca的大本营。
$ cd $ORACLE_HOME/assistants/dbca/templates/
参数文件解决了,控制文件怎么办呢,dbca的目录下是有一个.ctl文件的,直接拿来就可以用。

$ cp Seed_Database.ctl  $ORACLE_BASE/oradata/dbcadb/control01.ctl下面的这一步很关键,能够正常启动,能够识别容器的参数。

SQL> alter database mount;
Database altered.修改redo,默认的路径是不可用的,我们修改一下。

SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/ade/b/2717506464/oracle/oradata/seeddata/redo01.log
/ade/b/2717506464/oracle/oradata/seeddata/redo02.log
/ade/b/2717506464/oracle/oradata/seeddata/redo03.log修改为自己设定的路径即可。

SQL> alter database rename file
'/ade/b/2717506464/oracle/oradata/seeddata/redo01.log' to
'/U01/app/oracle/oradata/dbcadb/redo01.log';
SQL>alter
database rename file
'/ade/b/2717506464/oracle/oradata/seeddata/redo02.log' to
'/U01/app/oracle/oradata/dbcadb/redo02.log';
SQL>alter database rename
file '/ade/b/2717506464/oracle/oradata/seeddata/redo03.log' to
'/U01/app/oracle/oradata/dbcadb/redo03.log';数据文件怎么办呢。我们需要从备份中还原恢复。
$ rman target /
RMAN> catalog start with '/U01/app/oracle/product/12.2/assistants/dbca/templates/Seed_Database.dfb';
using target database control file instead of recovery catalog
searching for all files that match the pattern /U01/app/oracle/product/12.2/assistants/dbca/templates/Seed_Database.dfb

识别出这个备份之后我们用下面的命令来做还原和恢复。
run{
set newname for datafile 1 to '/U01/app/oracle/oradata/dbcadb/system01.dbf';
set newname for datafile 3 to '/U01/app/oracle/oradata/dbcadb/sysaux01.dbf';
set newname for datafile 4 to '/U01/app/oracle/oradata/dbcadb/undotbs01.dbf';
set newname for datafile 7 to '/U01/app/oracle/oradata/dbcadb/users01.dbf';
restore database;
switch datafile all;
recover database;
}整个过程最后会以一个基于SCN的不完全恢复结束。
starting media recovery
RMAN-08187: warning: media recovery until SCN 1408557 complete
Finished recover at 2017-04-23 18:43:59这样一个数据库open以后就是可用的了。

SQL> alter database open resetlogs;
Database altered.不过需要注意的是这个时候虽然是容器数据库,但是没有任何容器的配置,比如seed db,show pdbs没有任何输出。

SQL> select cdb from v$database;
CDB
------
YES
SQL> show pdbs;
SQL>然后我们来处理临时文件。

SQL> select file_name from dba_temp_files;
select file_name from dba_temp_files
                      *
ERROR at line 1:
ORA-01157: cannot identify/lock data file 201 - see DBWR trace file
ORA-01110: data file 201:
'/ade/b/2717506464/oracle/oradata/seeddata/temp01.dbf'我们修复一下。
SQL> alter tablespace temp add tempfile '/U01/app/oracle/oradata/dbcadb/temp01.dbf' size 100M;
SQL> alter tablespace temp drop tempfile '/ade/b/2717506464/oracle/oradata/seeddata/temp01.dbf';

修改db name

前面的过程完成之后,我们接下来需要做的就是修改db name

startup mount
$ nid target=sys/oracle dbname=dbcadb。。。
日志输出若干行之后,就成功修改了。

Succesfully changed database name and ID.
DBNEWID - Completed succesfully.我们修改参数文件。
$ vi initdbcadb.ora
db_name=dbcadb
control_files=/U01/app/oracle/oradata/dbcadb/control01.ctl
sga_target=800M
enable_pluggable_database=true重新设置 ORACLE_SID之后,这个初始化就告一段落。

$ export ORACLE_SID=dbcadb
startup nomount
alter database mount;
alter database open resetlogs;

初始化容器设置

容器的初始化比较特别,可以参考下面的步骤。
mkdir -p /U01/app/oracle/oradata/dbcadb/pdbseed
alter system  set "_catalog_foreign_restore"=TRUE;
alter system  set "_restore_create_directory"=TRUE;我们使用RMAN来做还原。
rman target /
run
{
set command id  to 'PDB$SEED';
RESTORE
FOREIGN DATAFILE  2 FORMAT
'/U01/app/oracle/oradata/dbcadb/pdbseed/system01.dbf',4 FORMAT
'/U01/app/oracle/oradata/dbcadb/pdbseed/sysaux01.dbf',9 FORMAT
'/U01/app/oracle/oradata/dbcadb/pdbseed/undotbs01.dbf' FROM BACKUPSET 
'/U01/app/oracle/product/12.2/assistants/dbca/templates/pdbseed.dfb' ;
}上面的脚本很有特点。需要好好琢磨下,重置设置。
alter system  set "_catalog_foreign_restore"=FALSE;
alter system  set "_restore_create_directory"=FALSE;
alter session set "_oracle_script"=TRUE;接下来是重头戏。创建PDB SEED
CREATE PLUGGABLE DATABASE PDB$SEED AS CLONE  USING
'/U01/app/oracle/product/12.2/assistants/dbca/templates/pdbseed.xml' 
source_file_name_convert =
('/ade/b/2717506464/oracle/oradata/seeddata/pdbseed/system01.dbf','/U01/app/oracle/oradata/dbcadb/pdbseed/system01.dbf',
'/ade/b/2717506464/oracle/oradata/seeddata/pdbseed/sysaux01.dbf','/U01/app/oracle/oradata/dbcadb/pdbseed/sysaux01.dbf',
'/ade/b/2717506464/oracle/oradata/seeddata/pdbseed/undotbs01.dbf','/U01/app/oracle/oradata/dbcadb/pdbseed/undotbs01.dbf',
'/ade/b/2717506464/oracle/oradata/seeddata/pdbseed/temp01.dbf','/U01/app/oracle/oradata/dbcadb/pdbseed/temp012017-04-27_14-12-21-103-PM.dbf')
NOCOPY  STORAGE ( MAXSIZE UNLIMITED MAX_SHARED_TEMP_SIZE UNLIMITED);这个过程是核心的部分。
这个时候查看pdb,seed是mount状态,我们可以重置一下,就需要启动,然后置为read only

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       MOUNTED重置seed pdb
SQL> alter pluggable database pdb$seed open;
Pluggable database altered.
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ WRITE NO
SQL> alter session set container=pdb$seed;
Session altered.
SQL> shutdown immediate
Pluggable Database closed.
SQL> alter database open read only;
Database altered.                
startup简单验证一下,创建一个PDB.
SQL> CREATE PLUGGABLE DATABASE test_pdb ADMIN USER pdb_mgr IDENTIFIED
BY oracle
file_name_convert=('/U01/app/oracle/oradata/dbcadb','/U01/app/oracle/oradata/dbcadb/test_pdb');

输出就是我们预期的了。

SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TEST_PDB                       MOUNTED

时间: 2024-09-20 14:43:31

Oracle 12c DBCA浅析(r12笔记第48天)的相关文章

Oracle 12c PDB浅析(二)

之前写了第一篇Oracle 12c PDB浅析 http://blog.itpub.net/23718752/viewspace-1823792/?          在上次的基础上继续来学习学习.     首先关于多租户的架构设计来说,就好比在一座已经几十年的老房子上动地基一般,这个变化着实够大,如此重大的变化Oracle不遗余力的想引入进来,肯定有更深层次的原因,当然关于这种设计在SQLServer中确实已经早有实现,在Oracle中却被大家相传为一种略带神奇的架构设计.不过话说回来,这个和

Oracle 12c PDB浅析

不管怎么样,12c出来这么久,总是因为各种各样的原因没有开始学习,现在似乎还是有些晚了.总是耳闻PDB在12c是一种全新的架构模式,在各种技术聊天也大概知道是一种可插拨的新型架构模式,但是似乎SQLServer中也有类似的架构,不管怎么样Oracle圈内还是很火,而且听说12c r2可以支持4096个pdb,这个也太大了,docker装一下试试:) 自己也在本地尝试了一下,其实中间了花了些时间,中途总是被各种事情打断,所以留下的都是一些零碎的知识片段,自己索引把环境重新删了再做几次. 在这种尝试

ORACLE 12C In-Memory组件学习笔记

12.1.0.2版本[oracle@localhost ~]$ sqlplus chf/xifenfei@pdb1 SQL*Plus: Release 12.1.0.2.0 Beta on Thu Apr 24 21:39:43 2014 Copyright (c) 1982, 2014, Oracle.  All rights reserved.  Connected to:Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 -

MySQL中的binlog和redo浅析(r12笔记第5天)

   有一个小问题可能很多人都想起过,那就是MySQL中既然已经有了binlog,为什么还需要redo,这个问题看起来好像很简单,但是细细品来,还是有不少值得注意的地方.     对于数据恢复,尤其是异常宕机的情况下,再次启动的时候,如何恢复,恢复的数据依据,这个尤为重要,在MySQL中是有checkpoint的技术来做一个基本的检查点控制,也就是常说的LSN,对于事务性数据库,大都会采用write ahead log的策略,即当前事务提交的时候,先写redo,在修改相应的页,如果发生宕机导致数

Oracle 12c中DBCA搭建备库体验(r11笔记第92天)

   Oracle 12c中DBCA有一个特性看起来蛮有意思,就是直接通过DBCA来搭建Data Guard,当然这么说也有点噱头,我们来实际看看.   Oracle提供的官方命令结构如下:       dbca -createDuplicateDB         -gdbName global_database_name         -primaryDBConnectionString easy_connect_string_to_primary         -sid databas

Oracle 12c远程克隆PDB的问题及修复(r12笔记第78天)

 Oracle 12c里面的PDB迁移还是有很多花样的,玩法很多,如果想达到一种平滑方式的迁移,克隆远程PDB也是一种方法,保证网络畅通,即可远程克隆PDB到指定的目标容器数据库中,当然这种方式还是推荐数据量不大的PDB.   要实现远程克隆,主要就是创建DB link,然后使用create pluggable database语句指定db link复制的路径即可.当然这个过程中还是可能出现一大堆的问题.我就抛砖引玉,提一个比较有代表性的. 首先在目标端容器数据库创建DB link,指向源端的P

Oracle 12c中JOB运行失败的简单处理(r11笔记第66天)

在之前简单分析过一个12c中数据字典的小问题. Oracle 12c数据字典的小问题(r11笔记第49天) 最近查看邮件,12c的一个PDB还是存在JOB运行异常的情况,因为是测试环境,不是业务类的JOB,这个问题就给了我一些时间来修复. 首先因为数据字典cdb_scheduler_job_run_details的问题,还不能一下子就查出数据.我们分阶段来完成这个工作,即分成几条SQL语句来查. 首先查看PDB中的JOB执行情况.可以看到con_id=8的PDB存在失败的JOB SQL> sel

Oracle 12.2中的一个参数说明(r12笔记第76天)

    之前花了些时间做了Oracle 10g,11g,12c参数的差别,其中有一个参数很有意思,在不同版本代表的含义还有所差别.就是sec_case_sensitive_logon.它是从10g到11g新增的参数,默认是true,代表的含义就是登录用户的大小写敏感,而实际上这个参数的使用效果却不好,基本是作为默认的配置来禁用掉的,举一个很简单的例子,oracle 10g中我使用system/oracle的用户名密码和SYSTEM/ORACLE这样的用户名密码是没有差别的,而一旦升级到11g,开

CentOS命令行下装oracle 12c的方法(命令行模式安装)_oracle

实验环境: 1:安装oracle所需软件包 Oracle 12c所需的rpm包如下: binutils-2.20.51.0.2-5.11.el6 (x86_64) compat-libcap1-1.10-1 (x86_64) compat-libstdc++-33-3.2.3-69.el6 (x86_64) compat-libstdc++-33-3.2.3-69.el6 (i686) gcc-4.4.4-13.el6 (x86_64) gcc-c++-4.4.4-13.el6 (x86_64)