1. 程式人生 > 資料庫 >Oracle 12c實現手工建庫而非CDB及CDB建立的方法

Oracle 12c實現手工建庫而非CDB及CDB建立的方法

前言

相信大家應該都知道,對於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=nocdb

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

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

$ env|grep ORA
ORACLE_UNQNAME=nocdb
ORACLE_SID=nocdb
ORACLE_BASE=/app/oracle/ora12c
ORACLE_HOSTNAME=ydq05.ydq.com
ORACLE_HOME=/app/oracle/ora12c/db_1

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

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

通常情況下,使用以下方式具有所需許可權的管理員進行身份驗證:

使用密碼檔案

具有作業系統認證(此演示中使用作業系統認證)

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

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

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

$ mkdir -pv /app/oracle/ora12c/oradata/nocdb #建立存放資料檔案的目錄

$ vi $ORACLE_HOME/dbs/initnocdb.ora

DB_NAME=nocdb
CONTROL_FILES='/app/oracle/ora12c/oradata/nocdb/contorl01.ctl'
MEMORY_TARGET=380m

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

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

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

步驟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 2017

Copyright (c) 1982,2013,Oracle. All rights reserved.

Connected to an idle instance.

SQL>

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

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

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

步驟8:啟動例項

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

SQL> startup nomount;
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size     2296576 bytes
Variable Size    641729792 bytes
Database Buffers   419430400 bytes
Redo Buffers    5480448 bytes

步驟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;

步驟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;

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

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

使用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 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     0

步驟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。

以下為幾個主要差異部分

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

2、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初始化引數

3、可以為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 100M

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,7   con_id
 8 FROM v$database;

NAME  Multitenant Option   OPEN_MODE    CON_ID
--------- -------------------------- -------------------- ----------
CDB1  Multitenant Option enabled READ WRITE     0

三、更多參考

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支援。