建立Oracle資料庫
建立Oracle資料庫(以Oracle10g為例)
有兩種建立資料庫的方式,一種是以命令列指令碼方式,即手動方式建立;另一種是利用Oracle提供的資料庫設定精靈來建立。本篇主要介紹在Unix和Windows下以命令列指令碼方式建立Oracle資料庫。
一個完整的資料庫系統,應包括一個物理結構、一個邏輯結構、一個記憶體結構和一個進程結構,如果要建立一個新的資料庫,則這些結構都必須完整的建立起來。
一、在Unix下建立資料庫
1.確定資料庫名、資料庫執行個體名和服務名
關於資料庫名、資料庫執行個體名和服務名,我之前有專門用一篇來詳細介紹。這裡就不再說明了。
2.建立參數檔案
參數檔案很確定了資料庫的總體結構。Oracle10g有兩種參數檔案,一個是文本參數檔案,一種是伺服器參數檔案。在建立資料庫時先建立文本參數檔案,在資料庫建立後,可以由檔案參數檔案建立伺服器參數檔案。文本參數檔案的取名方式為initORACLE_SID.ora,其中,ORACLE_SID是資料庫執行個體名。其名稱及路徑為:
/home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/initORACLE_SID.ora
其中,DB_NAME為資料庫名。所以,應建立一個以之命名的目錄,並將文本參數檔案存放在上述目錄中。假設新建立的資料庫名為MYORACLE,SID與資料庫名一致。則上述目錄實際為:
/home/app/oracle/product/10.1.0/admin/MYORACLE/pfile/initMYORACLE.ora
1)參數檔案的介紹
參數檔案決定著資料庫的總體結構,用於設定資料庫的近260個系統參數。下面分類別說明一下各參數的作用,關於參數的詳細使用說明請參考Oracle官方參考文檔。
a.資料庫標識類參數
DB_NAME: 資料庫名,此參數在建立資料前決定,資料庫建立後修改時,必須建控制檔案
DB_DOMAIN: 資料庫網域名稱,用於區別同名資料庫。資料庫名與網域名稱一起構成了全域資料庫名
INSTANCE_NAME: 資料庫執行個體名,可以與資料庫相同
SERVICE_NAMES: 資料庫服務名,與全域資料庫名相同如果沒有網域名稱,則服務名就是資料庫名
b.日誌管理類參數
LOG_ARCHIVE_START: 是否啟動自動歸檔進程ARCH
LOG_ARCHIVE_DEST: 歸檔記錄檔儲存目錄
LOG_ARCHIVE_FORMAT: 歸檔記錄檔的預設檔案儲存體格式
LOG_ARCHIVE_DUPLEX_DEST: 歸檔記錄檔鏡像儲存目錄(Oracle8以上)
LOG_ARCHIVE_DEST_n: 歸檔記錄檔儲存目錄(Oracle8i以上)
LOG_ARCHIVE_DEST_STATE_n: 設定參數LOG_ARCHIVE_DEST_n失效或生效
LOG_ARCHIVE_MAX_PROCESSES: 設定自動歸檔進程的個數
LOG_ARCHIVE_MIN_SUCCEED_DEST: 設定最少的成功歸檔日誌儲存目錄的個數
LOG_CHECKPOINT_INTERVAL: 根據日誌數量設定檢驗點頻率
LOG_CHECKPOINT_TIMEOUT: 根據時間間隔設定檢驗點頻率
c.記憶體管理參數
DB_BLOCK_SIZE: 標準資料區塊大小
DB_nK_CACHE_SIZE: 非標準資料區塊資料緩衝區大小
SHARED_POOL_SIZE: 共用池大小控制參數,單位為位元組
DB_CACHE_SIZE: 標準資料區塊資料緩衝區大小
DB_BLOCK_BUFFERS: 資料緩衝區大小,9i之後已放棄使用
LOG_BUFFER: 日誌緩衝區大小
SORT_AREA_SIZE: 排序區大小
LARGE_POOL_SIZE: 大池大小
JAVA_POOL_SIZE: Java池大小
d.最大許可使用者數量限制參數
LICENSE_MAX_SESSIONS:資料庫可以串連的最大會話數
LICENSE_MAX_USERS:資料庫支援的最大使用者數
LICENSE_MAX_WARNING:資料庫最大警告會數(會話資料達到這個值時,產生新會話時就會產生警告資訊)
e.系統跟蹤資訊管理參數
USER_DUMP_DEST:使用者追蹤檔案產生的設定
BACKGROUND_DUMP_DEST:後台進程追蹤檔案產生的位置
MAX_DUMPFILE_SIZE:追蹤檔案的最大尺寸
f.系統效能最佳化與動態統計參數
SQL_TRACE:設定SQL跟蹤
TIMED_STATICS:設定動態統計
AUDIT_TRAIL:啟動Database Audit功能
g.其他系統參數
CONTROL_FILES:控制檔案名稱及路徑
Undo_MANAGMENT:Undo空間管理方式
ROLLBACK_SEGMENTS:為這個常式分配的回退段名
OPEN_CURSORS:一個使用者一次可以開啟的遊標的最大值
PROCESSES:最大進程數,包括後台進程與伺服器處理序
IFILE:另一個參數檔案的名字
DB_RECOVERY_FILE_DEST:自動Database Backup目錄
DB_RECOVERY_FILE_SIZE:Database Backup檔案大小
2)參數檔案樣式
db_name=myoracle
instance_name=myoracle
db_domain=fangys.xiya.com
service_names=myoracle.fangys.xiya.com
control_files=(/home/app/oracle/product/10.1.0/oradata/myoracle/control01.ctl,
/home/app/oracle/product/10.1.0/oradata/myoracle/control02.ctl,
/home/app/oracle/product/10.1.0/oradata/myoracle/control03.ctl)
db_block_size=8192
user_dump_dest=/home/app/oracle/product/10.1.0/admin/myoracle/udump
background_dump_dest=/home/app/oracle/product/10.1.0/admin/myoracle/bdump
core_dump_dest=/home/app/oracle/product/10.1.0/admin/myoracle/cdump
db_recovery_file_dest=/home/app/oracle/product/10.1.0/flash_recover_area
db_recovery_file_size=100G
...
3.設定作業系統參數
$ORACLE_SID=myoracle
$export ORACLE_SID
4.啟動執行個體並建立資料庫
在建立資料庫之前,首先要以新的資料庫參數啟動資料庫執行個體,因為這時資料庫的控制檔案還沒有產生,不能MOUNT或OPEN資料庫。啟動執行個體時,Oracle只按照記憶體參數分配SGA區,啟動系統後台進程。
$sqlplus "sys/pass as sysdba"
sql>startup nomount
如果參數檔案不在規定的目錄中,可以在啟動執行個體時指定參數檔案:
sql>startup pfile=/export/home/user/initmyoracle.init nomount
在執行個體啟動後就可以使用CREATE DATABASE命令建立資料。其詳細文法請參考Oracle官方SQL參考文檔。這裡以執行個體來介紹:
sql>CREATE DATABASE myoracle
MAXINSTANCE 1
MAXLOGHISTORY 216
MAXLOGFILES 50
MAXLOGMEMBERS 5
DATAFILE '/home1/app/oracle/product/10.1.0/oradata/myoracle/system01.dbf' SIZE 500m
AUTOEXTEND ON NEXT 100m MAXSIZE UNLIMITED
LOGFILE
GROUP 1('/home1/app/oracle/product/10.1.0/oradata/myoracle/log1a.log',
'/home1/app/oracle/product/10.1.0/oradata/myoracle/log1b.log') SIZE 10m,
GROUP 2('/home1/app/oracle/product/10.1.0/oradata/myoracle/log2a.log',
'/home1/app/oracle/product/10.1.0/oradata/myoracle/log2b.log') SIZE 10m,
GROUP 3('/home1/app/oracle/product/10.1.0/oradata/myoracle/log3a.log',
'/home1/app/oracle/product/10.1.0/oradata/myoracle/log3b.log') SIZE 10m,
Undo TABLESPACE undotbs DATAFILE
'/home1/app/oracle/product/10.1.0/oradata/myoracle/undotbs01.dbf' size 200m
AUTOEXTEND ON NEXT 100m MAXSIZE UNLIMITED
DEFAULT TEMPORARY TALESPACE temp TEMPFILE
'/home1/app/oracle/product/10.1.0/oradata/myoracle/temp01.dbf' size 325m
AUTOEXTEND ON NEXT 100m MAXSIZE UNLIMITED
DEFAULT TABLESPACE users DATAFILE
'/home1/app/oracle/product/10.1.0/oradata/myoracle/usertbs01.dbf' size 1000m
CHARACTER SET ZHS16GBK;
這裡說明一下CREATE DATABASE語句的各個關鍵字的含義:
DATAFILE:SYSTEM資料表空間的資料檔案定義
LOGFILE:記錄檔組的定義
Undo_TABLESPACE:重做資料表空間的定義
DEFAULT TEMPORTY TABLESPACE:預設暫存資料表空間的定義
DEFAULT TABLESPACE:預設資料資料表空間的定義。
5.建立資料字典
在資料庫建立結束後,資料庫自動處於OPEN狀態下,這時所有V$××××類資料字典都可以查詢。而其它資料字典,如DBA_DATA_FILES、DBA_TABLESPACES等都不存在,必須通過下列驟為系統建立資料字典。
1)載入常用的資料字典包
sql>@/home/app/oracle/product/10.1.0/db_1/rdbms/catalog
2)載入PL/SQL程式包
sql>@/home/app/oracle/product/10.1.0/db_1/rdbms/admin/catproc
3)載入資料複製支援軟體包
sql>@/home/app/oracle/product/10.1.0/db_1/rdbms/admin/catrep
4)載入Java程式包
sql>@/home/app/oracle/product/10.1.0/db_1/javavm/install/initjvm
5)載入系統內容檔案
sql>connect system/pass
sql>@/home/app/oracle/product/10.1.0/db_1/sqlplus/admin/pupbld
二、在Windows下建立資料庫
Oracle執行個體在Windows下表現為作業系統服務。在windows下,使用命令列方式建立資料的方法有所不同,差別在於在Windows下,需要先建立資料庫服務和執行個體。
1.確定資料庫名、資料庫執行個體名和服務名
(略)
2.建立參數檔案
在Windows下的參數檔案名稱及路徑如下:
d:\oracle\product\10.1.0\admin\DB_NAME\pfile\init.ora(oracle10g)
d:\orant\database\iniORACLE_SID.ora(oracle7,oracle8)
參資料檔案內容與前述一致。這裡不再說明。
3.選擇資料庫執行個體
設定環境變數ORACLE_SID
c:\>set ORACLE_SID=資料庫執行個體名
4.建立資料庫執行個體
在Windows中建立資料庫執行個體的命令為Oradim.exe,是一個可執行檔,可以在作業系統符號下直接運行。直接輸入oradim顯示此命令的協助。
c:\>Oradim
下面對Oradim命令的參數進行一個說明
-------------------------------
-NEW 表示建立一個執行個體
-EDIT 表示修改一個執行個體
-DELETE 表示刪除一個執行個體
-SID sid 指定要啟動的執行個體名稱
-SRVC service 指定要啟動的服務名稱
-INTPWD password 以Internal方式串連資料庫時的口令字
-MAXUSERS count 該執行個體可以串連的最大使用者數
-USRPWD password 指定內部使用者的口令,如是作為Windows管理登入,不用此參數
-PFILE pfile 該執行個體所使用的參數檔案名稱及路徑
-STARTTYPE srvc|inst|srvc,inst 啟動選項(srvc:只啟動服務,inst:啟動執行個體,服務必須先啟動,srvc,inst:服務和執行個體同時啟動)
-SHUTTYPE srvc|linst|srvc,inst 關閉選項(srvc:只關閉服務,執行個體必須已關閉,inst:只關閉執行個體,srvc,inst:服務和執行個體同時關閉)
-STARTMODE a|m 建立執行個體所使用的模式(a:自動,即windows啟動時自動啟動 m:手動)
-SHUTMODE a|i|m 關閉執行個體時所使用的模式(a:abort異常方式,i:immediate立即方式,n:normal正常方式)
----------------------------
例:建立一個資料庫執行個體
c:\>oradim -NEW -SID myoracle -STARTMODE m -PFILE "d:\fangys\initmyoracle.ora"
或
c:\>oradim -NEW -SRVC OracleServicemyoracle -STARTMODE m -PFILE "d:\fangys\initmyoracle.ora"
例:修改一個資料執行個體
c:\>oradim -EDIT -SID myoracle -STARTMODE a
或
c:\>oradim -EDIT -SRVC OracleServicemyoracle -STARTMODE a
例:刪除一個執行個體
c:\>oradim -DELETE -SID myoracle
或
c:\>oradim -DELETE -SRVC Oracleservicemyoracle
例:啟動服務與執行個體
c:\>oradim -STARTUP -SID myoracle -STARTTYPE srvc,inst
只啟動服務
c:\>oradim -STARTUP -SID myoracle -STARTTYPE srvc
啟動執行個體:
c:\>oradim -STARTUP -SID myoracle -STARTTYPE inst
例:關閉服務與執行個體
c:\>oradim -SHUTDOWN -SID myoracle
c:\>oradim -SHUTDOWN -SID myoracle -SHUTTYPE srvc,inst
5.啟動執行個體並建立資料庫
c:\>oradim -NEW -SID myoracle -INTPWD syspass -STARTMODE a -PFILE d:\fangys\initmyoracle.ora
c:\>set ORACLE_SID=myoracle
c:\>sqlplus sys/syspass as sysdba
sql>startup -pfile=d:\fangys\initmyoracle.ora nomount
sql>CREATE DATABASE myoracle
logfile group...
...
6.建立資料字典
sql>@d:\oracle\product\10.1.0\db_1\rdbms\admin\catalog.sql;
sql>@d:\oracle\product\10.1.0\db_1\rdbms\admin\catproc.sql;
sql>@d:\oracle\product\10.1.0\db_1\rdbms\admin\catrep.sql;
sql>@d:\oracle\product\10.1.0\db_1\javavm\install\initjvm.sql;