正文 在之前的博文當中梳理了關於DBCA靜默方式創建資料庫的過程,本文就手工通過SQL PLUS客戶端採用 語句創建資料庫。這種建庫方式就是完全使用手工SQL語句創建資料庫,通常而言都會推薦DBCA圖形界面方式創建,因為更為直觀,但並非所有場景都有圖形界面。DBCA也可以使用靜默方式進行創建資料庫, ...
正文
在之前的博文當中梳理了關於DBCA靜默方式創建資料庫的過程,本文就手工通過SQL*PLUS客戶端採用CREATE DATABASE
語句創建資料庫。這種建庫方式就是完全使用手工SQL語句創建資料庫,通常而言都會推薦DBCA圖形界面方式創建,因為更為直觀,但並非所有場景都有圖形界面。DBCA也可以使用靜默方式進行創建資料庫,詳細可參考我另一篇博文:Oracle 11g R2創建資料庫之DBCA靜默方式
手工方式是採用執行CREATE DATABASE
SQL語句完成的。相比較DBCA工具建庫而言,手工方式可以將建庫語句編寫成腳本語句,可以通過執行腳本來完成建庫。在完成手工方式創建資料庫之前還需進行額外的操作以保證資料庫可用性:
- 創建數據字典以及基於數據字典視圖;
- 創建標準的PL/SQL包。
這些操作也都可以寫進腳本當中執行,簡化了操作步驟。
關於手工方式創建資料庫詳細步驟可以參考官方文檔:Creating a Database with the CREATE DATABASE Statement
環境準備
- 操作系統(OS):CentOS Linux release 7.5.1804 (Core)
- 資料庫版本(Oracle Database):Oracle Database 11g R2(11.2.0.4.0)
其中監聽也已經通過靜默方式配置啟動成功。
總體步驟
- 指定資料庫實例的SID
- 配置系統環境變數
- 指定資料庫管理員認證方式
- 創建初始化參數文件(pfile)
- 連接資料庫實例
- 創建伺服器參數文件(spfile)
- 啟動資料庫實例
- 執行CREATE DATABASE建庫語句
- 創建額外的表空間(如索引表空間)
- 執行腳本創建數據字典視圖
步驟解析
指定資料庫實例(SID)
SID是Oracle資料庫在同一伺服器上的唯一標識。通過環境變數ORACLE_SID
指定,在Linux系統下ORACLE_SID
是區分大小寫的,長度最大為8個字元,有兩種方式配置:
- 環境變數配置文件中指定,環境變數文件一般是oracle用戶home目錄下的
.bash_profile
;
$ grep ORACLE_SID /home/oracle/.bash_profile
export ORACLE_SID=dbabd #實例SID
- 會話級別直接使用命令
export
指定。
$ export ORACLE_SID=dbabd
配置系統環境變數
主要是配置ORACLE_HOME
環境變數值,並且將oracle命令路徑 $ORACLE_HOME/bin加入系統PATH變數中方便以使用,可以參考SID配置寫入環境變數文件當中。
$ grep ORACLE_HOME /home/oracle/.bash_profile
export ORACLE_HOME=/data/app/oracle/product/11.2.0/db_1 #Oracle Home目錄
export PATH=$PATH:$ORACLE_HOME/bin #命令加入系統環境變數中
指定管理員認證方式
根據官方文檔的描述,資料庫管理員的認證方式有如下方式:
- 通過密碼文件認證;
- 通過操作系統級別認證。
如果是通過操作系統認證,則用戶要是屬於dba組的成員,如果是密碼文件認證必須創建密碼文件:
$ orapwd file=$ORACLE_HOME/dbs/orapwdbabd password=oracle entries=10
創建初始化參數文件
這裡的初始化參數文件指的pfile,pfile可以能過文本編輯器進行編輯與修改,待實例啟動成功之後根據pfile創建伺服器參數文件(spfile)。spfile使有的資料庫參數能夠在實例運行中動態修改並且生效,大大增加了資料庫參數的可維護性。pfile和spfile文件預設存儲的路徑為 $ORACLE_HOME/dbs。pfile的命名格式為initSID.ora,本文創建的pfile文件名為initdbabd.ora,根據官方文檔的要求,初始化參數文件最少都要包含如下參數DB_NAME
、CONTROL_FILES
和MEMORY_TARGET
,initdbabd.ora內容如下:
DB_NAME=dbabd
CONTROL_FILES=(/data/app/oracle/data/dbabd/control01.ctl,/data/app/oracle/data/dbabd/control02.ctl)
MEMORY_TARGET=300M
也可以通過模板參數文件init.ora進行修改,init.ora內容如下:
$ cat init.ora | grep -v ^$ | grep -v ^#
db_name='ORCL'
memory_target=1G
processes = 150
audit_file_dest='<ORACLE_BASE>/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='<ORACLE_BASE>/flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='<ORACLE_BASE>'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
control_files = (ora_control1, ora_control2)
compatible ='11.2.0'
連接資料庫實例
在連接之前確保當前環境變數的配置,主要檢查的是資料庫實例SID變數ORACLE_SID的值:
$ echo $ORACLE_SID
dbabd
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Jan 11 15:16:12 2019
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to an idle instance.
SQL>
創建伺服器參數文件
通過create spfile from pfile
語句從初始化參數文件創建伺服器參數文件,路徑也是保存在 $ORACLE_HOME/dba目錄下:
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Jan 11 15:20:04 2019
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to an idle instance.
SQL> create spfile from pfile;
File created.
$ pwd
/data/app/oracle/product/11.2.0/db_1/dbs
$ ls *.ora
initdbabd.ora init.ora spfiledbabd.ora
啟動資料庫實例
啟動資料庫實例,因為當前只有參數文件,所以只能將實例啟動到NOMOUNT狀態:
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 313159680 bytes
Fixed Size 2252824 bytes
Variable Size 222302184 bytes
Database Buffers 83886080 bytes
Redo Buffers 4718592 bytes
SQL> select status from v$instance;
STATUS
------------------------------------
STARTED
即使直接執行命令startup
也是只能啟動到NOMOUNT狀態,並會報ORA-00205
錯誤,因為當前只有參數文件。
SQL> startup;
ORACLE instance started.
Total System Global Area 313159680 bytes
Fixed Size 2252824 bytes
Variable Size 222302184 bytes
Database Buffers 83886080 bytes
Redo Buffers 4718592 bytes
ORA-00205: error in identifying control file, check alert log for more info
執行建庫語句
最關鍵的一個步驟,就是執行CREATE DATABASE
建庫語句。開始創建資料庫之前檢查確保:
- 數據文件目錄存在
- 日誌文件目錄存在
- 控制文件目錄存在
本文以上三類文件的路徑統一為 /data/app/oracle/data/dbabd。
官方文檔上有CREATE DATABASE
語句的模板:Issue the CREATE DATABASE Statement,也可以根據需求自定義CREAET DATABASE
語句,以下是通過模板進行修改的語句:
CREATE DATABASE dbabd -- 資料庫名,DB_NAME
USER SYS IDENTIFIED BY oracle -- sys用戶密碼
USER SYSTEM IDENTIFIED BY oracle -- system用戶密碼
LOGFILE GROUP 1 ('/data/app/oracle/data/dbabd/redo01.log') SIZE 100M BLOCKSIZE 512, -- 線上日誌
GROUP 2 ('/data/app/oracle/data/dbabd/redo02.log') SIZE 100M BLOCKSIZE 512,
GROUP 3 ('/data/app/oracle/data/dbabd/redo03.log') SIZE 100M BLOCKSIZE 512
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
CHARACTER SET AL32UTF8 -- 資料庫字元集
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/data/app/oracle/data/dbabd/system01.dbf' SIZE 325M REUSE -- 各個表空間數據文件
SYSAUX DATAFILE '/data/app/oracle/data/dbabd/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE '/data/app/oracle/data/dbabd/users01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE temp
TEMPFILE '/data/app/oracle/data/dbabd/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/data/app/oracle/data/dbabd/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
以上註釋只是為了更好解析語句的內容,實際語句當中並不存在註釋內容。
執行以上CREATE DATABASE
語句:
SQL> CREATE DATABASE dbabd
2 USER SYS IDENTIFIED BY oracle
3 USER SYSTEM IDENTIFIED BY oracle
4 LOGFILE GROUP 1 ('/data/app/oracle/data/dbabd/redo01.log') SIZE 100M BLOCKSIZE 512,
5 GROUP 2 ('/data/app/oracle/data/dbabd/redo02.log') SIZE 100M BLOCKSIZE 512,
6 GROUP 3 ('/data/app/oracle/data/dbabd/redo03.log') SIZE 100M BLOCKSIZE 512
7 MAXLOGFILES 5
8 MAXLOGMEMBERS 5
9 MAXLOGHISTORY 1
10 MAXDATAFILES 100
11 CHARACTER SET AL32UTF8
12 NATIONAL CHARACTER SET AL16UTF16
13 EXTENT MANAGEMENT LOCAL
14 DATAFILE '/data/app/oracle/data/dbabd/system01.dbf' SIZE 325M REUSE
15 SYSAUX DATAFILE '/data/app/oracle/data/dbabd/sysaux01.dbf' SIZE 325M REUSE
16 DEFAULT TABLESPACE users
17 DATAFILE '/data/app/oracle/data/dbabd/users01.dbf'
18 SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
19 DEFAULT TEMPORARY TABLESPACE temp
20 TEMPFILE '/data/app/oracle/data/dbabd/temp01.dbf'
21 SIZE 20M REUSE
22 UNDO TABLESPACE undotbs
23 DATAFILE '/data/app/oracle/data/dbabd/undotbs01.dbf'
24 SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
Database created.
創建額外表空間(可選)
這一步是可選的,如果建庫語句創建的資料庫已經滿足需求,這步可以跳過,本文這一步創建一個索引表空間:
SQL> create tablespace idx_tbs datafile '/data/app/oracle/data/dbabd/idx_tbs01.dbf' size 100M;
Tablespace created.
創建數據字典視圖
執行額外的SQL腳本創建數據字典、視圖、同義詞、PL/SQL包等。腳本所在路徑為 ORACLE_HOME/rdbms/admin和 $ORACLE_HOME/sqlplus/admin,關於執行的SQL腳本及其作用可以參考官方文檔:Run Scripts to Build Data Dictionary Views
以SYS用戶執行:
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/rdbms/admin/utlrp.sql
執行完成後切換到SYSTEM用戶執行:
@?/sqlplus/admin/pupbld.sql
在SQL*PLUS當中,?代表的是$ORACLE_HOME。
至此,手工方式創建資料庫完成,可以通過sqlplus進行查詢實例狀態:
SQL> select instance_name,startup_time,status from v$instance;
INSTANCE_NAME STARTUP_TIME STATUS
------------------------------------------------ ------------------- ------------------------------------
dbabd 2019-01-11 15:26:49 OPEN
也可以通過監聽查看實例狀態:
$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 11-JAN-2019 16:53:17
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 11-JAN-2019 10:35:36
Uptime 0 days 6 hr. 17 min. 41 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /data/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /data/app/oracle/diag/tnslsnr/dbabd/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbabd)(PORT=1521)))
Services Summary...
Service "dbabd" has 1 instance(s).
Instance "dbabd", status READY, has 1 handler(s) for this service...
The command completed successfully
參考
https://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm#ADMIN11073
☆〖本人水平有限,文中如有錯誤還請留言批評指正!〗☆