一、在Unix下創(chuàng)建數(shù)據(jù)庫(kù)
1.確定數(shù)據(jù)庫(kù)名、數(shù)據(jù)庫(kù)實(shí)例名和服務(wù)名
關(guān)于數(shù)據(jù)庫(kù)名、數(shù)據(jù)庫(kù)實(shí)例名和服務(wù)名,我之前有專(zhuān)門(mén)用一篇來(lái)詳細(xì)介紹。這里就不再說(shuō)明了。
2.創(chuàng)建參數(shù)文件
參數(shù)文件很確定了數(shù)據(jù)庫(kù)的總體結(jié)構(gòu)。Oracle10g有兩種參數(shù)文件,一個(gè)是文本參數(shù)文件,一種是服務(wù)器參數(shù)文件。在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)先創(chuàng)建文本參數(shù)文件,
在數(shù)據(jù)庫(kù)創(chuàng)建后,可以由文件參數(shù)文件創(chuàng)建服務(wù)器參數(shù)文件。文本參數(shù)文件的取名方式為initORACLE_SID.ora,其中,ORACLE_SID是
數(shù)據(jù)庫(kù)實(shí)例名。其名稱(chēng)及路徑為:
/home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/initORACLE_SID.ora
其中,DB_NAME為數(shù)據(jù)庫(kù)名。所以,應(yīng)創(chuàng)建一個(gè)以之命名的目錄,并將文本參數(shù)文件存放在上述目錄中。假設(shè)新創(chuàng)建的數(shù)據(jù)庫(kù)名為MYORACLE,SID與數(shù)據(jù)庫(kù)名一致。則上述目錄實(shí)際為:
/home/app/oracle/product/10.1.0/admin/MYORACLE/pfile/initMYORACLE.ora
1)參數(shù)文件的介紹
參數(shù)文件決定著數(shù)據(jù)庫(kù)的總體結(jié)構(gòu),用于設(shè)置數(shù)據(jù)庫(kù)的近260個(gè)系統(tǒng)參數(shù)。下面分類(lèi)別說(shuō)明一下各參數(shù)的作用,關(guān)于參數(shù)的詳細(xì)使用說(shuō)明請(qǐng)參考Oracle官方參考文檔。
a.數(shù)據(jù)庫(kù)標(biāo)識(shí)類(lèi)參數(shù) DB_NAME:
數(shù)據(jù)庫(kù)名,此參數(shù)在創(chuàng)建數(shù)據(jù)前決定,數(shù)據(jù)庫(kù)創(chuàng)建后修改時(shí),必須建控制文件
DB_DOMAIN: 數(shù)據(jù)庫(kù)域名,用于區(qū)別同名數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)名與域名一起構(gòu)成了全局?jǐn)?shù)據(jù)庫(kù)名
INSTANCE_NAME: 數(shù)據(jù)庫(kù)實(shí)例名,可以與數(shù)據(jù)庫(kù)相同
SERVICE_NAMES: 數(shù)據(jù)庫(kù)服務(wù)名,與全局?jǐn)?shù)據(jù)庫(kù)名相同如果沒(méi)有域名,則服務(wù)名就是數(shù)據(jù)庫(kù)名
b.日志管理類(lèi)參數(shù)
LOG_ARCHIVE_START: 是否啟動(dòng)自動(dòng)歸檔進(jìn)程ARCH
LOG_ARCHIVE_DEST: 歸檔日志文件存儲(chǔ)目錄
LOG_ARCHIVE_FORMAT: 歸檔日志文件的默認(rèn)文件存儲(chǔ)格式
LOG_ARCHIVE_DUPLEX_DEST: 歸檔日志文件鏡像存儲(chǔ)目錄(Oracle8以上)
LOG_ARCHIVE_DEST_n: 歸檔日志文件存儲(chǔ)目錄(Oracle8i以上)
LOG_ARCHIVE_DEST_STATE_n: 設(shè)置參數(shù)LOG_ARCHIVE_DEST_n失效或生效
LOG_ARCHIVE_MAX_PROCESSES: 設(shè)置自動(dòng)歸檔進(jìn)程的個(gè)數(shù)
LOG_ARCHIVE_MIN_SUCCEED_DEST: 設(shè)置最少的成功歸檔日志存儲(chǔ)目錄的個(gè)數(shù)
LOG_CHECKPOINT_INTERVAL: 根據(jù)日志數(shù)量設(shè)置檢驗(yàn)點(diǎn)頻率
LOG_CHECKPOINT_TIMEOUT: 根據(jù)時(shí)間間隔設(shè)置檢驗(yàn)點(diǎn)頻率
c.內(nèi)存管理參數(shù) DB_BLOCK_SIZE: 標(biāo)準(zhǔn)數(shù)據(jù)塊大小
DB_nK_CACHE_SIZE: 非標(biāo)準(zhǔn)數(shù)據(jù)塊數(shù)據(jù)緩沖區(qū)大小
SHARED_POOL_SIZE: 共享池大小控制參數(shù),單位為字節(jié)
DB_CACHE_SIZE: 標(biāo)準(zhǔn)數(shù)據(jù)塊數(shù)據(jù)緩沖區(qū)大小
DB_BLOCK_BUFFERS: 數(shù)據(jù)緩沖區(qū)大小,9i之后已放棄使用
LOG_BUFFER: 日志緩沖區(qū)大小
SORT_AREA_SIZE: 排序區(qū)大小
LARGE_POOL_SIZE: 大池大小
JAVA_POOL_SIZE: Java池大小
d.最大許可用戶數(shù)量限制參數(shù) LICENSE_MAX_SESSIONS:數(shù)據(jù)庫(kù)可以連接的最大會(huì)話數(shù)
LICENSE_MAX_USERS:數(shù)據(jù)庫(kù)支持的最大用戶數(shù)
LICENSE_MAX_WARNING:數(shù)據(jù)庫(kù)最大警告會(huì)數(shù)(會(huì)話數(shù)據(jù)達(dá)到這個(gè)值時(shí),產(chǎn)生新會(huì)話時(shí)就會(huì)產(chǎn)生警告信息)
e.系統(tǒng)跟蹤信息管理參數(shù)
USER_DUMP_DEST:用戶跟蹤文件生成的設(shè)置
BACKGROUND_DUMP_DEST:后臺(tái)進(jìn)程跟蹤文件生成的位置
MAX_DUMPFILE_SIZE:跟蹤文件的最大尺寸
f.系統(tǒng)性能優(yōu)化與動(dòng)態(tài)統(tǒng)計(jì)參數(shù) SQL_TRACE:設(shè)置SQL跟蹤
TIMED_STATICS:設(shè)置動(dòng)態(tài)統(tǒng)計(jì)
AUDIT_TRAIL:啟動(dòng)數(shù)據(jù)庫(kù)審計(jì)功能
g.其他系統(tǒng)參數(shù)
CONTROL_FILES:控制文件名及路徑
Undo_MANAGMENT:Undo空間管理方式
ROLLBACK_SEGMENTS:為這個(gè)例程分配的回退段名
OPEN_CURSORS:一個(gè)用戶一次可以打開(kāi)的游標(biāo)的最大值
PROCESSES:最大進(jìn)程數(shù),包括后臺(tái)進(jìn)程與服務(wù)器進(jìn)程
IFILE:另一個(gè)參數(shù)文件的名字
DB_RECOVERY_FILE_DEST:自動(dòng)數(shù)據(jù)庫(kù)備份目錄
DB_RECOVERY_FILE_SIZE:數(shù)據(jù)庫(kù)備份文件大小
2)參數(shù)文件樣式 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.設(shè)置操作系統(tǒng)參數(shù)
$ORACLE_SID=myoracle
$export ORACLE_SID
4.啟動(dòng)實(shí)例并創(chuàng)建數(shù)據(jù)庫(kù) 在創(chuàng)建數(shù)據(jù)庫(kù)之前,首先要以新的數(shù)據(jù)庫(kù)參數(shù)啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例,因?yàn)檫@時(shí)數(shù)據(jù)庫(kù)的控制文件還沒(méi)有產(chǎn)生,不能MOUNT或OPEN數(shù)據(jù)庫(kù)。啟動(dòng)實(shí)例時(shí),Oracle只按照內(nèi)存參數(shù)分配SGA區(qū),啟動(dòng)系統(tǒng)后臺(tái)進(jìn)程。
$sqlplus "sys/pass as sysdba"
sql>startup nomount
如果參數(shù)文件不在規(guī)定的目錄中,可以在啟動(dòng)實(shí)例時(shí)指定參數(shù)文件:
sql>startup
pfile=/export/home/user/initmyoracle.init nomount
在實(shí)例啟動(dòng)后就可以使用CREATE
DATABASE命令創(chuàng)建數(shù)據(jù)。其詳細(xì)語(yǔ)法請(qǐng)參考Oracle官方SQL參考文檔。這里以實(shí)例來(lái)介紹:
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;
這里說(shuō)明一下CREATE DATABASE語(yǔ)句的各個(gè)關(guān)鍵字的含義:
DATAFILE:SYSTEM表空間的數(shù)據(jù)文件定義
LOGFILE:日志文件組的定義
Undo_TABLESPACE:重做表空間的定義
DEFAULT TEMPORTY TABLESPACE:默認(rèn)臨時(shí)表空間的定義
DEFAULT TABLESPACE:默認(rèn)數(shù)據(jù)表空間的定義。
5.創(chuàng)建數(shù)據(jù)字典
在數(shù)據(jù)庫(kù)創(chuàng)建結(jié)束后,數(shù)據(jù)庫(kù)自動(dòng)處于OPEN狀態(tài)下,這時(shí)所有V$××××類(lèi)數(shù)據(jù)字典都可以查詢(xún)。而其它數(shù)據(jù)字典,如DBA_DATA_FILES、DBA_TABLESPACES等都不存在,必須通過(guò)下列驟為系統(tǒng)創(chuàng)建數(shù)據(jù)字典。
1)加載常用的數(shù)據(jù)字典包
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)加載數(shù)據(jù)復(fù)制支持軟件包
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)加載系統(tǒng)環(huán)境文件
sql>connect system/pass
sql>@/home/app/oracle/product/10.1.0/db_1/sqlplus/admin/pupbld
二、在Windows下創(chuàng)建數(shù)據(jù)庫(kù) Oracle實(shí)例在Windows下表現(xiàn)為操作系統(tǒng)服務(wù)。在windows下,使用命令行方式創(chuàng)建數(shù)據(jù)的方法有所不同,差別在于在Windows下,需要先創(chuàng)建數(shù)據(jù)庫(kù)服務(wù)和實(shí)例。
1.確定數(shù)據(jù)庫(kù)名、數(shù)據(jù)庫(kù)實(shí)例名和服務(wù)名并創(chuàng)建目錄(DBCA創(chuàng)建的腳本不包含建立目錄命令,須自己創(chuàng)建) 建立目錄命令(下面以
db_name=eygle為例):
mkdir
D:\oracle\ora90\cfgtoollogs\dbca\eygle
mkdir D:\oracle\ora90\database
mkdir d:\oracle\admin\eygle\adump
mkdir d:\oracle\admin\eygle\bdump
mkdir d:\oracle\admin\eygle\cdump
mkdir d:\oracle\admin\eygle\dpdump
mkdir d:\oracle\admin\eygle\pfile
mkdir d:\oracle\admin\eygle\udump
mkdir d:\oracle\flash_recovery_area
mkdir d:\oracle\oradata
mkdir d:\oracle\oradata\eygle
2.創(chuàng)建參數(shù)文件
在Windows下的參數(shù)文件名稱(chēng)及路徑如下:
d:\oracle\product\10.1.0\admin\DB_NAME\pfile\init.ora(oracle10g)
d:\orant\database\iniORACLE_SID.ora(oracle7,oracle8)
參數(shù)據(jù)文件內(nèi)容與前述一致。這里不再說(shuō)明。
3.選擇數(shù)據(jù)庫(kù)實(shí)例 設(shè)置環(huán)境變量ORACLE_SID
c:\>set ORACLE_SID=數(shù)據(jù)庫(kù)實(shí)例名
4.創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例 在Windows中創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例的命令為Oradim.exe,是一個(gè)可執(zhí)行文件,可以在操作系統(tǒng)符號(hào)下直接運(yùn)行。直接輸入oradim顯示此命令的幫助。
c:\>Oradim
下面對(duì)Oradim命令的參數(shù)進(jìn)行一個(gè)說(shuō)明
-------------------------------
-NEW 表示新建一個(gè)實(shí)例
-EDIT 表示修改一個(gè)實(shí)例
-DELETE 表示刪除一個(gè)實(shí)例
-SID
sid
指定要啟動(dòng)的實(shí)例名稱(chēng)
-SRVC service 指定要啟動(dòng)的服務(wù)名稱(chēng)
-INTPWD password 以Internal方式連接數(shù)據(jù)庫(kù)時(shí)的口令字
-MAXUSERS count 該實(shí)例可以連接的最大用戶數(shù)
-USRPWD password 指定內(nèi)部用戶的口令,如是作為Windows管理登錄,不用此參數(shù)
-PFILE
pfile
該實(shí)例所使用的參數(shù)文件名及路徑
-STARTTYPE srvc|inst|srvc,inst
啟動(dòng)選項(xiàng)(srvc:只啟動(dòng)服務(wù),inst:啟動(dòng)實(shí)例,服務(wù)必須先啟動(dòng),srvc,inst:服務(wù)和實(shí)例同時(shí)啟動(dòng))
-SHUTTYPE srvc|linst|srvc,inst
關(guān)閉選項(xiàng)(srvc:只關(guān)閉服務(wù),實(shí)例必須已關(guān)閉,inst:只關(guān)閉實(shí)例,srvc,inst:服務(wù)和實(shí)例同時(shí)關(guān)閉)
-STARTMODE a|m 創(chuàng)建實(shí)例所使用的模式(a:自動(dòng),即windows啟動(dòng)時(shí)自動(dòng)啟動(dòng) m:手動(dòng))
-SHUTMODE a|i|m
關(guān)閉實(shí)例時(shí)所使用的模式(a:abort異常方式,i:immediate立即方式,n:normal正常方式)
----------------------------
例:創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)實(shí)例
c:\>oradim -NEW -SID myoracle -STARTMODE m -PFILE
"d:\fangys\initmyoracle.ora"
或
c:\>oradim -NEW -SRVC OracleServicemyoracle
-STARTMODE m -PFILE "d:\fangys\initmyoracle.ora"
例:修改一個(gè)數(shù)據(jù)實(shí)例
c:\>oradim -EDIT -SID myoracle -STARTMODE a
或
c:\>oradim -EDIT -SRVC OracleServicemyoracle
-STARTMODE a
例:刪除一個(gè)實(shí)例
c:\>oradim -DELETE -SID myoracle
或
c:\>oradim -DELETE -SRVC Oracleservicemyoracle
例:?jiǎn)?dòng)服務(wù)與實(shí)例
c:\>oradim -STARTUP -SID myoracle -STARTTYPE
srvc,inst
只啟動(dòng)服務(wù)
c:\>oradim -STARTUP -SID myoracle -STARTTYPE
srvc
啟動(dòng)實(shí)例:
c:\>oradim -STARTUP -SID myoracle -STARTTYPE
inst
例:關(guān)閉服務(wù)與實(shí)例
c:\>oradim -SHUTDOWN -SID
myoracle
c:\>oradim -SHUTDOWN -SID myoracle -SHUTTYPE
srvc,inst
5.啟動(dòng)實(shí)例并創(chuàng)建數(shù)據(jù)庫(kù) 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.創(chuàng)建數(shù)據(jù)字典
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;
sql>@d:\oracle\product\10.1.0\db_1\sqlplus\admin\ppbld.sql;
一、啟動(dòng)數(shù)據(jù) $sqlplus "sys/pass as sysdba"
sql>startup
二、啟動(dòng)監(jiān)聽(tīng)器 數(shù)據(jù)庫(kù)啟動(dòng)后,如果未啟動(dòng)監(jiān)聽(tīng)進(jìn)程,則客戶端無(wú)法與數(shù)據(jù)庫(kù)連接。監(jiān)聽(tīng)進(jìn)程的啟動(dòng)方法為:
$lsnrctl start
在widnows中,可以從服務(wù)列表中啟動(dòng)監(jiān)聽(tīng)器。
監(jiān)聽(tīng)里程配置文件為listener.ora,位于目錄/home/app/oracle/product/10.1.0/db1/network/admin/。
此配置文件分為兩部分,一部分為監(jiān)聽(tīng)程序本身的配置,包括協(xié)議,地址,端口號(hào)等;另一部分為監(jiān)聽(tīng)程序所連接的數(shù)據(jù)庫(kù)的實(shí)例信息,包括:實(shí)例名,全局?jǐn)?shù)據(jù)庫(kù)名,oracle主目錄等。監(jiān)聽(tīng)器可以利用oracle
net config 向?qū)?lái)配置。
要顯示監(jiān)聽(tīng)器的運(yùn)行狀態(tài):$lsnrctl status;
要停止監(jiān)聽(tīng)器:$lsnrctl stop。
三、數(shù)據(jù)庫(kù)的啟動(dòng)過(guò)程
分為三個(gè)階段:
1. 啟動(dòng)實(shí)例,包括以下操作:
1) 讀取參數(shù)文件
2) 分配SGA
3) 啟動(dòng)后臺(tái)進(jìn)程
2.裝載數(shù)據(jù)庫(kù)
裝載數(shù)據(jù)庫(kù)是將數(shù)據(jù)庫(kù)與已啟動(dòng)的實(shí)例相聯(lián)系。數(shù)據(jù)庫(kù)裝載后,數(shù)據(jù)庫(kù)保持關(guān)閉狀態(tài)。
3.打開(kāi)數(shù)據(jù)庫(kù)
此步驟使用數(shù)據(jù)庫(kù)可以進(jìn)行正常的操作的處理。主要是打開(kāi)控制文件,數(shù)據(jù)庫(kù)文件和日志文件。
四、數(shù)據(jù)庫(kù)啟動(dòng)參數(shù)
1.NOMOUNT:只啟動(dòng)實(shí)例,不裝載數(shù)據(jù)庫(kù)
sql>startup nomount
2.MOUNT:啟動(dòng)實(shí)例,并裝載數(shù)據(jù),但不打開(kāi)數(shù)據(jù)庫(kù)
sql>startup mount
3.READ ONLY:將數(shù)據(jù)庫(kù)置為只讀
sql>startup mount
sql>alter database open read only
4.READ WRITE:以可讀寫(xiě)方式打開(kāi)數(shù)據(jù),這是默認(rèn)方式
sql>startup mount
sql>alter database open read write
5.OPEN:打開(kāi)數(shù)據(jù)庫(kù),這是默認(rèn)方式
sql>startup mount
sql>alter database open;
6.RESTRICT:以受限方式打開(kāi),只有具有RESTRICTED SESSION權(quán)限的用戶才可以連接數(shù)據(jù)庫(kù)
sql>startup restrict
7.PFILE:啟時(shí)指定參數(shù)文件
sql>startup pfile=/u02/user/mypfile.ora
8.FORCE:以強(qiáng)制方式啟動(dòng)數(shù)據(jù)庫(kù)
sql>startup pfile=/u02/user/mypfile.ora open
restrict force
五、數(shù)據(jù)庫(kù)的關(guān)閉 與啟動(dòng)過(guò)程相對(duì)應(yīng),關(guān)閉包括三個(gè)過(guò)程
1).關(guān)閉數(shù)據(jù)庫(kù)
2).卸載數(shù)據(jù)庫(kù)
3).關(guān)閉數(shù)據(jù)庫(kù)實(shí)例
1.NORMAL關(guān)閉方式
NORMAL關(guān)閉方式是正常關(guān)閉方式,是默認(rèn)關(guān)閉方式。在這種關(guān)機(jī)方式下,數(shù)據(jù)庫(kù)服務(wù)器必須等待所有客戶端從Oracle中正常退出時(shí),才可以關(guān)閉數(shù)據(jù)庫(kù)。
SQL>SHUTDOWN NORMAL
2.IMMEDIATE關(guān)閉方式
使用這種方式關(guān)閉數(shù)據(jù)庫(kù)時(shí),系統(tǒng)將連接到數(shù)據(jù)庫(kù)的所有用戶尚未提交的事務(wù)全部回退,中斷連接,然后關(guān)閉數(shù)據(jù)庫(kù)。
SQL>SHUTDOWN IMMEDIATE
3.ABORT關(guān)閉方式
ABORT關(guān)閉方式為異常方式,使用這種方式關(guān)閉數(shù)據(jù)庫(kù)時(shí),系統(tǒng)立即將數(shù)據(jù)庫(kù)實(shí)例關(guān)閉,對(duì)事務(wù)膛數(shù)據(jù)完整性不作檢查。是最快的關(guān)機(jī)方式。
sql>shutdown abort;
4.TRANSACTIONAL關(guān)閉方式
在這種關(guān)機(jī)方式中,數(shù)據(jù)庫(kù)必須等待所有的客戶運(yùn)行的事務(wù)結(jié)束,提交或回退。
sql>shutdown transactional
Oracle數(shù)據(jù)庫(kù)的連接結(jié)構(gòu)有三種: 1)
組合用戶與服務(wù)器結(jié)構(gòu):在這種連接方式中,客戶端與服務(wù)器同處一臺(tái)機(jī)器中,對(duì)于每一個(gè)用戶,其庫(kù)應(yīng)用程序與服務(wù)器程序組合成單個(gè)服務(wù)器進(jìn)程。
2) 專(zhuān)用服務(wù)器(Dedicated Server)結(jié)構(gòu):在這種方式中,對(duì)于每一個(gè)用戶,其數(shù)據(jù)庫(kù)應(yīng)用是由用戶進(jìn)程所運(yùn)行,并有一個(gè)專(zhuān)用服務(wù)器進(jìn)程為之服務(wù),執(zhí)行Oracle服務(wù)器代碼。
3) 多線程服務(wù)器(Multithreaded
Server)體系結(jié)構(gòu):在這種方式中,一個(gè)或多個(gè)客戶應(yīng)用程序共享一組服務(wù)器進(jìn)程,與專(zhuān)用服務(wù)器不同的是,客戶和服務(wù)器進(jìn)程不是一對(duì)一的關(guān)系,而是由調(diào)度進(jìn)程對(duì)多個(gè)服務(wù)器進(jìn)程進(jìn)行調(diào)度,以服務(wù)來(lái)自客戶應(yīng)用的連接請(qǐng)求。
專(zhuān)用服務(wù)器
專(zhuān)用服務(wù)器的工作過(guò)程:
1) 客戶端通過(guò)oracle net向監(jiān)聽(tīng)器發(fā)連接請(qǐng)求
2) 監(jiān)聽(tīng)器收到請(qǐng)求并將此請(qǐng)求導(dǎo)向服務(wù)器,服務(wù)器向用戶返回一個(gè)連接成功信息,并為此用戶創(chuàng)建一個(gè)專(zhuān)用服務(wù)器進(jìn)程
3) 客戶直接與該專(zhuān)用服務(wù)器進(jìn)程進(jìn)行交互,處理SQL,并且服務(wù)器在該會(huì)話的PGA中建立一個(gè)專(zhuān)用SQL區(qū)。
如果客戶端要求建立專(zhuān)用服務(wù)器連接方式,可以修改客戶羰的網(wǎng)絡(luò)配置文件tnsnames.ora或修改連接描述串。增加關(guān)鍵字“Server=DEDICATED”,如:
prod=
(DESCRIPTION=
(ADDRESSLIST=
(ADDRESS=
(PROTOCOL=TCP)(HOST=192.168.0.3)(PORT=1521)
(SERVER=DEDICATED)
)
)
(CONNECT_DATA=(SID=PROD)
)
)
還必須修改SQLNET.ORA文件,增加“USE_DEDICATED_SERVER=TRUE”
多線程服務(wù)器體系結(jié)構(gòu)
專(zhuān)用服務(wù)器結(jié)構(gòu)中,一個(gè)服務(wù)器進(jìn)程只為一個(gè)客戶服務(wù)。這樣的話,如果有一千個(gè)客戶,就需要有一千個(gè)對(duì)應(yīng)的服務(wù)器進(jìn)程,就會(huì)耗費(fèi)大量的系統(tǒng)資源。為了支
持對(duì)于可伸縮性的需求,在oracle7中引入了多線程服務(wù)器(MTS,也稱(chēng)為共享服務(wù)器)。下面說(shuō)明共享服務(wù)器建立連接的過(guò)程,以級(jí)與建立專(zhuān)用服務(wù)器連
接過(guò)程的不同:
1) 客戶通過(guò)網(wǎng)絡(luò)與監(jiān)聽(tīng)器聯(lián)系
2) 監(jiān)聽(tīng)器檢測(cè)到請(qǐng)求,基于Oracle net結(jié)構(gòu)來(lái)確定是否與多線程服務(wù)器連接。監(jiān)聽(tīng)器將客戶請(qǐng)求導(dǎo)向相應(yīng)的調(diào)度程序。
3) 監(jiān)聽(tīng)器通過(guò)使客戶與調(diào)度程序了解對(duì)方的網(wǎng)絡(luò)地址,從面完成了雙方的介紹。
4) 一旦客戶與調(diào)度程序知道如何找到對(duì)方,它們就直接通信,不要需要監(jiān)聽(tīng)器??蛻糁苯訉⒉僮髡?qǐng)求發(fā)送給高度程序。
5) 調(diào)度程序?qū)⒖蛻粽?qǐng)求放在SGA的請(qǐng)求隊(duì)列中。
6) 下一個(gè)可用的共享服務(wù)器進(jìn)程從請(qǐng)求隊(duì)列中讀取請(qǐng)求,進(jìn)行相應(yīng)的工作。
7) 共享服務(wù)器進(jìn)程將結(jié)果存放在提交相應(yīng)請(qǐng)求的調(diào)度程序的響應(yīng)隊(duì)列中。
8) 調(diào)度程序從響應(yīng)隊(duì)列中讀取數(shù)據(jù)并將結(jié)果送組客戶。
有幾個(gè)概念在這里作個(gè)補(bǔ)充說(shuō)明: 1)
監(jiān)聽(tīng)器(Listener):為一個(gè)或多個(gè)實(shí)例“監(jiān)聽(tīng)”連接請(qǐng)求,它是oracle客戶與服務(wù)器的中介。監(jiān)聽(tīng)器不是Oracle實(shí)例的一部分,它的作用是將連接的請(qǐng)求導(dǎo)向相應(yīng)的實(shí)例。
2)
調(diào)度程序(dispatcher):在MTS體系結(jié)構(gòu)中,監(jiān)聽(tīng)器與調(diào)度程序聯(lián)系,調(diào)度程序負(fù)責(zé)調(diào)度MTS中的各個(gè)共享服務(wù)器進(jìn)程。
多線程服務(wù)器的設(shè)置參數(shù)有:
MTS_SERVICE:多線程服務(wù)器名稱(chēng),一般為數(shù)據(jù)庫(kù)名
MTS_DISPATCHERS:初始調(diào)度器個(gè)數(shù)
MTS_MAX_DISPATCHERS:調(diào)度器最大個(gè)數(shù)
MTS_SERVERS:共享服務(wù)器個(gè)數(shù)
MTS_MAX_SERVERS:最大共享服務(wù)器個(gè)數(shù)
多線程服務(wù)器的設(shè)置是通過(guò)對(duì)以上各個(gè)參數(shù)的設(shè)置完成的。格式如下:
MTS_SERVICE=RS
MTS_SERVERS=10
MTS_MAX_SERVERS=100
MTS_DISPATCHERS="(PROTOCOL=TCP)(POOL=YES)(MULT=YES)"
MTS_DISPATCHERS="(PROTOCOL=IPX)(POOL=YES)(MULT=YES)"
MTS_DISPATCHERS="(PROTOCOL=IPC)(POOL=YES)(MULT=YES)"
MTS_MAX_DISPATCHERS=100
有關(guān)多線程服務(wù)器的數(shù)據(jù)字典如下:
V$MTS
V$DISPATCHER
V$SHARED_SERVER
V$CIRCULT
各字典的詳細(xì)說(shuō)明請(qǐng)參考Oracle文檔。
第八篇 再述oracle數(shù)據(jù)庫(kù)體系結(jié)構(gòu) 之四:Oracle實(shí)例的進(jìn)程結(jié)構(gòu)
這里所講的里程是指Unix系統(tǒng)中的進(jìn)程,在Windows中,Oracle是一個(gè)操作系統(tǒng)服務(wù)。
Oracle實(shí)例由內(nèi)存區(qū)域和后臺(tái)進(jìn)程組成。
Oracle實(shí)例分為單進(jìn)程實(shí)例(一個(gè)進(jìn)程執(zhí)行全部的Oracle代碼,只允許單個(gè)用戶存取)和多進(jìn)程實(shí)例(由多個(gè)進(jìn)程執(zhí)行Oracle代碼的不同部分,對(duì)于每一個(gè)連接的用戶都有一個(gè)進(jìn)程,允許多個(gè)用戶同時(shí)使用)。
在多進(jìn)程結(jié)構(gòu)中,除服務(wù)器進(jìn)程(請(qǐng)注意,此“服務(wù)器進(jìn)程”不是指所有的實(shí)例中的進(jìn)程,見(jiàn)下面的說(shuō)明)外,還有其他后臺(tái)進(jìn)程,包括:Dnnn,
DBWR,
LGWR,ARCH,PMON,SMON,CKPT,RECO等。在數(shù)據(jù)庫(kù)啟動(dòng)后,這些進(jìn)程常駐操作系統(tǒng)。Oracle中所有進(jìn)程的數(shù)量之和不能超過(guò)參數(shù)
PROCESS設(shè)定的值:
sql>show parameter process
當(dāng)Oracle客戶端應(yīng)用程序與Oracle實(shí)例連接的時(shí)候,Oracle會(huì)產(chǎn)生一個(gè)服務(wù)器進(jìn)程來(lái)為這些客戶服務(wù),此進(jìn)程在widnows下表現(xiàn)為線程。
此進(jìn)程的主要作用有:對(duì)于用戶發(fā)出的SQL語(yǔ)句進(jìn)行語(yǔ)法分析,編譯,執(zhí)行用戶的SQL語(yǔ)句,如是數(shù)據(jù)塊不在數(shù)據(jù)緩沖區(qū)時(shí),則從磁盤(pán)數(shù)據(jù)文件將數(shù)據(jù)讀入到
SGA的共享數(shù)據(jù)緩沖區(qū)中,將SQL語(yǔ)句的執(zhí)行結(jié)果返回組應(yīng)用程序。下面的語(yǔ)句用來(lái)查詢(xún)數(shù)據(jù)庫(kù)中的用戶會(huì)話信息。
sql>select substr(s.sid,1,3)
sid,substr(s.serial#,1,5) ser,spid,substr(schemaname,1,10)
schema,substr(type,1,3)
typ,substr(decode((consistent_gets+block_gets),0,'None',(100*(consistent_gets+block_gets-physical_reads)/consistent_gets+block_gets))),1,4)
"%hit",value cpu,substr(block_changes,1,5) bchng from v$process
p,v$sesstat t,v$sess_io i,v$session s where i.sid=s.sid and
p.addr=paddr(+) and s.sid=t.sid and t.statistic#=12;
結(jié)果中:
sid 表示會(huì)話ID號(hào),
ser 表示會(huì)話serial#號(hào),serial#與sid組合以唯一表示一個(gè)會(huì)話,
spid 表示操作系統(tǒng)進(jìn)程號(hào),
schema 表示數(shù)據(jù)庫(kù)用戶名,
typ 表示進(jìn)程類(lèi)型,use為用戶進(jìn)程,bac為后臺(tái)進(jìn)程
%hit 表示數(shù)據(jù)緩沖區(qū)命中率,
cpu 表示使用cpu的時(shí)間,
bchng 表示修改了的數(shù)據(jù)塊的個(gè)數(shù)。
下面介紹各個(gè)后臺(tái)進(jìn)程。
1. DBWR進(jìn)程
DBWR(Database Writer)進(jìn)程將緩沖區(qū)中的數(shù)據(jù)寫(xiě)入數(shù)據(jù)文件,負(fù)責(zé)數(shù)據(jù)緩沖區(qū)的管理。
當(dāng)數(shù)據(jù)緩沖區(qū)中的一個(gè)數(shù)據(jù)被修改后,被標(biāo)記為“臟”,DBWR進(jìn)程負(fù)責(zé)將“臟”數(shù)據(jù)寫(xiě)入磁盤(pán)。
DBWR采用LRU算法來(lái)替換數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)。
DBWR的作用包括:
1) 管理數(shù)據(jù)緩沖區(qū),以便服務(wù)器進(jìn)程總能找到空閑緩沖區(qū)
2) 將所有修改后的緩沖區(qū)中的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)文件
3) 使用LRU算法將最近使用過(guò)的塊保留在內(nèi)存中
4) 通過(guò)延遲寫(xiě)來(lái)優(yōu)化磁盤(pán)i/o.
在下列情況下DBWR要將臟數(shù)據(jù)寫(xiě)入磁盤(pán)數(shù)據(jù)文件:
1) 當(dāng)一個(gè)服務(wù)器進(jìn)程將緩沖數(shù)據(jù)塊移“臟表”,面該臟表達(dá)到一定程度進(jìn)。(該臨界長(zhǎng)度由參數(shù)DB_BLOCK_WRITE_BATCH決定)
2) 當(dāng)一個(gè)服務(wù)器進(jìn)程在LRU表中查找DB_BLOCK_MAX_SCAN_CNT緩沖區(qū)時(shí),沒(méi)有查到空閑的緩沖區(qū)
3) 出現(xiàn)超時(shí)
4) 檢查點(diǎn)發(fā)生時(shí)
在一個(gè)Oracle實(shí)例中,允許啟動(dòng)多個(gè)DBWR進(jìn)程,DBWR進(jìn)程個(gè)數(shù)由參數(shù)DB_WRITE_PROCESSES指定,上限為20,進(jìn)程名依次自動(dòng)命名為:DBW0,DBW1,DBW2...DBW19。
sql>show parameter processes
2. LGWR進(jìn)程
LGWR(Log Writer)進(jìn)程將日志數(shù)據(jù)從日志緩沖區(qū)中寫(xiě)入磁盤(pán)日志文件中。
關(guān)于LGWR進(jìn)程的工作時(shí)機(jī)可以看我寫(xiě)的第一篇《一次事務(wù)過(guò)程》。
LGWR的寫(xiě)盤(pán)條件是:
1) 發(fā)生提交,即commit;
2) 日志緩沖區(qū)達(dá)到總數(shù)的1/3時(shí);
3) 超時(shí);
4) DBWR進(jìn)程需要為檢驗(yàn)點(diǎn)清除緩沖區(qū)時(shí)。
每一個(gè)Oracle實(shí)例只有一個(gè)LGWR進(jìn)程。
LGWR將日志信息同步的寫(xiě)入到日志文件組的多個(gè)日志成員中,如果組中的一個(gè)成員文件被刪除或不可使用,LGWR將日志信息繼續(xù)寫(xiě)到該組的其他文件中,不影響數(shù)據(jù)庫(kù)的運(yùn)行。
3. SMON進(jìn)程
SMON(System Monitor),系統(tǒng)監(jiān)控進(jìn)程,在實(shí)例啟動(dòng)時(shí)執(zhí)行實(shí)例恢復(fù),并負(fù)責(zé)清理不再使用的臨時(shí)段。
4. PMON進(jìn)程
PMON(Process
Monitor),進(jìn)程監(jiān)控里程,在服務(wù)器進(jìn)程出現(xiàn)故障時(shí)執(zhí)行進(jìn)程恢復(fù),負(fù)責(zé)清理內(nèi)存內(nèi)存和釋放該進(jìn)程所使用的資源。
5. ARCH進(jìn)程
ARCH(Archive Process,歸檔進(jìn)程)在日志存滿時(shí)將日志信息寫(xiě)到磁盤(pán)或磁帶,用于介質(zhì)失敗時(shí)的恢復(fù)。
日志信息首先產(chǎn)生于日志緩沖區(qū),再由日志寫(xiě)入進(jìn)程LGWR將日志數(shù)據(jù)寫(xiě)入日志文件組,日志切換時(shí),由歸檔進(jìn)程ARCH將日志數(shù)據(jù)從日志文件組中寫(xiě)入歸檔日志中。
在一個(gè)數(shù)據(jù)庫(kù)實(shí)例中,歸檔進(jìn)程最多可以啟動(dòng)10個(gè),進(jìn)程名依次自動(dòng)命名為ARC0,ARC1,ARC2...ARC9,設(shè)置方法是:在參數(shù)文件中增加
參數(shù)LOG_ARCHIVE_MAX_PROCESSES。關(guān)于如何啟用數(shù)據(jù)庫(kù)的自動(dòng)歸檔,在前面的《物理結(jié)構(gòu)》一篇中已有說(shuō)明,這里說(shuō)明一個(gè)幾個(gè)相關(guān)的
參數(shù):
1) LOG_ARCHIVE_DEST:用于設(shè)置歸檔日志的文件存儲(chǔ)目錄
2) LOG_ARCHIVE_DUBLEX_DEST:用于設(shè)置歸檔日志文件的鏡像存儲(chǔ)目錄,此參數(shù)在oracle
8及以上的版本中支持
3)
LOG_ARCHIVE_DEST_n:用于設(shè)置更多的鏡像目錄,其中,1<=n<=10,該參數(shù)有以下三個(gè)選項(xiàng):
(1)MANDATORY:表示必須完成此目錄的歸檔,才可以切換。
(2)REOPEN:歸檔目錄或介質(zhì)失敗后,需等多長(zhǎng)時(shí)間能重新寫(xiě)入日志,默認(rèn)時(shí)間為300秒。
(3)OPTIONAL:不管是否歸檔完成都進(jìn)行切換,這是默認(rèn)方式
舉例如下:
LOG_ARCHIVE_DEST_1='LOCATION=/u01/oracle/archive/
MANDATORY
REOPEN=500'
LOG_ARCHIVE_DEST_2='LOCATION=/u02/oracle/archive/
OPTIONAL'
LOG_ARCHIVE_DEST_n只適用于oracle 8i及以上的版本。
4)
LOG_ARCHIVE_DEST_STATE_n:用于對(duì)歸檔日志目錄進(jìn)行失效或生效,該參數(shù)與LOG_ARCHIVE_DEST_n一一相對(duì)應(yīng)。如:
LOG_ARCHIVE_DEST_STATE_1=DEFER
LOG_ARCHIVE_DEST_STATE_2=ENABLE
此參數(shù)可以在線設(shè)置:
sql> ALTER SYSTEM SET
LOG_ARCHIVE_DEST_STATE_1=DEFER;
此參數(shù)只適用于oracle 10g及以上版本。
6. CKPT進(jìn)程
CKPT(CheckPoint,檢查點(diǎn))進(jìn)程出現(xiàn)時(shí),系統(tǒng)對(duì)全部數(shù)據(jù)庫(kù)文件及控制文件的文件頭的同步號(hào)進(jìn)行修改,以保證數(shù)據(jù)庫(kù)的同步。
以下兩個(gè)參數(shù)是對(duì)CKPT有影響的:
LOG_CHECKPOINT_TIMEOUT:決定產(chǎn)生一個(gè)檢驗(yàn)點(diǎn)的時(shí)間間隔,單位為秋,默認(rèn)為1800;
LOG_CHECKPOINT_INTERVAL:執(zhí)行一個(gè)檢驗(yàn)點(diǎn)需要填充的日志文件塊的數(shù)目,默認(rèn)為0,表示不起作用。
系統(tǒng)對(duì)于數(shù)據(jù)庫(kù)的改變信息用系統(tǒng)改變號(hào)SCN表示,SCN也叫檢驗(yàn)點(diǎn)號(hào),在日志中用CHECKPOINT_CHANGE#表示,它是數(shù)據(jù)文件,日志文件,控制文件的同步的同步依據(jù),同時(shí)存儲(chǔ)在這三個(gè)中,在系統(tǒng)改變時(shí),檢驗(yàn)點(diǎn)號(hào)也會(huì)同時(shí)改變。
引起CKPT產(chǎn)生的主要時(shí)機(jī)有:
1)日志切換時(shí)
2)達(dá)到LOG_CHECKPOINT_TIMEOUT指定的間隔時(shí)間
3)達(dá)到LOG_CHECKPOINT_INTERVAL指定的日志塊數(shù)
4)數(shù)據(jù)庫(kù)關(guān)閉
5)DBA強(qiáng)制產(chǎn)生
6)表空間OFFLINE時(shí)
7. RECO進(jìn)程
RECO(Recover,恢復(fù))進(jìn)程用于分布式數(shù)據(jù)庫(kù)系統(tǒng),RECO進(jìn)程自動(dòng)地解決在分布式數(shù)據(jù)庫(kù)中的事務(wù)故障。
8. LCKn進(jìn)程
LCKn(鎖進(jìn)程)用于Oracle并行服務(wù)器環(huán)境下,用于多個(gè)實(shí)例間的封鎖,該進(jìn)程最多可以啟動(dòng)10個(gè)。
9. Dnnn進(jìn)程
Dnnn(Despatcher,調(diào)度)進(jìn)程。用于多線程服務(wù)器體系結(jié)構(gòu)中。詳見(jiàn)下一篇《Oracle連接配置結(jié)構(gòu)》
10. SNP進(jìn)程
SNP是作業(yè)進(jìn)程,主要用于分布式數(shù)據(jù)庫(kù)中,進(jìn)行數(shù)據(jù)庫(kù)之間快照的自動(dòng)刷新,并同時(shí)通達(dá)DBMS_JOB程序包自動(dòng)運(yùn)行預(yù)定的存儲(chǔ)過(guò)程,SQL,PL/sql程序等。有兩個(gè)參數(shù)用來(lái)控制作業(yè)進(jìn)程的計(jì)劃:
1) JOB_QUEUE_PROCESS:用于設(shè)置作業(yè)進(jìn)程個(gè)數(shù)
2) JOB_QUEUE_INTERVAL:用于設(shè)置作業(yè)進(jìn)程被周期性喚醒的時(shí)間間隔
后臺(tái)進(jìn)程跟蹤信息
所有修改數(shù)據(jù)庫(kù)結(jié)構(gòu)的命令會(huì)自動(dòng)被后臺(tái)進(jìn)程跟蹤記錄,跟蹤信息由oracle后臺(tái)進(jìn)程自動(dòng)存儲(chǔ),跟蹤文件的名稱(chēng)為alter_SID。此文件的存儲(chǔ)目錄由參數(shù)BACKGROUND)DUMP_DEST指定。
可以用工具命令TKPROF來(lái)格式化跟蹤文件,如:
$tkprof oralogfile1.log
除了跟蹤后臺(tái)進(jìn)程外,還可以啟用參數(shù)SQL_TRACE對(duì)用戶的語(yǔ)句進(jìn)行跟蹤。修改參數(shù)文件:
TIMED_STATISTICS=TRUE
USER_DUMP_DEST=目錄名
MAX_DUMP_FILE_SIZE=5M
SQL_TRACE=TRUE
或者:
SQL>ALTER SESSION SET
SQL_TRACE=TRUE對(duì)當(dāng)前會(huì)話進(jìn)行SQL跟蹤。
鎖等待問(wèn)題與KILL SESSION
為了保證數(shù)據(jù)的一致性,系統(tǒng)提供鎖機(jī)制。有關(guān)鎖的概念可以參數(shù)《數(shù)據(jù)庫(kù)系統(tǒng)概論》一書(shū)。要了解當(dāng)前在等待鎖資源的用戶:
sql>select a.username,a.sid,a,serial#,b.id1 from
v$session,v$lock where a.lockwait=b.kaddr;
要了解鎖住其它用戶的用戶進(jìn)程:
SQL>SELECT A.USERNAME,A.SID,A,SERIAL#,B.ID1 FROM
V$SESSION A,V$LOCK B WHERE B.ID1 IN (SELECT DISTINCT E.ID1 FROM
V$SESSION D,V$LOCK E WHERE D.LOCKWAIT=E.KADDR) AND A.SID=B.SID AND
B.REQUEST=0;
|