ORACLE傻瓜手冊.doc_第1頁
ORACLE傻瓜手冊.doc_第2頁
ORACLE傻瓜手冊.doc_第3頁
ORACLE傻瓜手冊.doc_第4頁
ORACLE傻瓜手冊.doc_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

ORACLE傻瓜手冊 To be DBA or not to be, that is NOT the question.- Arron 作者允許自由散發(fā)此文檔,但對其進行的任何修改應通知作者,以便于維護版本。 Oracle是一頭恐龍,而且隨著版本號的不斷上升,體系越來越龐大,功能越來越復 雜,以至于變成了一座偶像,使許多IT技術(shù)人員心存畏懼。然而偶像終究是要打碎的, 技術(shù)的生命力只有在人民心中才能延續(xù)成長。筆者從事過一段時間的Oracle數(shù)據(jù)庫管理 和開發(fā),深感Oracle文檔雖全,但過于瑣碎蕪雜,實用的精華淹沒于細節(jié)羅列的大海之 中,不能迅速有效地投入應用,而且缺少實踐經(jīng)驗的總結(jié)。高手牛人疏于為文,知識由 于沒有共享流傳而不能起到倍增的效果,令我等后輩不得不重起爐灶,慘淡經(jīng)營,期間 的經(jīng)驗教訓雖可寶貴,卻實出無奈。筆者雖愚,愿盡力而為,集思廣益,累積成文。希 望能借助大家的合力,將有關(guān)Oracle的知識化繁為簡,化神秘為普及,從而提高軟件應 用項目的水平。 作者:周云飛 email:zhou_ Oracle8以8.1.5為界分為普通版本和internet版本。普通版版本號8.0.x,接觸較多的是8.0.5;internet版版本號包括8.1.5(Release 1),8.1.6(Release 2),8.1.7(Release 3)。普通版簡稱Oracle 8,internet版簡稱Oracle 8i。如果不作特別說明,文中凡出現(xiàn)Oracle 8i均指8.1.7版。 Oracle9i目前出到第二版,版本號為9.2,簡稱Oracle 9i。如果不作特別說明,文中凡出現(xiàn)Oracle 9i均指9.2版。 本手冊介紹Oracle配置的基本方法,描述的是所然而不是所以然。全部操作以命令行方式出現(xiàn),不涉及GUI(只有白刃戰(zhàn)才是真正的戰(zhàn)斗)。鑒于大家對Windows已經(jīng)十分熟悉,同時為了避免Windows和Unix兩種截然不同的使用和開發(fā)風格給描述帶來的復雜性,所以本手冊不介紹在Windows上的Oracle(上帝的歸上帝,愷撒的歸愷撒)。 文中所有例子以oradb作為數(shù)據(jù)庫實例名,數(shù)據(jù)庫用戶dbuser,口令oracle。如果不作特別說明,關(guān)于Oracle 8i所有的例子都在Solaris 8 Intel Platform+Oracle 8iR3上通過,關(guān)于Oracle 9i所有的例子都在RedHat Linux 7.3+Oracle 9iR2上通過。附錄文件sample.tar包含全部示例,簡稱附錄。 大量使用表emp作為例子(參見附錄08_proc/proc/single/emp.sql): create table emp ( no number(12) not null, name char(20) not null, age number(6) not null, duty char(1) not null, salary number(12) not null, upd_ts date not null, primary key (no) ); 開發(fā)中對應emp表結(jié)構(gòu),定義其宿主結(jié)構(gòu)(參見附錄08_proc/proc/single/db.h): typedef struct double no; char name21; int age; char duty2; double salary; char upd_ts15; emp_t; 修改歷史: 2000/07 版本1.0 2000/09 版本1.1 增加Linux安裝,export,import使用,數(shù)據(jù)庫監(jiān)控及優(yōu)化(utlbstat,utlestat,分析session),語言時間環(huán)境變量設置,Oracle8.0.5手工建庫腳本(wei_dick提供,稍加修改) 2000/10 版本1.2 修改Linux安裝中RedHat 6.x+Oracle 8.1.6、數(shù)據(jù)庫優(yōu)化中配置文件和session分析、常用技巧中下載上傳文本數(shù)據(jù)和訪問他機數(shù)據(jù)庫;增加創(chuàng)建數(shù)據(jù)庫實例中數(shù)據(jù)字典參考、常用技巧中刪除冗余記錄、應用開發(fā),常見錯誤 感謝liu_freeman,jiao_julian,huang_miles等人對開發(fā)工具所作的努力 2001/03 版本1.3 修改安裝部分、init.ora配置、常用技巧、應用開發(fā);增加手工建庫、MTS配置;重寫開發(fā)工具 感謝li_bo的大力幫助 2001/09 版本1.4 修改數(shù)據(jù)庫優(yōu)化,使之較系統(tǒng)化;增加應用開發(fā)中多線程下的數(shù)據(jù)庫連接 2002/04 版本1.5 修改數(shù)據(jù)庫優(yōu)化、多線程條件下數(shù)據(jù)庫編程;分離附錄的程序范例 2002/12 版本2.0 重新安排內(nèi)容,增加Oracle 9i安裝配置、OCI開發(fā)、mysql安裝配置開發(fā),補充數(shù)據(jù)庫優(yōu)化、PROC開發(fā) ORACLE傻瓜手冊 1 1 安裝 6 1.1 通用設置 6 1.2 UnixWare7 7 1.2.1 Oracle 8 7 1.3 HP-UX 8 1.3.1 Oracle8 8 1.4 Linux 9 1.4.1 kernel 2.0 & glibc 2.0 9 1.4.2 kernel 2.2 & glibc 2.1 9 1.4.3 kernel 2.4 & glibc 2.2 10 1.5 Solaris 11 2 創(chuàng)建 13 2.1 Oracle 8 & 8i 13 2.1.1 工具創(chuàng)建 13 2.1.2 手工創(chuàng)建 13 2.1.3 MTS(multi-threaded server) 14 2.1.4 調(diào)整臨時表空間 15 2.1.5 調(diào)整回滾表空間 15 2.1.6 調(diào)整日志 15 2.1.7 調(diào)整用戶表空間 16 2.1.8 創(chuàng)建用戶 17 2.1.9 創(chuàng)建數(shù)據(jù)對象 17 2.1.10 創(chuàng)建只讀用戶 18 2.1.11 啟動及關(guān)閉數(shù)據(jù)庫實例 19 2.1.12 網(wǎng)絡配置 19 2.2 Oracle 9i 21 2.2.1 手工創(chuàng)建 21 2.2.2 創(chuàng)建用戶表空間 22 3 初始化文件配置 23 3.1 Oracle 8 & 8i 23 3.2 Oracle 9i 25 4 工具 26 4.1 sqlldr 26 4.2 exp 27 4.3 imp 28 4.4 sqlplus 29 4.4.1 命令行參數(shù) 29 4.4.2 提示符命令 29 4.4.3 SET選項 30 4.4.4 例子 30 5 備份及恢復 32 5.1 export與import方式 32 5.2 冷備份 32 5.3 聯(lián)機全備份+日志備份 32 5.3.1 設置 32 5.3.2 步驟 33 5.3.3 恢復 33 5.4 注意要點 34 6 數(shù)據(jù)庫優(yōu)化 35 6.1 通用設置 35 6.1.1 硬件配置 35 6.1.2 應用配置 35 6.1.3 日常性能監(jiān)控 36 6.2 實戰(zhàn)分析 36 6.2.1 總體分析 37 6.2.2 詳細分析 37 6.3 專題分析 39 6.3.1 巨表查詢 39 6.3.2 對比測試 41 6.3.3 上下載數(shù)據(jù) 44 6.3.4 回滾空間快照陳舊(snapshot too old) 46 7 常用技巧 48 7.1 增加、更改和刪除域 48 7.2 刪除冗余記錄 49 7.3 更改字符集 49 7.4 表數(shù)據(jù)遷移 50 7.5 成批生成數(shù)據(jù) 50 7.6 注意要點 51 8 嵌入式SQL(C) 53 8.1 編譯 53 8.2 SQL語句 54 8.2.1 內(nèi)部類型與宿主類型對應 54 8.2.2 連接和斷開 54 8.2.3 事務 55 8.2.4 標準SQL語句 55 8.2.5 動態(tài)SQL語句 55 8.2.6 數(shù)組操作 56 8.3 編程框架 58 8.3.1 總體原則 58 8.3.2 單線程和多線程 59 8.3.3 開發(fā)工具 60 9 OCI-Oracle Call Interface 61 9.1 連接和斷開 61 9.1.1 句柄層次 61 9.1.2 連接流程 61 9.1.3 斷開流程 62 9.2 SQL語句 62 9.2.1 事務 62 9.2.2 無結(jié)果集的sql語句 63 9.2.3 有結(jié)果集的sql語句 63 9.2.4 LOB 65 9.3 編程框架 67 9.3.1 總體原則 67 9.3.2 sql語句 68 9.3.3 函數(shù) 69 10 附錄-MYSQL 72 10.1 安裝配置 72 10.2 管理 72 10.2.1 初始調(diào)整 72 10.2.2 建立用戶對象 73 10.3 開發(fā) 73 10.3.1 連接和斷開 73 10.3.2 無結(jié)果集的sql語句 74 10.3.3 有結(jié)果集的sql 74 10.3.4 錯誤處理 75 1 安裝 所有參見內(nèi)容都在附件01_install_02_create_03_init/下。 1.1 通用設置 文件系統(tǒng)swap 創(chuàng)建文件系統(tǒng)時應考慮Oracle對swap的需要,大約每個oracle服務進程將占用10-20Mswap空間,通常操作系統(tǒng)建議2倍于內(nèi)存的swap空間,數(shù)據(jù)庫系統(tǒng)可能要求更多些。 操作系統(tǒng)用戶和環(huán)境變量 Oracle文檔要求為數(shù)據(jù)庫系統(tǒng)的管理和使用建立3個或更多的組,但這個需求是可以忽略的,實踐中并沒有體現(xiàn)其必要性。為簡化操作起見,只建立dba組,即擁有更新軟件和管理最高權(quán)限(SYSDBA)的操作系統(tǒng)用戶組,此組稱為OSDBA,屬于此組的用戶可以SYSDBA身份登錄進任何一個數(shù)據(jù)庫實例,簡單的,只建立一個用戶,習慣上使用oracle的名稱。 $ groupadd dba $ useradd -g dba -d /home/oracle -m -s /bin/bash oracle 確定oracle 系統(tǒng)的根目錄ORACLE_BASE,如/opt/oracle,所有的軟件和配置都在這個目錄下展開,雖然并非一定需要如此,但這是一個良好的習慣。同時確定軟件安裝的起始點ORACLE_HOME,通常在ORACLE_BASE下。 修改oracle用戶的.profile,加入以下各行,或者修改/etc/profile,使每一個用戶都獲得環(huán)境變量設置 umask 022 ORACLE_BASE=/opt/oracle ORACLE_HOME=$ORACLE_BASE/product/版本號(如8.0.5,8.1.7,9.2.0等) ORACLE_SID=oradb ORACLE_TERM=ansi 僅與Oracle8字符界面安裝有關(guān) ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data 字符集支持 NLS_LANG=American_America.ZHS16CGB231280(Oracle8支持)|ZHS16GBK(Oracle8i支持)|ZHS16GB18030(Oracle9i支持) NLS_DATE_FORMAT=YYYYMMDDHH24MISS LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH 動態(tài)連接路徑,Unixware中要確保/usr/ucb/lib在/usr/ccs/lib之后出現(xiàn) TMPDIR=/tmp 安裝中Oracle會在此目錄下存儲相當數(shù)量的文件,所以TMPDIR所在的磁盤分區(qū)要確??臻e空間的大小,至少在1G左右 PATH=$PATH:$ORACLE_HOME/bin export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_TERM ORA_NLS33 NLS_LANG NLS_DATE_FORMAT LD_LIBRARY_PATH TMPDIR 參見profile。 注意: NLS_LANG=American_America.ZHS16CGB231280(ZHS16GBK) American指顯示信息時所用的語言,竊以為憑大家的英語水平足夠應付,如改為SIMPLIFIED CHINESE,在不帶中文支持的終端上就沒人能看懂了。 America指地區(qū) ZHS16CGB231280指Client工具使用的字符集,一般使用ZHS16CGB231280,Oracle8i已支持到ZHS16GBK NLS_DATE_FORMAT=YYYYMMDDHH24MISS Oracle的date類型過于靈活,為統(tǒng)一時間格式,利于編程,應將時間的輸入輸出格式限定為14位字符串,如20000101235959 據(jù)oracle文檔,此參數(shù)可按照session,操作系統(tǒng)用戶環(huán)境,init.ora由高到低的優(yōu)先級順序設置,依次覆蓋。 相關(guān)系統(tǒng)表: v$nls_parameters v$nls_valid_values X-Window Oracle 8的安裝程序是光盤mount點/bin/orainst,使用字符界面,不用考慮X-Window。 Oracle 8i和9i使用光盤mount點/runInstaller進行安裝,它是用Java編寫的圖形界面,對中文處理有問題,所以應在進入X-Window前確保語言(LANG)和地域(LC_ALL,LC_TYPE,)環(huán)境變量不是中文。 LANG=C LC_ALL=C 安裝選項 Oracle 8i的主要軟件包在安裝選項Enterprise中,但并不包括proc,必須進行第二次安裝,可選擇安裝選項Client中的programmer。 Oracle 9i的主要軟件包在安裝選項Enterprise安裝選項中,但并不包括proc,必須進行第二次安裝,一定要選擇安裝選項Client中的Administrator。runInstaller的穩(wěn)定性欠佳,建議每次安裝結(jié)束后,先退出,再進行下一次安裝。 1.2 UnixWare7 1.2.1 Oracle 8 確認操作系統(tǒng)的交換分區(qū)swap不少于350M 認為該打的補丁統(tǒng)統(tǒng)打上,寧濫毋缺。UnixWare7.0.1必須打的補丁為ptf7033,ptf7051,ptf7052,ptf7068,ptf7096。 將/etc/default/login中的ulimit設為大于2113674(稍大一點即可,太大會有問題) 將/etc/conf/node.d/async中的600改為666 修改以下核心參數(shù) 核心參數(shù) 必需值 解釋 SHMMAX 2147483647 共享內(nèi)存段最大尺寸 SHMMNI 100 系統(tǒng)共享內(nèi)存段標識最大數(shù)目 SHMSEG 15 每個進程所能使用最大共享內(nèi)存段數(shù)目 SEMMNI 100 核心信號量標識最大數(shù)目 SEMMSL 150 每個信號量標識包含的信號量個數(shù) SCORLIM 0X7FFFFFFF Core文件最大尺寸 HCORLIM 0X7FFFFFFF SDATLIM 0X7FFFFFFF 進程堆最大尺寸 HDATLIM 0X7FFFFFFF SVMMLIM 0X7FFFFFFF 進程最大映射地址 HVMMLIM 0X7FFFFFFF SFSZLIM 0X7FFFFFFF 進程文件最大偏移量 HFSZLIM 0X7FFFFFFF SFNOLIM 128 進程能打開的最大文件個數(shù) HFNOLIM 2048 NPROC 20+(8*MAXUSERS) MAX:125000 ARG_MAX 1,048,576 NPBUF 100 I/O緩沖區(qū)數(shù)目 MAXUP 1000 用戶同時使用的最大進程個數(shù) STRTHRESH 0X500000 流能使用的最大字節(jié)數(shù) 為優(yōu)化應用系統(tǒng)修改以下核心參數(shù) 核心參數(shù) 參考值 解釋 MSGMAX 8192 消息最大尺寸 MSGMNB 81920 消息隊列尺寸 MSGMNI 2048 系統(tǒng)能并存的最大消息隊列數(shù)目 MSGSSZ 16384 MSGTQL 4096 系統(tǒng)能并用的消息頭數(shù)目 SEMMNI 1024 SEMMSL 150 也可通過編輯/etc/conf/cf.d/stune達到同樣效果 重新連接內(nèi)核,重起或運行/etc/conf/bin/idbuild -B 修改核心參數(shù)SEMMAP時,注意要同時修改/etc/conf/mtune.d/ipc中相應的MAX值 建立/var/opt/oracle,使oracle成為此目錄屬主 mount oracle光盤,通常mount目錄為/SD-CDROM_1 root用戶,ORACLE_OWNER=oracle,執(zhí)行光盤上orainst中oratab.sh,建立/var/opt/oracle/oratab 安裝時,選custom方式,安裝時不建立數(shù)據(jù)庫,字符集可選Simplified Chinese 1.3 HP-UX 1.3.1 Oracle 8 流程大致與unixware相同,調(diào)整kernel參數(shù)可通過sam,選擇/Kernel Configuration/Actions/Apply Tuned Parameter Set/OLTP Database Server System,另外為提高I/O能力,還需調(diào)整以下參數(shù): 核心參數(shù) 參考值 解釋 bufpages 61992 緩沖頁 dbc_max_pct 10 動態(tài)緩存占內(nèi)存最大百分比 dbc_min_pct 10 動態(tài)緩存占內(nèi)存最小百分比 nbuf 設定共享庫目錄SHLIB_PATH,不是LD_LIBRARY_PATH SHLIB_PATH=$SHLIB_PATH:$ORACLE_HOME/lib;export SHLIB_PATH 1.4 Linux 1.4.1 kernel 2.0 & glibc 2.0 代表產(chǎn)品為Red Hat Linux 5.1。 Oracle 8在RedHat5.1上能成功安裝,安裝軟件包為805ship.tgz 一般不會在RedHat5.1上安裝Oracle8i以上的版本 修改共享內(nèi)存最大尺寸限制: 在系統(tǒng)初始化腳本/etc/rc.d/rc.sysinit中加入: echo 2147483648 /proc/sys/kernel/shmmax 重啟計算機。這樣做避免了Oracle分配的共享內(nèi)存碎片化,對提高效率有好處。 原$ORACLE_HOME/precomp/admin/pcscfg.cfg中sys_include有誤,使proc預處理pc程序失敗,安裝結(jié)束后,應設為:sys_include=(/usr/include,/usr/lib/gcc -lib/i386-redhat-linux/egcs-2.91.66/include)(視gcc版本而定) 1.4.2 kernel 2.2 & glibc 2.1 代表產(chǎn)品為Red Hat Linux 6.2。 修改共享內(nèi)存最大尺寸限制: 在系統(tǒng)初始化腳本/etc/rc.d/rc.sysinit中加入: echo 2147483648 /proc/sys/kernel/shmmax 重啟計算機。這樣做避免了Oracle分配的共享內(nèi)存碎片化,對提高效率有好處。 原$ORACLE_HOME/precomp/admin/pcscfg.cfg中sys_include有誤,使proc預處理pc程序失敗,安裝結(jié)束后,應設為sys_include=(/usr/include,/usr/lib/gcc -lib/i386-redhat-linux/egcs-2.91.66/include) (視gcc版本而定) Oracle 8 本來已經(jīng)很少有人在LinuxKernel2.2的系統(tǒng)中安裝Oracle8.0.5,但筆者實在懷念8.0.5純粹的文本界面和與之相處的無數(shù)不眠之夜,故收錄如下: Oracle8在kernel為2.2.x的linux中是無法正常運行的,運行可執(zhí)行文件如svrmgrl,sqlplus時會導致Segmentation fault,原因在于這些linux使用了默認的libc2.1,與Oracle8程序重連接所需的libc2.0不兼容。Oracle的補丁程序其實是將Oracle可執(zhí)行程序的重連接腳本中l(wèi)ibc位置重新定位到libc2.0上去,并用舊版的gcc,ld重新連接可執(zhí)行文件。為此必須先在系統(tǒng)中安裝兼容庫和相應工具。這是權(quán)宜之計,而且僅對RedHat有效。 root用戶 rpm -ivh tcl-8.0.3-20.i386.rpm Oracle的Intelligent Agent要使用 rpm -ivh compat-binutils-5.2-.23.1.i386.rpm rpm -ivh compat-glibc-5.2-.i386.rpm rpm -ivh compat-egcs-5.2-1.0.3a.1.i386.rpm rpm -ivh compat-egcs-c+-5.2-1.0.3a.1.i386.rpm rpm -ivh compat-libs-5.2-1.i386.rpm 版本號可略有差異 oracle用戶安裝Oracle8.0.5但不創(chuàng)建instance,如選擇安裝文檔,則會產(chǎn)生如下錯誤: A write error occurred while try to copy /home/oracle/setup_oracle/unixdoc/server.805/install/lnx_server.805.map to /oracle/product/8.0.5/doc/server.805/install/lnx_server.805(No such file or directory). 這是安裝程序的一個bug-不能創(chuàng)建目錄??蛇M入$ORACLE_HOME/doc,mkdir -p server.805/install,再選擇Retry 從/pub/www/otn/linux下載glibcpatch.tgz,在某一目錄(如/patch)下展開 cd /patch glibcpatch.sh 經(jīng)過一段時間后,看到Applied glibc patch for Oracle 8.0.5.x successfully,表明補丁成功。此時就能成功創(chuàng)建instance。 Oracle 8i 推薦使用典型安裝,否則會產(chǎn)生難以預料的錯誤。 1.4.3 kernel 2.4 & glibc 2.2 代表產(chǎn)品為Red Hat Linux 7.3,SuSE Linux 7.3。 Oracle 8i 與Oracle8在RedHat Linux 6.2上安裝所遇到的問題一樣,Oracle 8i使用的glibc 2.1與操作系統(tǒng)自帶的glibc 2.2不能兼容,解決的方法也一樣,要安裝glibc 2.1的兼容庫,并重新連接Oracle各組件。 除非萬不得已,不建議使用兼容方式,因此省略安裝步驟,可參閱網(wǎng)上有關(guān)文檔。 Oracle 9i RedHat 7.3 修改共享內(nèi)存最大尺寸限制: 在系統(tǒng)初始化腳本/etc/rc.d/rc.sysinit中加入: echo 2147483648 /proc/sys/kernel/shmmax。 修改信號量參數(shù): 在系統(tǒng)初始化腳本/etc/rc.d/rc.sysinit中加入: echo 250 32000 100 128 /proc/sys/kernel/sem。 這4個參數(shù)依次為SEMMSL(每個用戶擁有信號量最大數(shù)量),SEMMNS(系統(tǒng)信號量最大數(shù)量),SEMOPM(每次semop系統(tǒng)調(diào)用操作數(shù)),SEMMNI(系統(tǒng)信號量集最大數(shù)量),事實上只有SEMOP是需要調(diào)整的。 重啟計算機。 在連接可執(zhí)行文件過程中,會發(fā)生中斷,打開$ORACLE_HOME/ctx/lib/env_ctx.mk,找到INSO_LINK,在-L$(CTXLIB) -L$(LDLIBFLAG)m后加入-L$(LDLIBFLAG)dl,重試。 SuSE 7.3 與RedHat類似,但SuSE沒有/etc/rc.d/rc.sysinit,筆者選擇/etc/rc.d/rc,將核心參數(shù)修改添加到最后exit語句之前。 安裝過程中沒有發(fā)生任何問題。 1.5 Solaris Oracle 8i在Solaris 7,8 Intel Platform上均能順利安裝,未測試Solaris Sparc Platform。 Oracle 9i目前無Solaris Intel Platform上的版本,由于條件所限,未測試在Solaris Sparc Platform上的Oracle 9i。 修改下列核心參數(shù): 核心參數(shù) 參考值 解釋 shmmax 物理內(nèi)存/2 共享內(nèi)存段最大尺寸 shmmin 1 共享內(nèi)存段最小尺寸 shmmni 100 系統(tǒng)共享內(nèi)存段標識最大數(shù)目 shmseg 10 每個進程所能使用最大共享內(nèi)存段數(shù)目 semmni 100 系統(tǒng)信號量標識最大數(shù)目 semmsl cesses+10 每個信號量標識包含的信號量數(shù)目 semmns sum(cesses)*10+max(cesses)+count(init.ora)*10 系統(tǒng)信號量最大數(shù)目 semopm 100 每個semop調(diào)用最大操作數(shù)目 rlim_fd_max 4096 系統(tǒng)文件句柄最大數(shù)目 rlim_fd_cur 1024 每個進程文件句柄最大數(shù)目 修改/etc/system,并重啟使核心參數(shù)生效 例: set shmsys:shminfo_shmmax=2147483648 set shmsys:shminfo_shmmin=1 set shmsys:shminfo_shmmni=100 set shmsys:shminfo_shmseg=10 set semsys:seminfo_semmni=200 set semsys:seminfo_semmsl=200 set semsys:seminfo_semmns=1000 set semsys:seminfo_semopm=100 set semsys:seminfo_semmap=200 set semsys:seminfo_semmnu=250 set semsys:seminfo_semvmx=32767 set msgsys:msginfo_msgmni=200 set msgsys:msginfo_msgmap=200 set msgsys:msginfo_msgmax=65536 set msgsys:msginfo_msgmnb=655360 set msgsys:msginfo_msgssz=64 set msgsys:msginfo_msgtql=1000 set msgsys:msginfo_msgseg=16384 set rlim_fd_max=4096 set rlim_fd_cur=1024 參見solaris_7_8/system 注意: 一定要先重建好kernel后再安裝,因為oracle安裝時根據(jù)kernel動態(tài)連接程序,如果先安裝oracle,即使隨后正確調(diào)整kernel,也會帶來許多問題,如oracle進程不能拉起,instance創(chuàng)建失敗等。 在kernel參數(shù)中,對數(shù)據(jù)庫運行影響最大的主要是SHMMAX,SEMMNS,SEMMNI,SEMMSL,SHMMAX取內(nèi)存一半即可,SEMMNS理論上應等于SEMMNI*SEMMSL,實際取一個較大值即可。 SEMMNS: 信號量最大個數(shù),有些系統(tǒng)可忽略,因為他與SEMMNI,SEMMSL有關(guān)。 2 創(chuàng)建 所有參見內(nèi)容都在附件01_install_02_create_03_init/下。 以oracle用戶進行操作,設定數(shù)據(jù)庫實例名為oradb(長度建議不要超過8個字符)。 2.1 Oracle 8 & 8i 2.1.1 工具創(chuàng)建 Oracle 8 運行$ORACLE_HOME/bin/orainst(安裝數(shù)據(jù)庫時必須選中oracle installer),選擇create database object,安裝界面中選Oracle Enterprise Server(RDBMS) mount point暫為$ORACLE_BASE,字符集為ZHS16CGB231280或ZHS16GBK,調(diào)整system,tools,users,rbs,temp,redolog等尺寸。 創(chuàng)建過程中會提示輸入osdba,osoper的UNIX組,這是向instance表明此組的成員享有角色sysdba或sysoper的權(quán)限,從而用connect / as sysdba替換掉connect internal Oracle 8i 進入X WINDOW,運行dbassist 2.1.2 手工創(chuàng)建 任何工具都有其局限性,熟練的數(shù)據(jù)庫管理員可采用手工方法創(chuàng)建數(shù)據(jù)庫,以增加對系統(tǒng)的靈活控制。 對于手工建庫Oracle 8與Oracle 8i的區(qū)別主要是建立的數(shù)據(jù)字典和存儲過程有些不同,Oracle8i的dbassistant可以生成建庫腳本供以后使用。 取得/8i/initoradb.ora,編輯如db_name,control_file,dump_dest等參數(shù),以符合實際情況。如不需要生成remote_login_passwordfile,可在initoradb.ora中設remote_login_passwordfile=none;如需要,在initoradb.ora中設remote_login_passwordfile=exclusive,運行orapwd file= password= 必須創(chuàng)建新生成文件所要用到的目錄,如在配置文件中指定的bdump,cdump,udump等目錄,以及數(shù)據(jù)文件存儲目錄。 將initoradb.ora轉(zhuǎn)移到$ORACLE_BASE/admin/oradb/pfile/,并連接到$ORACLE_HOME/dbs/initoradb.ora。 ln -s $ORACLE_BASE/admin/oradb/pfile/initoradb.ora $ORACLE_HOME/dbs/initoradb.ora 取得8i/createdb.sh,編輯如pfile,數(shù)據(jù)文件目錄等參數(shù),以符合實際情況,并轉(zhuǎn)移到$ORACLE_BASE/admin/oradb/create/下,執(zhí)行。 相關(guān)系統(tǒng)表: v$database v$datafile(file#,ts#,name) v$tablespace(ts#,name) v$parameter(SQLshow parameter) v$sga(SQLshow sga) 2.1.3 MTS(multi-threaded server) Oracle8使用兩種配置模式:dedicated server(專用模式)和shared server(即multi-threaded server共享模式),缺省使用專用模式。在連接數(shù)不很大且保持長期連接的情況下,專用模式為每個連接設立一個專用oracle服務進程,以保持較高的性能和穩(wěn)定性。而當連接數(shù)上升到非常高的數(shù)目且不保持長期連接時,數(shù)據(jù)庫管理開銷增大,并且占用大量系統(tǒng)資源,給操作系統(tǒng)形成帶來極大的壓力。在這種情況下,共享模式更為有利,它通過緩沖池和預先設定數(shù)目的server提供服務,每個連接不再有專用的oracle服務進程,每次SQL操作由分配器(dispatcher)確定oracle服務進程。 multi-thread僅表示分配器展開的多個服務流程,并非操作系統(tǒng)意義上的多線程 配置: initoradb.ora 加入 mts_dispatchers = (address=(protocol=TCP)(dispatchers=10) #初始分配器數(shù)量 mts_max_dispatchers = 15 #最大分配器數(shù)量 mts_servers = 50 #初始服務進程數(shù)量 mts_max_servers = 80 #最大服務進程數(shù)量 mts_service = oradb3 #MTS方式下對外提供的數(shù)據(jù)庫服務,非service_name 表明instance能夠提供MTS服務,不意味著取消dedicated方式 listener.ora 應刪除所有SID_LIST,SID_LIST的存在決定LISTENER以dedicated還是shared方式啟動oracle連接。如SID_LIST存在,LISTENER不再接受instance的登記,以dedicated方式啟動oracle連接; 如SID_LIST不存在,LISTENER啟動時不為任何instance服務,由instance來登記MTS service,以shared方式啟動oracle連接 client MTS在client端配置頗為怪誕,在tnsnames.ora中的host一定要寫數(shù)據(jù)庫server的名字,而且必須作全名解析,似乎server端接收到client端請求后會將主機字符串返回,應此client端必須能夠解析,否則會報出諸如database service not exist的錯誤 tnsnames.ora = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS=(PROTOCOL=TCP)(HOST= dbserver)(PORT = 1521) ) (CONNECT_DATA =(SERVICE_NAME = oradb) ) /etc/hosts dbserver 啟動:先起LISTENER,后起instance 以下步驟均在數(shù)據(jù)庫open狀態(tài)下,由system用戶完成 2.1.4 調(diào)整臨時表空間 alter tablespace temp temporary; #Oracle8的orainst沒有將temp的缺省值permanent改為temporary,這樣用戶在temp上暫存的數(shù)據(jù)均為永久對象,很快將temp空間耗完。Oracle8i已修正。 SQLalter tablespace temp default storage (initial 128k next 128k maxextents 5000 pctincrease 0); SQL查詢操作如group by,order by,distinct,join等需要在臨時段上展開數(shù)據(jù),須充分考慮臨時段的大小。 如果實例啟動參數(shù)指定hash_join_enabled=true(缺省為true),當oracle選擇以hash join方式進行表與表的聯(lián)接,oracle根據(jù)查詢操作的實際情況計算出hash_multiblock_io_count,此參數(shù)從屬于session,平時顯示為0,即hash join一次I/O讀寫需要的連續(xù)數(shù)據(jù)空間。這樣當此參數(shù)大于臨時段的next擴展塊時,hash join操作會中斷。如果預知聯(lián)接表的規(guī)模比較巨大,可使用alter tablespace temp default storage(next )將next值設為較大值,待全部操作完成后,再恢復正常。 2.1.5 調(diào)整回滾表空間 先將建庫工具缺省設定的若干個回滾段刪除 SQLalter rollback segment r01 offline; SQLdrop rollback segment r01; 根據(jù)實際需要創(chuàng)建回滾段(如r01-r10),供聯(lián)機處理和批處理使用 SQLcreate rollback segment r01 storage(initial 128k next 128k maxextents 5000 optimal 5M) tablespace rbs; SQLalter rollback segment r01 online; 注意修改$ORACLE_HOME/dbs/initoradb.ora中的激活回滾段段名 另創(chuàng)建一個尺寸無限制的回滾段(r99),供特殊用途 SQLcreate rollback segment r99 storage(initial 128k next 128k maxextents 5000) tablespace rbs; 如果在創(chuàng)建回滾段時使用create public rollback segment,則不需要在$ORACLE_HOME/dbs/initoradb.ora中用rollback_segment=()選項激活,推薦使用public方式 相關(guān)系統(tǒng)表: SQLselect segment_name, initial_extent, next_extent, max_extents, extents,bytes from dba_segments where segment_type=ROLLBACK; #回滾段占用空間狀況 SQLselect segment_name, status from dba_rollback_segs; #回滾段狀態(tài) 2.1.6 調(diào)整日志 建立日志組 SQLalter database add logfile group x(log1a,log1b) size 10M; 增加日志組成員 SQLalter database add logfile member log1c to group x; 刪除日志 數(shù)據(jù)庫實例至少需要2個日志組,只有狀態(tài)為inactive的日志組才能被刪除,而當前日志組狀態(tài)為current,上一個切換的日志組狀態(tài)為active,這就意味著至少存在3個日志組才能刪除其中的一個,如果要更新全部日志組,只能刪除一個,再創(chuàng)建一個,直至全部被更新。 SQLalter database drop logfile group x; 如果要刪除的日志組是當前日志組,必須先將其切換至狀態(tài)為inactive,再刪除。 SQLalter system switch logfile; 刪除日志組成員 SQLalter database drop logfile member log1c; 相關(guān)系統(tǒng)表 v$log 日志組狀態(tài)、占用空間、順序號等 v$logfile 日志組文件 2.1.7 調(diào)整用戶表空間 創(chuàng)建表空間 假定表數(shù)據(jù)在ts_data,索引在ts_index SQLcreate tablespace ts_data default storage(initial 10M next 10M maxextents 5000 pctincrease 0) datafile path/data_01.dbf size 500M; SQLcreate tablespace ts_index default storage(initial 5M next 5M maxextents 5000 pctincrease 0) datafile path/index_01.dbf size 500M; 參考命令:刪除表空間 SQLdrop tablespace data including contents; 刪除表空間及其包含的所有數(shù)據(jù)對象 相關(guān)系統(tǒng)表: user(dba)_tablespaces 增加表空間尺寸 假定表空間ts_data由path/data_01.dbf和path/data_02.dbf(500M)組成 增加一個數(shù)據(jù)文件: SQLalter tablespace ts_data add datafile path/data_03.dbf size 500M; 擴大原有文件大?。?SQLalter database datafile path/data_01.dbf resize 1000M; 移動表空間數(shù)據(jù)文件 假如要求為:將path1下data_01.dbf移至path2下,并把文件名改為data01.dbf 實例處于關(guān)閉狀態(tài) sqlplus / as sysdba SQLstartup mount 回到shell環(huán)境下 $ mv path1/data_01.dbf path2/data01.dbf $ mv path1/data_02.dbf path2/data02.dbf 再到sqlplus環(huán)境中 SQLalter database rename file path1/data_01.dbf to path2/data01.dbf; 或 SQLalter tablespace tbsdata rename datafile path/data_01.dbf to path2/data01.dbf; SQLalter database open; 查看剩余空間 SQLselect tablespace_name,sum(bytes),max(bytes) from dba_free_spac

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論