http://blog.sina.com.cn/s/blog_5e17f8840100bgl8.html
詳解:資料庫名、執行個體名、ORACLE_SID、資料庫域名、全局資料庫名、服務名及手工腳本建立oracle資料庫
資料庫名、執行個體名、資料庫域名、全局資料庫名、服務名 , 這是幾個令很多初學者容易混淆的概念。相信很多初學者都與我一樣被标題上這些個概念搞得一頭霧水。我們現在就來把它們弄個明白。 一、資料庫名 什麼是資料庫名? 資料庫名就是一個資料庫的辨別,就像人的身份證号一樣。他用參數DB_NAME表示,如果一台機器上裝了多全資料庫,那麼每一個資料庫都有一個資料庫名。在資料庫安裝或建立完成之後,參數DB_NAME被寫入參數檔案之中。格式如下: DB_NAME=myorcl ... 在建立資料庫時就應考慮好資料庫名,并且在建立完資料庫之後,資料庫名不宜修改,即使要修改也會很麻煩。因為,資料庫名還被寫入控制檔案中,控制檔案是以二進制型式存儲的,使用者無法修改控制檔案的内容。假設使用者修改了參數檔案中的資料庫名,即修改DB_NAME的值。但是在Oracle啟動時,由于參數檔案中的DB_NAME與控制檔案中的資料庫名不一緻,導緻資料庫啟動失敗,将傳回ORA-01103錯誤。 資料庫名的作用 資料庫名是在安裝資料庫、建立新的資料庫、建立資料庫控制檔案、修改資料結構、備份與恢複資料庫時都需要使用到的。 有很多Oracle安裝檔案目錄是與資料庫名相關的,如: winnt: d:/oracle/product/10.1.0/oradata/DB_NAME/... Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/... pfile: winnt: d:/oracle/product/10.1.0/admin/DB_NAME/pfile/ini.ora Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora 跟蹤檔案目錄: winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/... 另外,在建立資料時,careate database指令中的資料庫名也要與參數檔案中DB_NAME參數的值一緻,否則将産生錯誤。 同樣,修改資料庫結構的語句alter database, 當然也要指出要修改的資料庫的名稱。 如果控制檔案損壞或丢失,資料庫将不能加載,這時要重新建立控制檔案,方法是以nomount方式啟動執行個體,然後以create controlfile指令建立控制檔案,當然這個指令中也是指指DB_NAME。 還有在備份或恢複資料庫時,都需要用到資料庫名。 總之,資料庫名很重要,要準确了解它的作用。 查詢目前資料名 方法一:select name from v$database; 方法二:show parameter db 方法三:檢視參數檔案。 修改資料庫名 前面建議:應在建立資料庫時就确定好資料庫名,資料庫名不應作修改,因為修改資料庫名是一件比較複雜的事情。那麼現在就來說明一下,如何在已建立資料之後,修改資料庫名。步驟如下: 1.關閉資料庫。 2.修改資料庫參數檔案中的DB_NAME參數的值為新的資料庫名。 3.以NOMOUNT方式啟動執行個體,修建控制檔案(有關建立控制檔案的指令文法,請參考oracle文檔) 二、資料庫執行個體名 什麼是資料庫執行個體名? 資料庫執行個體名是用于和作業系統進行聯系的辨別,就是說資料庫和作業系統之間的互動用的是資料庫執行個體名。執行個體名也被寫入參數檔案中,該參數為instance_name,在winnt平台中,執行個體名同時也被寫入系統資料庫。 資料庫名和執行個體名可以相同也可以不同。 在一般情況下,資料庫名和執行個體名是一對一的關系,但如果在oracle并行伺服器架構(即oracle實時應用叢集)中,資料庫名和執行個體名是一對多的關系。這一點在第一篇中已有圖例說明。 查詢目前資料庫執行個體名 方法一:select instance_name from v$instance; 方法二:show parameter instance 方法三:在參數檔案中查詢。 資料庫執行個體名與ORACLE_SID 雖然兩者都表是oracle執行個體,但兩者是有差別的。instance_name是oracle資料庫參數。而ORACLE_SID是作業系統的環境變量。 ORACLD_SID用于與作業系統互動,也就是說,從作業系統的角度通路執行個體名,必須通過ORACLE_SID。在winnt不台, ORACLE_SID還需存在于系統資料庫中。 且ORACLE_SID必須與instance_name的值一緻,否則,你将會收到一個錯誤,在unix平台,是“ORACLE not available”,在winnt平台,是“TNS:協定擴充卡錯誤”。 資料庫執行個體名與網絡連接配接 資料庫執行個體名除了與作業系統互動外,還用于網絡連接配接的oracle伺服器辨別。當你配置oracle主機連接配接串的時候,就需要指定執行個體名。當然8i以後版本的網絡元件要求使用的是服務名SERVICE_NAME。這個概念接下來說明。 三、資料庫域名 什麼是資料庫域名? 在分布工資料庫系統中,不同版本的資料庫伺服器之間,不論運作的作業系統是unix或是windows,各伺服器之間都可以通過資料庫鍊路進行遠端複制,資料庫域名主要用于oracle分布式環境中的複制。舉例說明如: 全國交通運政系統的分布式資料庫,其中: 福建節點: fj.jtyz 福建廈門節點: xm.fj.jtyz 江西: jx.jtyz 江西上饒:sr.jx.jtyz 這就是資料庫域名。 資料庫域名在存在于參數檔案中,他的參數是db_domain. 查詢資料庫域名 方法一:select value from v$parameter where name = 'db_domain'; 方法二:show parameter domain 方法三:在參數檔案中查詢。 全局資料庫名 全局資料庫名=資料庫名+資料庫域名,如前述福建節點的全局資料庫名是:oradb.fj.jtyz 四、資料庫服務名 什麼是資料庫服務名? 從oracle9i版本開始,引入了一個新的參數,即資料庫服務名。參數名是SERVICE_NAME。 如果資料庫有域名,則資料庫服務名就是全局資料庫名;否則,資料庫服務名與資料庫名相同。 查詢資料庫服務名 方法一:select value from v$parameter where name = 'service_name'; 方法二:show parameter service_name 方法三:在參數檔案中查詢。 資料庫服務名與網絡連接配接 從oracle8i開如的oracle網絡元件,資料庫與用戶端的連接配接主機串使用資料庫服務名。之前用的是ORACLE_SID,即資料庫執行個體名 建立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:啟動資料庫審計功能 g. 其他系統參數 CONTROL_FILES:控制檔案名及路徑 Undo_MANAGMENT:Undo空間管理方式 ROLLBACK_SEGMENTS:為這個例程配置設定的回退段名 OPEN_CURSORS:一個使用者一次可以打開的遊标的最大值 PROCESSES:最大程序數,包括背景程序與伺服器程序 IFILE:另一個參數檔案的名字 DB_RECOVERY_FILE_DEST:自動資料庫備份目錄 DB_RECOVERY_FILE_SIZE:資料庫備份檔案大小 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. 确定資料庫名、資料庫執行個體名和服務名并建立目錄(DBCA建立的腳本不包含建立目錄指令,須自己建立) 建立目錄指令(下面以 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. 建立參數檔案 在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... ... |