Oracle 12c 手動建立CDB和非CDB

lhrbest發表於2018-10-10


使用 SQL*Plus 建立新 CDB 的具體步驟如下所示:

1.  啟動例項之前,使用常用引數準備 init<SID>.ora 引數檔案: DB_NAME CONTROL_FILES (如果不使用 OMF )以及 DB_BLOCK_SIZE root 的全域性資料庫名是 CDB 的全域性資料庫名。需要使用一個新引數,定義已啟動例項可用於建立 CDB 而不是非 CDB ENABLE_PLUGGABLE_DATABASE 引數必須設定為 TRUE 。設定 ORACLE_SID 環境變數。啟動 SQL*Plus ,以屬於 DBA OS 組的 OS 驗證使用者的身份進行連線,然後執行 STARTUP NOMOUNT 命令。

export ORACLE_SID=LHRCDB1

orapwd file=$ORACLE_HOME/dbs/orapw LHRCDB1  password=lhr format=12 entries=20

 

vi $ORACLE_HOME/dbs/initLHRCDB1.ora

DB_NAME = LHRCDB1

DB_BLOCK_SIZE =8192

ENABLE_PLUGGABLE_DATABASE =true

db_create_file_dest='+DATA'

 

sqlplus / as sysdba

startup nomount

2. 通過使用 CREATE DATABASE 命令和新子句 ENABLE PLUGGABLE DATABASE 建立 CDB 。該子句指定資料庫為 CDB 而不是非 CDB 。此時會建立根容器和種子可插入資料庫。您可以使用另一個子句 SEED FILE_NAME_CONVERT 指定種子檔案的位置。如果省略此子句, OMF 會決定種子檔案的名稱和位置。 FILE_NAME_CONVERT 指定複製到目標種子目錄的根資料檔案的源目錄。如果使用新的 init.ora 引數 PDB_FILE_NAME_CONVERT 將根資料檔案的名稱對映到種子資料檔案,則會忽略 SEED FILE_NAME_CONVERT 子句。在本例中, /oracle/dbs /oracle/seed 目錄必須存在。在語句中定義的字符集依然是 CDB 的唯一字符集。

create database LHRCDB1

user sys identified by lhr

user system identified by lhr

extent management local

default tablespace users

default temporary tablespace temp

undo tablespace undotbs1

enable pluggable database

seed;

3. 執行 catcdb.sql SQL 指令碼。此指令碼將安裝 CDB 所需的全部元件。

@? /rdbms/admin/catcdb.sql

 

 






使用create database建立CDB的具體操作如下:
1.指定例項標識(SID)
ORACLE_SID環境變數被用來區分不同的例項。
1.決定例項的唯一標識SID
2.開啟命令視窗
3.設定ORACLE_SID環境變數

在Unix/Linux下設定ORACLE_SID環境變數如下:
export ORACLE_SID=mynewdb

setenv ORACLE_SID=mynewdb

在Windows下設定ORACLE_SID環境變數如下:
set ORACLE_SID=mynewdb

2.確保所需的環境變數被設定
依賴於平臺,在啟動SQL*Plus之後,可能需要設定相關的環境變數,或者驗證相關的設定。例如,在大多數平臺中,ORACLE_SID與ORACLE_HOME必須設定。另外,建議PATH環境變數包含ORACLE_HOME/bin目錄。在Unix/Linux平
臺中,必須手動設定這些環境變數。在Windows平臺中,OUI會自動設定ORACLE_HOME與ORACLE_SID。如果在安裝期間不建立資料庫,OUI不會設定ORACLE_SID,並且在之後建立資料庫時必須要設定ORACLE_SID環境變數。

3.選擇資料庫管理員稽核方法
為了建立資料庫,使用者必須被稽核並且被授予相關的系統許可權。稽核方法有以下兩種:
.使用密碼檔案
.使用作業系統稽核

4.建立初始化引數檔案
當Oracle例項啟動時,它將讀取初始化引數檔案。這個引數檔案可以是文字檔案可以使用文字編輯器進行編輯,或者是二進位制檔案,可以由資料庫進行動態修改。二進位制引數檔案也叫伺服器引數檔案。對於這一步操作,可以先建立一個文字引數檔案,之後通過文字引數檔案來建立伺服器引數檔案。

5.建立例項只限於Windows平臺
對於Windows平臺,在連線例項之前,必須手動建立例項。ORADIM命令就是用來建立新例項,其語法如下:oradim -NEW -SID sid -STARTMODE MANUAL -PFILE file.注意在建立新例項時,不要將-STARTMODE引數指定為AUTO,因為這會造成新例項啟動與mount資料庫,而這時資料庫是不存在的。

6.連線例項
啟動SQL*Plus並且使用有sysdba許可權的使用者連線到資料庫例項。
.使用密碼檔案進行稽核,輸入以下命令並輸入sys使用者的密碼
$sqlplus /nolog
SQL>connect sys as sysdba

.使用作業系統稽核,輸入以下命令
$sqlplus /nolog
SQL>conn / as sysdba

7.建立伺服器引數檔案
伺服器引數檔案能通過alter system命令來修改引數,並且這種修改會永久生效。可以通過文字引數檔案來建立伺服器引數檔案。

8.啟動例項
啟動例項但不mount資料庫執行以下命令
startup nomount

9.使用create database語句來建立CDB
當使用create database語句來建立CDB時,必須在操作CDB之前完成額外的操作。這些操作包含對資料字典表建立檢視,安裝標準的PL/SQL包。執行catcdb.sql指令碼。

使用create database語句來建立語句需要注意
9.1 將enable_pluggable_database引數設定為true。在CDB中,db_name引數指定root的名稱。將SID設定為root名稱是常見的做法。這個名稱最多有30個字元。

9.2使用create database語句來建立新的CDB。
9.2.1 不使用OMF來建立CDB

9.2.2 使用OMF來建立CDB

不使用OMF來建立CDB
下面的例子將介紹如何不使用OMF功能來建立CDB
1.設定SID

[root@jytest3 ~]# su - oracle
Last login: Fri Aug  4 15:07:33 CST 2017
[oracle@jytest3 ~]$ cd $ORACLE_HOME/dbs
[oracle@jytest3 dbs]$ export ORACLE_SID=test

2.建立密碼檔案

[oracle@jytest3 dbs]$ orapwd file=$ORACLE_HOME/dbs/orapwtest password=abcdefg format=12.2 entries=20

3.建立初始化引數

[oracle@jytest3 dbs]$ vi inittest.ora
db_name='test'
memory_target=4G
memory_max_target=4G
control_files='+data/test/controlfile/testcdb/control01.ctl','+data/test/controlfile/testcdb/control02.ctl'
enable_pluggable_database=true

4.啟動例項但不mount

[oracle@jytest3 dbs]$ export ORACLE_SID=test
[oracle@jytest3 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Aug 4 20:59:37 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup pfile='$ORACLE_HOME/dbs/inittest.ora' nomount
ORACLE instance started.
Total System Global Area 4294967296 bytes
Fixed Size                  8628936 bytes
Variable Size            2315257144 bytes
Database Buffers         1962934272 bytes
Redo Buffers                8146944 bytes

5.執行create database語句來建立CDB
下面的語句將建立一個名為test的CDB資料庫。這個名字與引數檔案中的db_name同名。並且滿足以下條件:
.已經設定control_files引數
.建立了+data/test/datafile/testcdb目錄
.建立了+data/test/datafile/pdbseed目錄
.建立了+data/test/onlinelog/testcdb目錄

為了建立包含root與CDB seed的CDB庫在create database語句中包含了enable pluggable database子句。在這個例子還包含了seed file_name_convert子句來指定CDB seed檔案的檔名與目錄。

SQL> create database test
  2  user sys identified by xxzx_7817600
  3  user system identified by xxzx_7817600
  4  logfile group 1 ('+data/test/onlinelog/testcdb/redo01.log')
  5  size 100m blocksize 512,
  6  group 2 ('+data/test/onlinelog/testcdb/redo02.log')
  7  size 100m blocksize 512,
  8  group 3 ('+data/test/onlinelog/testcdb/redo03.log')
  9  size 100m blocksize 512
 10  maxloghistory 1
 11  maxlogfiles 16
 12  maxlogmembers 3
 13  maxdatafiles 1024
 14  character set al32utf8
 15  national character set al16utf16
 16  extent management local
 17  datafile '+data/test/datafile/testcdb/system01.dbf'
 18  size 700m reuse autoextend on next 10240k maxsize unlimited
 19  sysaux datafile '+data/test/datafile/testcdb/sysaux01.dbf'
 20  size 550m reuse autoextend on next 10240k maxsize unlimited
 21  default tablespace deftbs
 22  datafile '+data/test/datafile/testcdb/deftbs01.dbf'
 23  size 500m reuse autoextend on maxsize unlimited
 24  default temporary tablespace tempts1
 25  tempfile '+data/test/datafile/testcdb/temp01.dbf'
 26  size 20m reuse autoextend on next 640k maxsize unlimited
 27  undo tablespace undotbs1
 28  datafile '+data/test/datafile/testcdb/undotbs01.dbf'
 29  size 200m reuse autoextend on next 5120k maxsize unlimited
 30  enable pluggable database
 31  seed file_name_convert = ('+data/test/datafile/testcdb/','+data/test/datafile/pdbseed/')
 32  local undo on;
Database created.

6.執行指令碼$ORACLE_HOME/rdbms/admin/catcdb.sql

SQL> @$ORACLE_HOME/rdbms/admin/catcdb.sql
SQL>
SQL> Rem The script relies on the caller to have connected to the DB
SQL>
SQL> Rem This script invokes catcdb.pl that does all the work, so we just need to
SQL> Rem construct strings for $ORACLE_HOME/rdbms/admin and
SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl
SQL>
SQL> Rem $ORACLE_HOME
SQL> column oracle_home new_value oracle_home noprint
SQL> select sys_context('userenv', 'oracle_home') as oracle_home from dual;
SQL>
SQL> Rem OS-dependent slash
SQL> column slash new_value slash noprint
SQL> select sys_context('userenv', 'platform_slash') as slash from dual;
SQL>
SQL> Rem $ORACLE_HOME/rdbms/admin
SQL> column rdbms_admin new_value rdbms_admin noprint
SQL> select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual;
old   1: select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual
new   1: select '/u01/app/oracle/product/12.2.0/db'||'/'||'rdbms'||'/'||'admin' as rdbms_admin from dual
SQL>
SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl
SQL> column rdbms_admin_catcdb new_value rdbms_admin_catcdb noprint
SQL> select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual;
old   1: select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual
new   1: select '/u01/app/oracle/product/12.2.0/db/rdbms/admin'||'/'||'catcdb.pl' as rdbms_admin_catcdb from dual
SQL>
SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb --logDirectory &&1 --logFilename &&2
Enter value for 1:
Enter value for 2:
Can't locate Term/ReadKey.pm in @INC (you may need to install the Term::ReadKey module) (@INC contains: /u01/app/oracle/product/12.2.0/db/rdbms/admin /usr/lib/perl5/site_perl/5.22.0/x86_64-linux /usr/lib/perl5/site_perl/5.22.0 /usr/lib/perl5/5.22.0/x86_64-linux /usr/lib/perl5/5.22.0 .) at /u01/app/oracle/product/12.2.0/db/rdbms/admin/catcdb.pl line 30.
BEGIN failed--compilation aborted at /u01/app/oracle/product/12.2.0/db/rdbms/admin/catcdb.pl line 30.

對於這種錯誤參考了楊建榮的解決方法,丟擲的錯誤提示找不到ReadKey.pm,Linux,Unix其實都是自帶Perl的,但這裡需要的檔案在$ORACLE_HOME下的Perl目錄,只需要把這個目錄引用到PATH變數中就可以了,比如:
export PATH=$PATH:$ORACLE_HOME/OPatch:$ORACLE_HOME/perl/bin:$ORACLE_HOME/jdk/bin

[oracle@jytest3 dbs]$ export PATH=$PATH:$ORACLE_HOME/OPatch:$ORACLE_HOME/perl/bin:$ORACLE_HOME/jdk/bin
[oracle@jytest3 dbs]$ export ORACLE_SID=test
[oracle@jytest3 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Aug 4 22:12:56 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> @$ORACLE_HOME/rdbms/admin/catcdb.sql
SQL>
SQL> Rem The script relies on the caller to have connected to the DB
SQL>
SQL> Rem This script invokes catcdb.pl that does all the work, so we just need to
SQL> Rem construct strings for $ORACLE_HOME/rdbms/admin and
SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl
SQL>
SQL> Rem $ORACLE_HOME
SQL> column oracle_home new_value oracle_home noprint
SQL> select sys_context('userenv', 'oracle_home') as oracle_home from dual;
SQL>
SQL> Rem OS-dependent slash
SQL> column slash new_value slash noprint
SQL> select sys_context('userenv', 'platform_slash') as slash from dual;
SQL>
SQL> Rem $ORACLE_HOME/rdbms/admin
SQL> column rdbms_admin new_value rdbms_admin noprint
SQL> select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual;
old   1: select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual
new   1: select '/u01/app/oracle/product/12.2.0/db'||'/'||'rdbms'||'/'||'admin' as rdbms_admin from dual
SQL>
SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl
SQL> column rdbms_admin_catcdb new_value rdbms_admin_catcdb noprint
SQL> select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual;
old   1: select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual
new   1: select '/u01/app/oracle/product/12.2.0/db/rdbms/admin'||'/'||'catcdb.pl' as rdbms_admin_catcdb from dual
SQL>
SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb --logDirectory &&1 --logFilename &&2
Enter value for 1:
Enter value for 2:
Can't locate util.pm in @INC (you may need to install the util module) (@INC contains: /u01/app/oracle/product/12.2.0/db/rdbms/admin /u01/app/oracle/product/12.2.0/db/perl/lib/site_perl/5.22.0/x86_64-linux-thread-multi /u01/app/oracle/product/12.2.0/db/perl/lib/site_perl/5.22.0 /u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi /u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0 .) at /u01/app/oracle/product/12.2.0/db/rdbms/admin/catcdb.pl line 35.
BEGIN failed--compilation aborted at /u01/app/oracle/product/12.2.0/db/rdbms/admin/catcdb.pl line 35.

這個問題把util改為Util

[oracle@jytest3 ~]$  find $ORACLE_HOME -name util.pm | wc -l
[oracle@jytest3 ~]$ find $ORACLE_HOME -name Util.pm | wc -l
5
[oracle@jytest3 ~]$ find $ORACLE_HOME -name Util.pm
/u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/Util.pm
/u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi/List/Util.pm
/u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi/Scalar/Util.pm
/u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi/Sub/Util.pm
/u01/app/oracle/product/12.2.0/db/perl/lib/site_perl/5.22.0/HTTP/Headers/Util.pm

這個過程中到底該選哪個目錄下的Util.pm呢,如果多點耐心仔細看看裡面的內容還是能夠找到一些頭緒的,最後選擇的是:

/u01/app/oracle/product/12.2.0/db/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/Util.pm

需要手工修改catcdb.pl指令碼
那麼問題來了,這個catcdb.pl指令碼是不是要改動呢。修改檔案catcdb.pl,把下面的util修改為Util

use Term::ReadKey; # to not echo password
use Getopt::Long;
use Cwd;
use File::Spec;
use Data::Dumper;
use Utilqw(trim, splitToArray);
use catcon qw(catconSqlplus);

再來一輪測試,結果發現還是會有報錯,這種嘗試會讓你開始懷疑自己的選擇到底是不是正確的方向。如果還是沒有找到,說明在當前的環境變數中沒有匹配到相關的內容,我們需要直接切換到目錄Hash下,然後執行指令碼才可以,這個時候輸出才算有了改觀,提示你輸入密碼。

[oracle@jytest3 Hash]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Aug 4 22:25:23 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> @$ORACLE_HOME/rdbms/admin/catcdb.sql
SQL> Rem
SQL> Rem $Header: rdbms/admin/catcdb.sql /main/7 2016/06/23 11:38:38 akruglik Exp $
SQL> Rem
SQL> Rem catcdb.sql
SQL> Rem
SQL> Rem Copyright (c) 2013, 2016, Oracle and/or its affiliates.
SQL> Rem All rights reserved.
SQL> Rem
SQL> Rem    NAME
SQL> Rem         catcdb.sql - 
SQL> Rem
SQL> Rem    DESCRIPTION
SQL> Rem         invoke catcdb.pl
SQL> Rem
SQL> Rem    NOTES
SQL> Rem         
SQL> Rem
SQL> Rem    PARAMETERS:
SQL> Rem         - log directory
SQL> Rem         - base for log file name
SQL> Rem
SQL> Rem    MODIFIED   (MM/DD/YY)
SQL> Rem    akruglik    06/21/16 - Bug 22752041: pass --logDirectory and
SQL> Rem                           --logFilename to catcdb.pl
SQL> Rem    akruglik    11/10/15 - use catcdb.pl to collect passowrds and pass them
SQL> Rem                           on to catcdb_int.sql using env vars
SQL> Rem    aketkar     04/30/14 - remove SQL file metadata
SQL> Rem    cxie        08/16/13 - remove SQL_PHASE
SQL> Rem    cxie        07/10/13 - 17033183: add shipped_file metadata
SQL> Rem    cxie        03/19/13 - create CDB with all options installed
SQL> Rem    cxie        03/19/13 - Created
SQL> Rem
SQL>
SQL> set echo on
SQL>
SQL> Rem The script relies on the caller to have connected to the DB
SQL>
SQL> Rem This script invokes catcdb.pl that does all the work, so we just need to
SQL> Rem construct strings for $ORACLE_HOME/rdbms/admin and
SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl
SQL>
SQL> Rem $ORACLE_HOME
SQL> column oracle_home new_value oracle_home noprint
SQL> select sys_context('userenv', 'oracle_home') as oracle_home from dual;
SQL>
SQL> Rem OS-dependent slash
SQL> column slash new_value slash noprint
SQL> select sys_context('userenv', 'platform_slash') as slash from dual;
SQL>
SQL> Rem $ORACLE_HOME/rdbms/admin
SQL> column rdbms_admin new_value rdbms_admin noprint
SQL> select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual;
old   1: select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual
new   1: select '/u01/app/oracle/product/12.2.0/db'||'/'||'rdbms'||'/'||'admin' as rdbms_admin from dual
SQL>
SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl
SQL> column rdbms_admin_catcdb new_value rdbms_admin_catcdb noprint
SQL> select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual;
old   1: select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual
new   1: select '/u01/app/oracle/product/12.2.0/db/rdbms/admin'||'/'||'catcdb.pl' as rdbms_admin_catcdb from dual
SQL>
SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb --logDirectory &&1 --logFilename &&2
Enter new password for SYS: xxzx_7817600
Enter new password for SYSTEM: xxzx_7817600
Enter temporary tablespace name: tempts1
No options to container mapping specified, no options will be installed in any containers
catcon: ALL catcon-related output will be written to [/u01/app/oracle/product/12.2.0/db/rdbms/log/catalog_catcon_27898.lst]
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catalog*.log] files for output generated by scripts
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catalog_*.lst] files for spool files, if any
catcon.pl: completed successfully
catcon: ALL catcon-related output will be written to [/u01/app/oracle/product/12.2.0/db/rdbms/log/catproc_catcon_3352.lst]
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catproc*.log] files for output generated by scripts
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catproc_*.lst] files for spool files, if any
catcon.pl: completed successfully
catcon: ALL catcon-related output will be written to [/u01/app/oracle/product/12.2.0/db/rdbms/log/catoctk_catcon_9051.lst]
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catoctk*.log] files for output generated by scripts
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catoctk_*.lst] files for spool files, if any
catcon.pl: completed successfully
catcon: ALL catcon-related output will be written to [/u01/app/oracle/product/12.2.0/db/rdbms/log/owminst_catcon_9233.lst]
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/owminst*.log] files for output generated by scripts
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/owminst_*.lst] files for spool files, if any
catcon.pl: completed successfully
catcon: ALL catcon-related output will be written to [/u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld_catcon_11572.lst]
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld*.log] files for output generated by scripts
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld_*.lst] files for spool files, if any
catcon.pl: completed successfully
catcon: ALL catcon-related output will be written to [/u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld_catcon_11761.lst]
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld*.log] files for output generated by scripts
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld_*.lst] files for spool files, if any
validate_script_path: sqlplus script /u01/app/oracle/product/12.2.0/db/sqlplus/admin/help/hlpbld does not exist or is unreadable
catconExec: empty Path returned by validate_script_path for
    SrcDir = /u01/app/oracle/product/12.2.0/db/sqlplus/admin/help, FileName = hlpbld
catcon.pl: Unexpected error encountered in catconExec; exiting
exec_DB_script: /u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld_catcon_11761_exec_DB_script.done did not need to be deleted before running a script
exec_DB_script: opened Reader and Writer
exec_DB_script: connected
exec_DB_script: executed set echo on
exec_DB_script: executed @@/u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld_catcon_kill_sess_11761_ALL.sql
exec_DB_script: sent
host sqlplus -v > /u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld_catcon_11761_exec_DB_script.done to Writer
exec_DB_script: sent -exit- to Writer
exec_DB_script: closed Writer
exec_DB_script: marker was undefined; read and ignore output, if any
exec_DB_script: finished reading and ignoring output
exec_DB_script: waiting for child process to exit
exec_DB_script: child process exited
sureunlink: unlink(/u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld_catcon_11761_exec_DB_script.done) succeeded after 1 attempt(s)
sureunlink: verify that the file really no longer exists
sureunlink: confirmed that /u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld_catcon_11761_exec_DB_script.done no longer exists after 1 attempts
exec_DB_script: deleted /u01/app/oracle/product/12.2.0/db/rdbms/log/pupbld_catcon_11761_exec_DB_script.done after running a script
exec_DB_script: closed Reader
exec_DB_script: waitpid returned
kill_sqlplus_sessions: output produced in exec_DB_script [
    SQL*Plus: Release 12.2.0.1.0 Production on Sat Aug 5 00:30:52 2017
    Copyright (c) 1982, 2016, Oracle.  All rights reserved.
    SQL> Connected.
    SQL> SQL> SQL>
    SQL> ALTER SYSTEM KILL SESSION '78,1729' force timeout 0 -- process 11802
      2  /
    System altered.
    SQL>
    SQL> SQL>
    SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
  ] end of output produced in exec_DB_script
catcon: ALL catcon-related output will be written to [/u01/app/oracle/product/12.2.0/db/rdbms/log/catclust_catcon_11824.lst]
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catclust*.log] files for output generated by scripts
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catclust_*.lst] files for spool files, if any
catcon.pl: completed successfully
catcon: ALL catcon-related output will be written to [/u01/app/oracle/product/12.2.0/db/rdbms/log/catfinal_catcon_12430.lst]
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catfinal*.log] files for output generated by scripts
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catfinal_*.lst] files for spool files, if any
catcon.pl: completed successfully
catcon: ALL catcon-related output will be written to [/u01/app/oracle/product/12.2.0/db/rdbms/log/catbundleapply_catcon_12604.lst]
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catbundleapply*.log] files for output generated by scripts
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/catbundleapply_*.lst] files for spool files, if any
catcon.pl: completed successfully
catcon: ALL catcon-related output will be written to [/u01/app/oracle/product/12.2.0/db/rdbms/log/utlrp_catcon_12789.lst]
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/utlrp*.log] files for output generated by scripts
catcon: See [/u01/app/oracle/product/12.2.0/db/rdbms/log/utlrp_*.lst] files for spool files, if any
catcon.pl: completed successfully

使用OMF來建立CDB
下面的例子將介紹如何使用OMF功能來建立CDB
1.設定SID

[root@jytest3 ~]# su - oracle
Last login: Fri Aug  4 15:07:33 CST 2017
[oracle@jytest3 ~]$ cd $ORACLE_HOME/dbs
[oracle@jytest3 dbs]$ export ORACLE_SID=cs

2.建立密碼檔案

[oracle@jytest3 dbs]$ orapwd file=$ORACLE_HOME/dbs/orapwcs password=xxzx_7817600 format=12.2 entries=20

3.建立初始化引數

[oracle@jytest3 dbs]$ vi inittest.ora
db_name='cs'
memory_target=4G
memory_max_target=4G
control_files='+data/cs/controlfile/control01.ctl','+data/cs/controlfile/control02.ctl'
enable_pluggable_database=true
db_create_file_dest=+data

4.啟動例項但不mount

[oracle@jytest3 dbs]$ export ORACLE_SID=cs
[oracle@jytest3 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Aug 4 20:59:37 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup pfile='$ORACLE_HOME/dbs/initcs.ora' nomount
ORACLE instance started.
Total System Global Area 4294967296 bytes
Fixed Size                  8628936 bytes
Variable Size            2315257144 bytes
Database Buffers         1962934272 bytes
Redo Buffers                8146944 bytes

5.執行create database語句來建立CDB
下面的語句將建立一個名為cs的CDB資料庫。這個名字與引數檔案中的db_name同名。為了建立包含root與CDB seed的CDB庫在create database語句中包含了enable pluggable database子句。在這個例子還包含了
seed tablespace datafiles子句來指定CDB seed檔案的檔名與目錄。

SQL> create database cs
  2  user sys identified by xxzx_7817600
  3  user system identified by xxzx_7817600
  4  extent management local
  5  default tablespace users
  6  default temporary tablespace temp
  7  undo tablespace undotbs1
  8  enable pluggable database
  9  seed
 10  system datafiles size 125m autoextend on next 10m maxsize unlimited
 11  sysaux datafiles size 100m;
Database created.

6.執行指令碼$ORACLE_HOME/rdbms/admin/catcdb.sql






Oracle 12c手工建庫(非CDB及CDB建立)

2017年05月31日 17:01:02     閱讀數:4055   標籤:   oracle 資料庫 c語言  

個人分類:   -----Oracle 12c相關特性


版權宣告:本文為博主原創文章,歡迎擴散,擴散請務必註明出處。 https://blog.csdn.net/robinson_0612/article/details/72821806

對於Oracle資料庫的建立,Oracle除了支援dbca(GUI介面),同時也支援手工方式建立資料庫,即使用CREATE DATABASE語句建立資料庫。使用此語句對使用DBCA的一個優點是可以從指令碼內建立資料庫。在Oracle 12c版本中支援12c之前的非CDB資料庫以及CDB容器資料庫。因此建立方式略有不同。本文同時描述2種不同資料庫的手工建立方法。

一、12c手工建立非CDB資料庫

步驟1:指定例項識別符號(SID)

ORACLE_SID的環境變數用於該例項從稍後可能建立並同時在同一主機計算機上執行其他Oracle Database例項區分開來。

$ export ORACLE_SID=nocdb
$ export ORACLE_UNQNAME=nocdb12

步驟2:確保設定所需的環境變數

根據您的平臺,在啟動SQL * Plus之前(根據後續步驟的要求),您可能必須設定環境變數,或至少驗證它們是否正確設定。如下檢視當前已設定的環境變數,如果未設定,請使用export命令方式設定之。

$ env|grep ORAORACLE_UNQNAME=nocdbORACLE_SID=nocdbORACLE_BASE=/app/oracle/ora12cORACLE_HOSTNAME=ydq05.ydq.comORACLE_HOME=/app/oracle/ora12c/db_1123456

步驟3:選擇資料庫管理員身份驗證方法

您必須進行身份驗證並授予相應的系統許可權才能建立資料庫。

通常情況下,使用以下方式具有所需許可權的管理員進行身份驗證: 
使用密碼檔案 
具有作業系統認證(此演示中使用作業系統認證)

$ id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba)12

步驟4:建立初始化引數檔案

當Oracle例項啟動時,它讀取一個初始化引數檔案。該檔案可以是文字檔案,可以使用文字編輯器或二進位制檔案進行建立和修改,該檔案由資料庫建立和動態修改。優選的二進位制檔案稱為伺服器引數檔案。在此步驟中,您將建立一個文字初始化引數檔案。在後面的步驟中,您可以從文字檔案建立一個伺服器引數檔案。

$ mkdir -pv /app/oracle/ora12c/oradata/nocdb #建立存放資料檔案的目錄$ vi $ORACLE_HOME/dbs/initnocdb.oraDB_NAME=nocdbCONTROL_FILES='/app/oracle/ora12c/oradata/nocdb/contorl01.ctl'MEMORY_TARGET=380m1234567

步驟5:(僅限Windows)建立例項

在Windows平臺上,連線到例項之前,必須手動建立它,如果它不存在。該ORADIM命令通過建立一個新的Windows服務建立一個Oracle資料庫例項。

oradim -NEW -SID sid -STARTMODE MANUAL -PFILE file1

步驟6:連線到例項

啟動SQL * Plus並使用管理許可權連線到Oracle資料庫例項SYSDBA。

$ sqlplus / as sysdba   --演示環境為12.1版本SQL*Plus: Release 12.1.0.1.0 Production on Wed May 31 10:44:41 2017Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to an idle instance.
SQL>123456789

步驟7:建立伺服器引數檔案

伺服器引數檔案使您可以使用該ALTER SYSTEM命令更改初始化引數,並在資料庫關閉和啟動時保留更改。您可以從編輯的文字初始化檔案建立伺服器引數檔案。

SQL> create spfile from pfile='/app/oracle/ora12c/db_1/dbs/initnocdb.ora';12

步驟8:啟動例項

啟動例項而不安裝資料庫。

SQL> startup nomount;
ORACLE instance started.Total System Global Area 1068937216 bytesFixed Size                  2296576 bytesVariable Size             641729792 bytesDatabase Buffers          419430400 bytesRedo Buffers                5480448 bytes12345678

步驟9:發出CREATE DATABASE語句

要建立新資料庫,請使用該CREATE DATABASE語句。

SQL> CREATE DATABASE nocdb
   USER SYS IDENTIFIED BY pass
   USER SYSTEM IDENTIFIED BY pass
   LOGFILE GROUP 1 ('/app/oracle/ora12c/oradata/nocdb/redo01a.log','/app/oracle/ora12c/oradata/nocdb/redo01b.log') SIZE 100M BLOCKSIZE 512,           GROUP 2 ('/app/oracle/ora12c/oradata/nocdb/redo02a.log','/app/oracle/ora12c/oradata/nocdb/redo02b.log') SIZE 100M BLOCKSIZE 512
   MAXLOGHISTORY 1
   MAXLOGFILES 16
   MAXLOGMEMBERS 3
   MAXDATAFILES 1024
   CHARACTER SET AL32UTF8
   NATIONAL CHARACTER SET AL16UTF16
   EXTENT MANAGEMENT LOCAL
   DATAFILE '/app/oracle/ora12c/oradata/nocdb/system01.dbf' SIZE 700M
   SYSAUX DATAFILE '/app/oracle/ora12c/oradata/nocdb/sysaux01.dbf' SIZE 550M 
   DEFAULT TABLESPACE users
      DATAFILE '/app/oracle/ora12c/oradata/nocdb/users01.dbf' SIZE 500M 
   DEFAULT TEMPORARY TABLESPACE tempts1
      TEMPFILE '/app/oracle/ora12c/oradata/nocdb/temp01.dbf' SIZE 20M 
   UNDO TABLESPACE undotbs1
      DATAFILE '/app/oracle/ora12c/oradata/nocdb/undotbs01.dbf' SIZE 200M
   USER_DATA TABLESPACE usertbs
      DATAFILE '/app/oracle/ora12c/oradata/nocdb/usertbs01.dbf' SIZE 200M;123456789101112131415161718192021222324

步驟10:建立其他表空間

要使資料庫起作用,必須為應用程式資料建立其他表空間。

SQL> CREATE TABLESPACE apps_tbs LOGGING 
     DATAFILE '/app/oracle/ora12c/oradata/nocdb/apps01.dbf' 
     SIZE 500M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED 
     EXTENT MANAGEMENT LOCAL;1234

步驟11:執行指令碼以構建資料字典檢視

執行構建資料字典檢視,同義詞和PL / SQL包所必需的指令碼,並支援SQL * Plus的正常執行。

使用sysdba許可權執行以下指令碼

SQL> @?/rdbms/admin/catalog.sql    --資料庫字典,動態檢視建立等
SQL> @?/rdbms/admin/catproc.sql    --PL/SQL存過過程相關程式碼
SQL> @?/rdbms/admin/utlrp.sql      --編譯123

使用SYSTEM使用者執行以下指令碼

SQL> @?/sqlplus/admin/pupbld.sql   --SQL*Plus相關--驗證結果
SQL> SELECT name,  2         DECODE (cdb,  3                 'YES', 'Multitenant Option enabled',  4                 'Regular 12c Database: ')  5            "Multitenant Option",  6         open_mode,  7         con_id  8  FROM   v$database;
NAME      Multitenant Option         OPEN_MODE                CON_ID--------- -------------------------- -------------------- ----------NOCDB     Regular 12c Database:      READ WRITE                    0123456789101112131415

步驟12 :(可選)執行指令碼以安裝其他選項(此處略)

您可能需要執行其他指令碼。您執行的指令碼由您選擇使用或安裝的功能和選項決定。

步驟13:備份資料庫對資料庫(此處略)

進行完整備份,以確保您有一套完整的檔案,如果發生介質故障,可以從中恢復。

步驟14:(可選)啟用自動例項啟動(此處略)

您可能希望將Oracle例項配置為在其主機重新啟動時自動啟動。

二、12c下手工建立CDB資料庫

1、CDB建立相關說明

使用CREATE DATABASESQL語句建立CDB非常類似於建立非CDB。使用CREATE DATABASESQL語句建立CDB時,必須啟用PDB並指定根檔案和種子檔案的名稱和位置。

要建立CDB,CREATE DATABASE語句必須包含ENABLE PLUGGABLE DATABASE子句。當包含此子句時,該語句使用根和種子建立CDB。如果未指定ENABLE PLUGGABLE DATABASE子句 那新建立的資料庫是非CDB。該語句不會建立根和種子,非CDB永遠不會包含PDB。

以下為幾個主要差異部分

  • CDB資料庫建立時應指定ENABLE PLUGGABLE DATABASE子句

  • CDB資料庫應指定根檔案和種子檔案的名稱和位置

  CREATE DATABASE語句使用根檔案(如資料檔案)生成種子檔案的名稱。您必須指定根檔案和種子檔案的名稱和位置。

  CREATE DATABASE語句成功完成後,您可以使用種子及其檔案建立新的PDB。種子在建立後不能被修改。

  可以通過以下方式之一指定種子檔案的名稱和位置

    使用 seed FILE_NAME_CONVERT 子句

    如SEED FILE_NAME_CONVERT = (‘/app/oracle/ora12c/oradata/cdb1/’,’/app/oracle/ora12c/oradata/pdbseed/’)表示將cdb1目錄下的檔案轉換到pdbseed目錄下

    基於oracle檔案託管方式(OMF)

    使用PDB_FILE_NAME_CONVERT初始化引數

  • 可以為PDB種子資料庫制定不同的屬性

  根SYSTEM和SYSAUX表空間的資料檔案的屬性可能不適合種子。在這種情況下,您可以使用子句為種子的資料檔案指定不同的屬性tablespace_datafile。使用這些子句指定所有資料檔案包含的屬性SYSTEM和SYSAUX表空間中的種子。從根繼承的值用於尚未提供其值的任何屬性。

如下示例

DATAFILE '/u01/app/oracle/oradata/newcdb/system01.dbf' SIZE 325M REUSE
SYSAUX DATAFILE '/u01/app/oracle/oradata/newcdb/sysaux01.dbf' SIZE 325M REUSE
--下面的seed部分使用了不同於上面root容器的配置,--如system資料檔案此處大小為125M,而root容器中為352M--seed中開啟了自動擴充套件,sysaux也同樣使用了一些不同於root容器的屬性--對於在seed中未明確指定的屬性,則繼承root容器資料檔案屬性SEED
SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
SYSAUX DATAFILES SIZE 100M123456789101112

2、建立cdb資料庫

詳細步驟參考12c下手工建立非cdb資料庫,以下部分省略每一步驟詳細描述,後面列出差異

--設定環境變數
$ export ORACLE_SID=cdb1
$ export ORACLE_UNQNAME=cdb1--建立相應目錄
$ mkdir -pv /app/oracle/ora12c/oradata/cdb1
$ mkdir -pv /app/oracle/ora12c/oradata/pdbseed--生成引數檔案
$ vi $ORACLE_HOME/dbs/initcdb1.ora
DB_NAME=cdb1
CONTROL_FILES='/app/oracle/ora12c/oradata/cdb1/contorl01.ctl'MEMORY_TARGET=380m
ENABLE_PLUGGABLE_DATABASE=true--開始建庫
$ sqlplus / as sysdba
SQL> create spfile from pfile='$ORACLE_HOME/dbs/initcdb1.ora';
SQL> startup nomount;
SQL> CREATE DATABASE cdb1
  USER SYS IDENTIFIED BY pass
  USER SYSTEM IDENTIFIED BY pass
  LOGFILE GROUP 1 ('/app/oracle/ora12c/oradata/cdb1/redo01a.log','/app/oracle/ora12c/oradata/cdb1/redo01b.log') 
             SIZE 100M BLOCKSIZE 512,          GROUP 2 ('/app/oracle/ora12c/oradata/cdb1/redo02a.log','/app/oracle/ora12c/oradata/cdb1/redo02b.log') 
             SIZE 100M BLOCKSIZE 512
  MAXLOGHISTORY 1
  MAXLOGFILES 16
  MAXLOGMEMBERS 3
  MAXDATAFILES 1024
  CHARACTER SET AL32UTF8
  NATIONAL CHARACTER SET AL16UTF16
  EXTENT MANAGEMENT LOCAL
  DATAFILE '/app/oracle/ora12c/oradata/cdb1/system01.dbf' SIZE 700M
  SYSAUX DATAFILE '/app/oracle/ora12c/oradata/cdb1/sysaux01.dbf' SIZE 550M
  DEFAULT TABLESPACE deftbs
     DATAFILE '/app/oracle/ora12c/oradata/cdb1/deftbs01.dbf' SIZE 500M
  DEFAULT TEMPORARY TABLESPACE tempts1
     TEMPFILE '/app/oracle/ora12c/oradata/cdb1/temp01.dbf' SIZE 20M 
  UNDO TABLESPACE undotbs1
     DATAFILE '/app/oracle/ora12c/oradata/cdb1/undotbs01.dbf' SIZE 200M 
  ENABLE PLUGGABLE DATABASE   
    SEED
    FILE_NAME_CONVERT = ('/app/oracle/ora12c/oradata/cdb1/', 
'/app/oracle/ora12c/oradata/pdbseed/')
    SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
    SYSAUX DATAFILES SIZE 100M
  USER_DATA TABLESPACE usertbs
    DATAFILE '/app/oracle/ora12c/oradata/pdbseed/usertbs01.dbf' SIZE 200M;--填充資料字典,如果是12cR2版本,則直接執行catcdb.sql代替以下指令碼   
--使用sysdba許可權執行以下指令碼
SQL> @?/rdbms/admin/catalog.sql    --資料庫字典,動態檢視建立等
SQL> @?/rdbms/admin/catproc.sql    --PL/SQL存過過程相關程式碼
SQL> @?/rdbms/admin/utlrp.sql      --編譯--使用SYSTEM使用者執行以下指令碼
SQL> @?/sqlplus/admin/pupbld.sql   #SQL*Plus相關
SQL> select 'Leshami' Author,'http://blog.csdn.net/leshami' Blog,  2  '645746311' QQ from dual;
AUTHOR  BLOG                         QQ------- ---------------------------- ---------Leshami http://blog.csdn.net/leshami 645746311--驗證結果
SQL> SELECT name,  2         DECODE (cdb,  3                 'YES', 'Multitenant Option enabled',  4                 'Regular 12c Database: ')  5            "Multitenant Option",  6         open_mode,  7         con_id  8  FROM   v$database;
NAME      Multitenant Option         OPEN_MODE                CON_ID--------- -------------------------- -------------------- ----------CDB1      Multitenant Option enabled READ WRITE                    01234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586

三、更多參考

Oracle 12c多租戶架構及優缺點

http://docs.oracle.com/database/122/ADMIN/creating-and-configuring-an-oracle-database.htm

http://docs.oracle.com/database/122/ADMIN/creating-and-configuring-a-cdb.htm





About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub( http://blog.itpub.net/26736162 )、部落格園( http://www.cnblogs.com/lhrbest )和個人weixin公眾號( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號: 230161599 (滿) 、618766405

● weixin群:可加我weixin,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2018-10-01 06:00 ~ 2018-10-31 24:00 在魔都完成

● 最新修改時間:2018-10-01 06:00 ~ 2018-10-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店 https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書 http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班 http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁 https://lhr.ke.qq.com/

........................................................................................................................

使用 weixin客戶端 掃描下面的二維碼來關注小麥苗的weixin公眾號( xiaomaimiaolhr )及QQ群(DBA寶典)、新增小麥苗weixin, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2215902/,如需轉載,請註明出處,否則將追究法律責任。

相關文章