使用
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
Leshami
閱讀數: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。
以下為幾個主要差異部分
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初始化引數
根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/viewspace-2215902/,如需轉載,請註明出處,否則將追究法律責任。