對於許多數據庫管理員來說Oracle究竟是不是一個難以管理和駕馭的怪獸級數據庫會不會讓他們管理生涯飽受折磨?當看到其命令行界面時很多人會問這麼一個問題如果你想通過一個應用程序操控使用這個數據庫那麼你應當是一名終端用戶;因此對這類人而言界面越透明當然越好而命令行界面顯然不夠理想而如果你想成為精通數據庫的技術員成為排除數據庫故障的檢修員成為當大家碰到數據庫難題時會向他求助的萬能先生的話你就不能嫌髒怕累而要不辭勞苦地深入了解數據庫的結構和機理這樣你才能知道數據庫到底怎麼運作發生了什麼問題命令行界面正是你需要適應並了解的東西
為什麼要手動創建數據庫?
創建數據庫也應該是你要深入了解的內容之一當然Oracle本身提供有圖形用戶界面工具可以幫助用戶出色地完成這項任務但是如果失敗了呢?如果你在創建的過程中出現了警告或錯誤信息呢?這時候你應當怎麼辦?你是否想知道在這些信息背後到底是哪裡出了問題?你是否想要更進一步了解Oracle在數據庫創建的過程中到底是怎麼變的戲法嗎?來手動創建一次數據庫相信就能為你闡明一切
當你手動創建一個數據庫時你就要在sqlplus提示符下輸入指令通常情況下你需要將這些指令添加到一個sql腳本隨後從sqlplus調用這個腳本假設所有的路徑和選項都正確設定的大小可用而且在數據庫創建過程中沒有達到容量的極限的話那麼整個創建過程應當順利運行而且如果你開發了一個想要部署到Oracle數據庫商的應用程序你的應用程序也可以提供一份數據庫創建腳本按照你設定的方式來運行
什麼時候使用手動方法創建數據庫?
顯然當你第一次學習Oracle時你應當使用手動方法來創建數據庫一旦你完全理解其中的奧妙你就可以考慮使用圖形用戶界面來簡化你的工作不過如果你想控制文件的命名規范建議你還是堅持使用手動方法此外當有新版本的Oracle數據庫發布時一定要通過手動方法檢查一下有什麼新選項添加到了創建數據庫的語法當中那如果你要創建一大堆特征相似的數據庫呢?這種時候手動創建的方法更具有吸引力因為這樣能夠減少我們的工作量
如何手動創建數據庫
首先我們把我們要創建的數據命名為DBJ接著至少你得給DBJ設置ORACLE_SID環境變量編輯initDBJora添加如下腳本
db_name=DBJ
然後啟動sqlplus發布如下指令
SQL> startup nomount;
SQL> create database;
Oracle會為所需要的所有參數設置一些默認值例如應當將數據文件控制文件放在哪裡分配多少內存等然後啟動實例不掛載任何文件創建數據庫指令(create database)將要求Oracle創建一個數據庫這個數據庫帶有最小系統和sysaux表空間等默認設置
不過現實中我們可能想要指定很多其他的選項下面我們來看看現實中創建Oracle數據庫腳本更真實的例子
connect / as sysdba;
startup nomount;
CREATE DATABASE dbj
DATAFILE
/u/oradata/sysdbjdbf size M
SYSAUX DATAFILE
/u/oradata/auxdbjdbf size M
UNDO TABLESPACE dbjundo DATAFILE
/u/oradata/unddbjdbf size M
LOGFILE
/u/oradata/rdodbjdbf size M
/u/oradata/rdodbjdbf size M
CHARACTER SET WEISOP
NATIONAL CHARACTER SET UTF
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE mytemp TEMPFILE
/u/oradata/tmpdbjdbf SIZE M
NOARCHIVELOG
MAXDATAFILES
MAXLOGFILES ;
# create the rest of the data dictionary
@?/rdbms/admin/catalogsql
@?/rdbms/admin/catprocsql
詳解創建的各階段
當我們發布startup nomount的指令時我們是讓Oracle以一種不同於平常使用的方式啟動不同在哪裡呢?我們讓Oracle其實我們讓Oracle只啟動實例而不安裝數據庫也不打開數據庫並啟動所有的後台進程並為系統全局區域(SGA)分配內存為什麼不啟動數據庫?因為在現階段我們還沒有一個可以掛載的數據庫也就是以一個有效形式存在的數據文件集合
當我們發出create database指令的時候Oracle將創建系統表空間sysaux表空間undo表空間和臨時表空間並為該數據庫設置字符集也就是設置數據文件的頭信息表明我們想要創建本地管理表空間還有就是設置歸檔或非歸檔模式一旦這些都完成了Oracle就會運行一個名為sqlbsq的神奇文件建議大家看看這個文件的內容會很有趣且很有用這是Oracle的自舉代碼(bootstrapping code)可以供我們查看並了解其中內容我們可以在$ORACLE_HOME/rdbms/adminsqlbsq目錄中找到這個sqlbsq文件注意這個文件會隨著版本的不同而有所改變所以定期查看一下其中的變化很能說明一些問題
這個運行之後就是創建Oracle數據字典了catalogsql和catprocsql只是在真正的數據字典上創建有用的視圖以及每個Oracle數據庫都需要有的各種存儲過程包和函數
結論
手動創建數據庫並不是一件只和命令行打交道的乏味單調的苦差事它可以很有趣也可以很有意義深入了解Oracle數據庫創建的過程有助於你理解數據庫的內部運作原理讓我們可以了解構成每個Oracle數據庫方方面面的元素在這個過程中我們可以了解更多關於initoraOracle所倚賴的自舉腳本數據字典的創建機制以及實例和數據庫之間的區別等等重要的知識
From:http://tw.wingwit.com/Article/program/Oracle/201311/18920.html