手工建立資料庫

dotaddjj發表於2011-08-10

Oracle資料庫的啟動分為三個狀態nomountmountopen,三個狀態需要的檔案了spfilecontrolfiledatafilelog file。第一次看eygle的《循序漸進》的第一章就是手工建立資料庫解析。當時由於是5個月前剛接觸oracle,很多東西都不會很理解,現在這幾天又好好看了下,期間我也手工建立資料庫一兩次,曬下其中的有些注意的地方。

1 首先我們先做點準備工作吧,oracle軟體肯定需要安裝的吧,然後資料庫檔案的儲存目錄

Mkdir oracle_baseadminsfadump

Mkdir oracle_baseadminsfbdump 準備用於儲存警告日誌檔案和後臺跟蹤日誌

Mkdir oracle_baseadminsfcdump

Mkdir oracle_baseadminsfudump 準備用於儲存使用者跟蹤日誌

Mkdir oracle-baseoradatasf 準備儲存資料檔案 日誌檔案 控制檔案

2 資料庫是由例項來訪問的,首先需要我們利用oradim工具來建立一個資料庫例項

C:>Oradim -new -sid sf

資料庫例項sf的服務已經註冊到windows services中去,此時例項並不是os上面的提示的建立成功,例項在nomount建立成功啟動需要sga和後臺程式。

3 但是此時例項是已經建立完畢了,但是如何啟動例項了,首先我們需要sys使用者連入未啟動的資料庫例項,這個時候是需要sys使用者密碼驗證檔案,利用工具orapwd來建立

C:>Orapwd file=oracle_homedatabaseorapwsf. Entries=2 password=oracle

上述的entriessys指定的最大使用者數。因為資料庫例項未啟動,普通使用者無法連入此時sys使用者可以透過密碼驗證檔案來啟動資料庫,就需要密碼驗證檔案。

4 例項建立已經完成,密碼驗證檔案也已經生成,但是此時由於沒有spfile或者pfile引數檔案,我們只能

C:>Set oracle_sid=sf

指定oracle_sid,讓作業系統可以透過oracle_sid來啟動資料庫對應的後臺程式

C:>sqlplus sys/oracle as sysdba;

此時是無法startup nomount的了。

此時我們可以手工建立一個pfile

Mkdir oracle_homedatabaseinitsf.ora

此時我們建立了一個pfile引數檔案或者cp一個別的例項pfile來修改,不過還是手工建立吧,pfile檔案中在我以前的nomount狀態資料庫詳解中記載到pfile檔案中只需要一個引數就能啟動資料庫,那就是db_name=sf,我們在pfile預設引數下建立一個只有一個db_name引數的pfile檔案。

Sql>startup nomount

資料庫例項此時已經可以啟動了,此時我們已經只用了上面三步就把一個只安裝oracle軟體的機器成功的建立了資料庫例項並啟動到nomount狀態。

5 nomount狀態是oracle例項啟動過程,此時資料庫分配sgaoracle後臺程式,此時我們並沒有涉及到控制檔案和資料檔案 日誌檔案中物理檔案的建立,接下來我們需要執行建庫指令碼。

create database sf

datafile 'd:oracleproduct10.2.0oradatasfsystem01.dbf' size 100M

default temporary tablespace temp tempfile 'd:oracleproduct10.2.0oradatasftemp01.dbf' size 100M

undo tablespace "undotb" datafile 'd:oracleproduct10.2.0oradatasfundotb01.dbf' size 100M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED

sysaux datafile 'd:oracleproduct10.2.0oradatasfsysaux01.dbf' size 100M

logfile group 1 ('d:oracleproduct10.2.0oradatasfredo01.log') size 10M,

group 2 ('d:oracleproduct10.2.0oradatasfredo02.log') size 10M,

group 3 ('d:oracleproduct10.2.0oradatasfredo03.log') size 10M;

今天早上我執行此指令碼,出現很多次的失敗,由於是oracle10G,我在上述指令碼中

default temporary tablespace temp tempfile 'd:oracleproduct10.2.0oradatasftemp01.dbf' size 100M 後習慣的加上了extent management local,結果錯誤一次,查閱資料因為是10G資料庫都是預設的本地管理extent,不存在字典管理表空間,所以附加extent management local反而報錯。剛開始上述指令碼中沒有sysaux datafile 'd:oracleproduct10.2.0oradatasfsysaux01.dbf' size 100M,執行時再次報錯,因為sysaux作為oracle10G中的system輔助表空間必須在建庫指令碼中指定。同樣可以覺得oracle10G的必須的表空間是system sysaux temp undotb也就是系統表空間和輔助系統表空間,臨時表空間和回滾表空間是必須的,建庫指令碼中必須指定。但是當我再次執行上述指令碼還是會報錯,這時候想到上面的pfile檔案,pfile檔案中由於只指定了db_name引數,由於mount狀態需要controlfile,個人嘗試在pfile中載入如下內容

pfile檔案:

db_name=sf

control_files=("D:oracleproduct10.2.0oradatasfcontrol01.ctl", "D:oracleproduct10.2.0oradatasfcontrol02.ctl", "D:oracleproduct10.2.0oradatasfcontrol03.ctl")

undo_management='AUTO'

undo_tablespace='undotb'

後面的undo的兩個引數,經過測試在建庫成功後是即使刪除上述undo兩個引數資料庫都能從nomout mount open,等於如果pfile中只有db_name引數,資料庫是無法mount狀態的,需要pfile來指定controlfile

(由於此pfile中沒有設定background_dump_destuser_dump_dest等用於存放後臺日誌 警告日誌 使用者跟蹤日誌,預設的都儲存在oracle_homerdbmstrace下了,最好還是指定上述引數吧跟蹤日誌儲存在在開頭的指定的目錄中,方便檢視)

6 catalog.sql建立資料字典

start d:oracleproduct10.2.0db_1rdbmsadmincatalog.sql

7 catproc.sql建立系統包

start d:oracle]product10.2.0db_1rdbmsadmincatproc.sql

8執行pupbld.sql

connect system/manager

start d:oracleproduct10.2.0db_1sqlplusadminpupbld.sql

9 重新關閉資料庫並開啟

shutdown immediate

startup nomount

alter database mount

alter database open

關於上述的6,7,8指令碼由於內容較多,個人沒有過多分析裡面的指令碼,個人覺得有些有些oracle的東西剛開始接觸第一次不是一下子就弄明白的,需要反覆的檢視複習。例如這篇原創筆記大概5個月前我是絕對寫不出來的,而且看eygle的書基本上是90%以上完全不懂,現在回過頭來看裡面的手工建庫雖然有點複雜,但是自己確實能理清楚了,而且還能有點自己的想法!學習就是一個反覆的過程!堅持!

[@more@]

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

相關文章