Oracle 10g管理工具的使用.doc_第1頁
Oracle 10g管理工具的使用.doc_第2頁
Oracle 10g管理工具的使用.doc_第3頁
Oracle 10g管理工具的使用.doc_第4頁
Oracle 10g管理工具的使用.doc_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Oracle 10g管理工具的使用DBA可以使用的管理工具OUI (Oracle Universal Installer)啟動方式: 所有程序Oracle-OraDb10g_home1Oracle Installation ProductsUniversal Installer功能:OUI是基于Java技術(shù)的圖形界面安裝工具,可以利用它完成不同操作系統(tǒng)、不同類型的、不同版本的Oracle軟件安裝及查看已經(jīng)安裝的產(chǎn)品。DBCA啟動方式: 所有程序Oracle-OraDb10g_home1Configuration and Migration ToolsDatabase Configuration Assisant 也可以在命令提示符下:輸入dbca功能: 創(chuàng)建數(shù)據(jù)庫 配置現(xiàn)有數(shù)據(jù)庫中的數(shù)據(jù)庫選項 刪除數(shù)據(jù)庫 管理數(shù)據(jù)庫模板OEM登陸方法OEM是基于java技術(shù),并且是以B/S模式運作的一個很重要的Oracle數(shù)據(jù)庫的管理工具。OEM登陸方法: 在瀏覽器地址欄中輸入: http:/主機名:1158/em , 回車即可出現(xiàn)登陸界面.在$ORACLE_HOMEinstallportlist.ini中找到需要的端口號 OEM登陸界面超級用戶登陸OEM的方法1 . 用sys 用戶登陸,必須是sysdba或sysoper身份。 2 . 用system用戶登錄,必須是normal身份。將OEM管理權(quán)限授予其他用戶如果想通過其他用戶來管理OEM, 設(shè)置方式: OEM 界面的右上角 “設(shè)置” , 點開在設(shè)置頁面上,可以看到OEM的管理員,如圖:OEM的使用利用OEM可以執(zhí)行一些管理任務(wù)。關(guān)閉和啟動數(shù)據(jù)庫創(chuàng)建、刪除、修改各種對象查看數(shù)據(jù)庫例程(分配的內(nèi)存及后臺進程)的性能及狀態(tài)信息。管理用戶備份和恢復(fù)數(shù)據(jù)庫導(dǎo)入和導(dǎo)出數(shù)據(jù)EMSQL*Plus何為SQL*Plus?SQL*Plus的啟動和退出SQL*Plus的連接和斷開SQL*Plus的輸入、編輯、運行命令自定義SQL*Plus的環(huán)境格式化查詢結(jié)果SQL*Plus是Oracle公司獨立的SQL語言工具產(chǎn)品,Plus表示Oracle公司在標準SQL基礎(chǔ)上進行了擴充。它是Oracle系列產(chǎn)品中的一個非常重要的、在服務(wù)器端和客戶端都可以使用的工具。它提供了一個圖形化的界面。iSQL*Plus是SQL*Plus的基于Web瀏覽器的接口。SQL*PLUS的啟動啟動方式1: 開始- 程序 - Oracle-Oradb10g_home1 Application DevelopmentSQL Plus啟動方式2: 在命令提示符下 1. sqlplus /nolog - - nolog表示nologin 如:conn sys/o123 as sysdba; 2. sqlplusw /nolog - - w代表以窗口來啟動 如:conn sys/o123 as sysdba;SQL*Plus的退出在SQL 提示符下,輸入命令:exit ,回車即可。 如: SQL exit ;File ExitSQL*Plus的連接和斷開如果在SQL*Plus的環(huán)境下,要更換用戶,可以不退出SQL*Plus的情況下,先斷開當前用戶,然后再連接其他用戶。連接: 1. SQL conn sys/o123 as sysdba; 2. SQL conn Enter user-name: system Enter password: Connected.斷開: SQL discSQL*Plus的輸入、編輯、運行命令輸入命令:告訴SQL*Plus干什么??梢暂斎氲拿钣腥N類型:SQL命令: 標準SQL命令,用于操作數(shù)據(jù)庫中的信息。PL*SQL塊: 用于操作數(shù)據(jù)庫中的信息。SQL*Plus命令: 編輯、保存、運行、格式化查詢結(jié)果,及定義SQL*Plus的環(huán)境等。 如:conn ,disc ,exit , set ,save ,edit等。SQL*Plus 編輯命令及功能SQL*Plus 的文件操作命令及功能SQL*Plus的運行命令在一個完整的SQL語句之后,輸入; 或 / ,然后回車即可。在緩沖區(qū)中的SQL語句,直接輸入Run 或 /, 運行。運行腳本: SQL start c:1.sql; 回車 SQL c:1.sql; 回車關(guān)于腳本文件創(chuàng)建保存: SQL save c:2.sql;獲?。?SQL get c:2.sql;運行: SQL start c:1.sql; SQL c:1.sql; 編輯: 自定義SQL*Plus環(huán)境Show命令:顯示環(huán)境變量 Show all :顯示當前環(huán)境中所有的環(huán)境設(shè)置參數(shù)。 Show 某一參數(shù):顯示當前環(huán)境中該參數(shù)的設(shè)置值。Set命令:設(shè)置環(huán)境變量 如:SQL set linesize 200也可以在圖形化界面上進行設(shè)置。 Options菜單Environment 在如下彈出窗口中設(shè)置:如果希望每次啟動SQL*Plus時都會自動使用特定的環(huán)境變量的設(shè)置,則可以修改DB_1sqlplusadmin目錄下的glogin.sql腳本文件。當然 ,要先對glogin.sql進行編輯。iSql*Plusisql*Plus是SQL*Plus的基于Web的接口,是SQL*Plus產(chǎn)品的一個組件。啟動isql*Plus的方法: 1. 在OEM中啟動 2. 在瀏覽器中啟動在瀏覽器中啟動 在用戶名中輸入數(shù)據(jù)用戶,口令中輸入密碼,連接字符串默認okOFA (Optimal Flexible Architecture)又稱Oracle 10g最佳靈活體系結(jié)構(gòu)。是指一組較好的Oracle軟件和數(shù)據(jù)文件及目錄的命名約定和存儲位置規(guī)則,使用戶可以很容易地找到與Oracle數(shù)據(jù)庫相關(guān)的文件集合。使管理更直觀方便。Oracle的數(shù)據(jù)字典數(shù)據(jù)字典組成 數(shù)據(jù)字典表 數(shù)據(jù)字典視圖數(shù)據(jù)字典視圖 (靜態(tài))動態(tài)性能視圖 在OEM中查詢數(shù)據(jù)字典數(shù)據(jù)字典數(shù)據(jù)字典表數(shù)據(jù)字典表主要保存以下信息:各種方案對象的定義信息,如表、視圖、索引、同義詞、序列、存儲過程、函數(shù)、包、觸發(fā)器和各種對象;存儲空間的分配信息;安全信息(帳戶、權(quán)限、角色等)例程運行時的性能和統(tǒng)計信息其他數(shù)據(jù)庫本身的基本信息數(shù)據(jù)字典的用途Oracle通過查詢數(shù)據(jù)字典表或數(shù)據(jù)字典視圖來獲取有關(guān)用戶、方案對象、對象的定義信息;每次執(zhí)行DDL語句修改方案對象和對象后,Oracle都在數(shù)據(jù)字典中記錄下所做的修改;用戶可以從數(shù)據(jù)字典的只讀視圖中,獲取各種與對象方案和對象有關(guān)的信息;DBA可以從數(shù)據(jù)字典的動態(tài)性能視圖中,監(jiān)視例程的運行狀態(tài),為性能調(diào)整提供依據(jù).數(shù)據(jù)字典的組成數(shù)據(jù)字典中的信息存儲在表和視圖中。數(shù)據(jù)字典的組成: 數(shù)據(jù)字典表:保存了加密的服務(wù)器系統(tǒng)信息。 數(shù)據(jù)字典視圖:把數(shù)據(jù)字典表中的信息經(jīng)過解密和其他的加工處理后形成的。主要是將各種信息分權(quán)限、分類存放,便于用戶使用。只有Oracle才負責對數(shù)據(jù)字典表進行管理和維護,任何用戶不能修改它。數(shù)據(jù)字典表數(shù)據(jù)字典視圖數(shù)據(jù)字典表中的信息經(jīng)過解密和一些加工處理后,以視圖的方式呈現(xiàn)給用戶。主要是將各種信息分權(quán)限、分類存放,便于用戶使用。大多數(shù)用戶都可以通過數(shù)據(jù)字典視圖查詢所需要的與數(shù)據(jù)庫相關(guān)的系統(tǒng)信息。數(shù)據(jù)字典視圖數(shù)據(jù)字典的使用數(shù)據(jù)字典視圖根據(jù)名字前綴分為三類: USER_ 用戶視圖 自己擁有的對象 ALL_ 擴展用戶視圖 自己擁有 + 被授權(quán)的 DBA_ 數(shù)據(jù)庫管理員視圖 全部對象在例程的運行過程中,Oracle會在數(shù)據(jù)字典中維護一系列虛擬的表,在其中記錄與數(shù)據(jù)庫活動相關(guān)的性能統(tǒng)計信息,這些表被稱為動態(tài)性能表。這些虛擬的表不是固定的表,它們在例程啟動時被創(chuàng)建,并向其中添加信息,而當例程消亡時,這些表也就刪除了。信息主要來源于SGA和控制文件。動態(tài)性能視圖屬于SYS用戶。Oracle自動在動態(tài)性能表上創(chuàng)建了一些視圖,即動態(tài)性能視圖。所有動態(tài)性能視圖都以v_$開頭。Oracle為這些視圖創(chuàng)建了公用同義詞v$,因此動態(tài)性能視圖也被稱為v$視圖。Oracle體系結(jié)構(gòu)Oracle服務(wù)器的工作原理處理過程可以簡單的描述為:用戶在其機器上運行基于Oracle的應(yīng)用程序(如:SQL*PLUS、PL/SQL Developer等),即啟動用戶進程.客戶機、服務(wù)器之間建立連接(Connect).服務(wù)器為用戶建立會話(Session),并為該會話建立一個PGA(Program Global Area,程序全局區(qū))以存儲與該會話相關(guān)的信息.在同一個連接中,不同的用戶有不同的會話.啟動服務(wù)進程,由該服務(wù)進程負責執(zhí)行該會話的各項任務(wù).用戶進程發(fā)送SQL語句(select、update、commit.)服務(wù)器進程解析、編譯、執(zhí)行SQL語句,然后將結(jié)果寫入數(shù)據(jù)庫并返回結(jié)果給用戶進程。用戶進程接收返回的SQL執(zhí)行結(jié)果。在應(yīng)用程序中顯示SQL執(zhí)行結(jié)果.體系結(jié)構(gòu)及其組件綜述圖示內(nèi)容如下:Oracle的體系結(jié)構(gòu)可分客戶端、服務(wù)器兩大部分??蛻舳耍涸诳蛻魴C上安裝管理工具后,運行工具啟動用戶進程。服務(wù)器:包括例程和數(shù)據(jù)庫兩部分。 例程:包括SGA及后臺進程。 數(shù)據(jù)庫:包括控制文件、數(shù)據(jù)文件、日志文件等操作系統(tǒng)文件.Oracle 服務(wù)器Oracle 數(shù)據(jù)庫服務(wù)器:主要由兩部分組成: 物理數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)。物理數(shù)據(jù)庫是保存數(shù)據(jù)的物理存儲設(shè)備。數(shù)據(jù)庫管理系統(tǒng)是用戶與物理數(shù)據(jù)庫之間的一個中間是軟件層,又稱例程。有一定的結(jié)構(gòu)。或稱數(shù)據(jù)庫服務(wù)器由例程和數(shù)據(jù)庫組成 如果把Oracle數(shù)據(jù)庫比作一部汽車,instance相當于汽車的發(fā)動機一樣,啟動oracle數(shù)據(jù)庫前提應(yīng)先啟動instance.當用戶連接到數(shù)據(jù)庫并使用數(shù)據(jù)庫時,實際上是連接到該數(shù)據(jù)庫的例程,通過例程來連接、使用數(shù)據(jù)庫。所以例程是用戶和數(shù)據(jù)庫之間的中間層。例程與數(shù)據(jù)庫的區(qū)別:數(shù)據(jù)庫指的是存儲數(shù)據(jù)的物理結(jié)構(gòu),總是實際存在的;例程則是由內(nèi)存結(jié)構(gòu)和一系列進程組成,可以啟動和關(guān)閉。SID(系統(tǒng)標識符)一臺計算機上可以創(chuàng)建多個Oracle數(shù)據(jù)庫,一個數(shù)據(jù)庫上可以有多個例程。為了使例程間不混淆,每個例程都稱為:SID(SystemIDentify)加以區(qū)分。例 程的組成連接到例程建立連接和會話 :建立用戶連接建立會話數(shù)據(jù)庫Oracle數(shù)據(jù)庫物理存儲結(jié)構(gòu) 物理存儲結(jié)構(gòu)是現(xiàn)實的數(shù)據(jù)存儲單元,對應(yīng)于操作系統(tǒng)文件。Oracle數(shù)據(jù)庫就是由駐留在服務(wù)器的磁盤上的這些操作系統(tǒng)文件所組成的。這些文件有數(shù)據(jù)文件、日志文件、控制文件。物理存儲結(jié)構(gòu)物理結(jié)構(gòu)主要包括以下三種文件:控制文件數(shù)據(jù)文件重做日志數(shù)據(jù)文件(Data File)數(shù)據(jù)文件(Data File)是物理存儲Oracle數(shù)據(jù)庫數(shù)據(jù)的文件。其特點如下: 每一個數(shù)據(jù)文件只與一個數(shù)據(jù)庫相聯(lián)系。 一個表空間可包含一個或多個數(shù)據(jù)文件。 一個數(shù)據(jù)文件只能屬于一個表空間。重做日志文件(Redo File) 重做日志文件(Redo Log File)記錄所有對數(shù)據(jù)庫數(shù)據(jù)的修改,以備恢復(fù)數(shù)據(jù)時使用。其特點如下: 每一個數(shù)據(jù)庫至少包含兩個日志文件組。 日志文件組以循環(huán)方式進行寫操作。 每一個日志文件成員對應(yīng)一個物理文件??刂莆募?控制文件(Control File)是一個較小的二進制文件,用于描述數(shù)據(jù)庫結(jié)構(gòu)。參數(shù)文件 參數(shù)文件(Parameter File)也被稱為初始化參數(shù)文件,用于存儲SGA、可選的Oracle特性和后臺進程的配置參數(shù)。 當數(shù)據(jù)庫啟動,并在創(chuàng)建例程或讀取控制文件之前,會先按其中的參數(shù)進行例程的配置。 位置:$Oracle_home dbs邏輯存儲結(jié)構(gòu)主要描述Oracle數(shù)據(jù)庫的內(nèi)部存儲結(jié)構(gòu),從技術(shù)概念上描述Oracle數(shù)據(jù)庫中如何組織、管理數(shù)據(jù)??梢苑譃?部分:表空間、段、區(qū)、塊。表空間 表空間是數(shù)據(jù)庫的邏輯劃分的最大單元,一個Oracle數(shù)據(jù)庫至少有一個表空間,即system表空間。安裝完Oracle 10g后,自動創(chuàng)建的表空間為:Example 示例表空間,存放例子數(shù)據(jù)庫的方案對象。SYSTEM 系統(tǒng)表空間,存放關(guān)于表空間名稱、控制文件、數(shù)據(jù)文件等管理信息,它屬于sys、system方案。不能刪除或重命名。SYSAUX 輔助系統(tǒng)表空間 ,用于減少系統(tǒng)表空間的負荷,提高效率。是Oracle 10g新增加的表空間。TEMP 臨時表空間,存放臨時表和臨時數(shù)據(jù),用于排序。USERS 用戶表空間,存放永久性用戶對象及私有信息,也稱數(shù)據(jù)表空間。注意:每一個數(shù)據(jù)庫都應(yīng)該有一個用戶表空間,以便在創(chuàng)建用戶時分配給用戶,否則用戶的數(shù)據(jù)將會使用SYSTEM表空間。UNDOTBS1 重做表,段 (Segment)段是表空間的下一個邏輯單位,是表空間中一個指定類型的邏輯存儲結(jié)構(gòu),它由一個或多個區(qū)組成,段將占用并增長存儲空間。分類如下 :區(qū)(extent) 區(qū)(Extent)是由物理上連續(xù)存放的塊構(gòu)成,區(qū)是Oracle存儲分配的最小單位,由一個或多個塊 組成。 當在數(shù)據(jù)庫中創(chuàng)建帶有實際存儲結(jié)構(gòu)的方案對象(如表、索引)時,Oracle將為該方案對象分配若干個區(qū),以便組成一個對應(yīng)的段來為該方案對象提供初始的存儲空間。當段中已分配的區(qū)都寫滿后,Oracle就為該段分配一個新的區(qū),以便容納更多的數(shù)據(jù)。 分配的第一個區(qū)稱初始區(qū),以后分配的區(qū)稱增量區(qū)。數(shù)據(jù)庫塊(Block)數(shù)據(jù)庫塊(Database Block)是數(shù)據(jù)庫使用的I/O最小單元,又稱邏輯塊或ORACLE塊。 一個數(shù)據(jù)庫塊對應(yīng)一個或多個物理操作系統(tǒng)塊,塊的大小由參數(shù)DB_BLOCK_SIZE確定。數(shù)據(jù)塊的大小是操作系統(tǒng)塊大小的整數(shù)倍. 以Win2K為例,操作系統(tǒng)塊(OS block)的大小為4kb,所以O(shè)racle Block的大小可以是4kb,8kb,16kb等等。存儲結(jié)構(gòu)總結(jié)內(nèi)存結(jié)構(gòu)Oracle內(nèi)存結(jié)構(gòu)由兩個部分組成:系統(tǒng)全局區(qū)(SGA): 在啟動例程時分配, 是Oracle例程的基礎(chǔ)組件。程序全局區(qū)(PGA): 當啟動服務(wù)器進程時分配。系統(tǒng)全局區(qū)(SGA)SGA是ORACLE系統(tǒng)為實例分配的一組共享緩沖存儲區(qū),用于存放數(shù)據(jù)庫數(shù)據(jù)和控制信息,以實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的管理和操作。 每個例程都只有一個SGA. 它是不同用戶進程與服務(wù)進程進行通信的中心,數(shù)據(jù)庫的各種操作主要在SGA中進行,所以稱其為系統(tǒng)全局區(qū). 創(chuàng)建例程時,Oracle為SGA分配內(nèi)存; 終止例程時,釋放SGA所占用的內(nèi)存.系統(tǒng)全局區(qū)SGA由以下內(nèi)存結(jié)構(gòu)組成:共享池數(shù)據(jù)高速緩存重做日志緩沖區(qū)在SGA內(nèi)可以配置以下內(nèi)存結(jié)構(gòu):大緩沖池Java池共享池用于存儲:最近執(zhí)行的SQL語句最近使用的數(shù)據(jù)定義由兩個關(guān)鍵的內(nèi)存結(jié)構(gòu)組成:庫高速緩存數(shù)據(jù)字典高速緩存尺寸由參數(shù)SHARED_POOL_SIZE控制庫高速緩存存儲最近解析使用的SQL和PL/SQL語句信息 Oracle 在執(zhí)行用戶進程提交的各種SQL語句、PL/SQL前要對其進行解析(包括語法解析、對象確認、權(quán)限判斷、操作優(yōu)化等)并生成執(zhí)行計劃,占用一定的系統(tǒng)資源。由兩個部分組成:共享SQL區(qū)共享PL/SQL區(qū)數(shù)據(jù)字典高速緩存最近使用的對象定義集合包括數(shù)據(jù)庫文件、表、索引、列、用戶、權(quán)限和其它數(shù)據(jù)庫對象的信息在解析階段, 服務(wù)器進程查看數(shù)據(jù)字典信息以解析對象名數(shù)據(jù)字典緩存信息到內(nèi)存,以提高查詢和DML響應(yīng)時間尺寸由共享池尺寸確定數(shù)據(jù)高速緩存存儲從數(shù)據(jù)文件檢索的數(shù)據(jù)塊副本通過LRU算法管理DB_BLOCK_SIZE確定了緩沖區(qū)數(shù)據(jù)塊大小 初次訪問數(shù)據(jù)時,Oracle將讀取磁盤上的數(shù)據(jù)文件,將數(shù)據(jù)放入數(shù)據(jù)高速緩存,再處理數(shù)據(jù); 如果數(shù)據(jù)已經(jīng)位于數(shù)據(jù)高速緩存中時,Oracle直接操作數(shù)據(jù)。數(shù)據(jù)高速緩存的緩存塊分為三類:臟緩存塊: 存放已經(jīng)被修改過的緩存塊. 當SQL修改某個緩存塊中的數(shù)據(jù),則這個緩存塊被標記為臟緩存塊空閑緩存塊: 等待寫入數(shù)據(jù)的空閑緩存塊.命中緩存塊: 最近正在被訪問的緩存塊.管理緩存塊的列表Oracle通過2個列表來管理上述緩存塊: 臟列表(DIRTY) 包括被修改過但尚未寫到數(shù)據(jù)文件的緩沖塊。 LRU(Least Recently Used)列表 包括空閑緩沖塊、命中緩存塊,以及還沒有移到臟列表的緩沖塊。數(shù)據(jù)高速緩存工作原理重做日志緩沖區(qū)記錄所有數(shù)據(jù)塊變化。當執(zhí)行DML, 如:update、delete、insert或者create、alter、drop 等語句時,Oracle都會為這些操作生成重做記錄.主要目的是恢復(fù)Oracle總是先記錄日志、后記錄數(shù)據(jù)由LOG_BUFFER初始化參數(shù)定義重做日志高速緩存工作原理為提高效率,重做記錄并不直接寫入磁盤的重做日志文件,而是先寫入重做日志緩存;當重做日志緩存中的重做記錄達到一定數(shù)量時,由LGWR進程寫入重做日志.(先內(nèi)存后磁盤)當2個(至少2個)重做日志切換時,由ARCH將重做日志中的數(shù)據(jù)寫入歸檔日志文件,以做備份.大池 大池用于需要大內(nèi)存操作提供相對獨立的內(nèi)存空間,以便提高性能。 大池是可選的內(nèi)存結(jié)構(gòu)。 DBA可以決定是否需要在SGA中創(chuàng)建大池。 需要大池的操作: 數(shù)據(jù)庫備份和恢復(fù) 大量排序的SQL語句 并行化的數(shù)據(jù)庫操作Java池8i以后提供的對Java的支持,用于存放Java代碼、Java程序等.一般不小于20M,以便虛擬機運行.尺寸由JAVA_POOL_SIZE控制程序全局區(qū)(PGA)為每個連接到數(shù)據(jù)庫的用戶進程預(yù)留內(nèi)存當建立服務(wù)器進程時分配當終止服務(wù)器進程時釋放只能由一個進程使用進程結(jié)構(gòu)Oracle使用各種類型進程:用戶進程: 當用戶請求連接到Oracle server時啟動服務(wù)進程: 連接到例程,并且當用戶建立會話時啟動后臺進程: 當啟動例程時啟動用戶進程請求與Oracle server交互的程序必須首先建立連接不會與Oracle server直接交互服務(wù)器進程直接與Oracle server交互的程序完成調(diào)用并返回結(jié)果可以是專用的或者共享的后臺進程作用:維護并加強物理結(jié)構(gòu)和內(nèi)存結(jié)構(gòu)的關(guān)系。必需后臺進程:DBWnPMONCKPTLGWRSMON可選后臺進程:ARCnLMDn QMNnCJQ0LMON RECODnnnLMS SnnnLCKnPnnnDBWnLGWRSMONPMONCKPTARCnOracle數(shù)據(jù)庫包括DB和DBMS兩部分兩部分。這兩部分分別對應(yīng)著database和例程。Oracle數(shù)據(jù)庫的database的存儲結(jié)構(gòu): 物理存儲結(jié)構(gòu)、邏輯存儲結(jié)構(gòu)。Oracle數(shù)據(jù)庫的例程部分: 內(nèi)存結(jié)構(gòu)、進程結(jié)構(gòu)方案對象管理 管理索引16.1 索引的概念索引的作用索引的作用:為了加快查詢的速度。如果一個表中包含有很多條記錄,當對表執(zhí)行查詢時,必須將所有的記錄一一取出,以便將每一條記錄與查詢條件進行比較,然后再返回滿足條件的記錄。這叫做全表掃描。這樣進行操作的時間開銷和I/O開銷都是很巨大的,這時可以考慮通過索引來減小開銷。如果在表中查詢指定的記錄,在沒有索引的情況下,必須遍歷整個表,而有了索引之后,只需要在索引中找到符合查詢條件的索引字段值,就可以通過保存在索引中的ROWID(相當于書的頁碼)快速找到表中對應(yīng)的記錄。因此,為表建立索引,既能夠減少查詢操作的時間開銷,又能夠減少I/O操作的開銷。 索引提高查詢速度舉例 Conn sys/o123 as sysdba;Grant dba to scott;Conn scott/tiger;Create table mytabAs select * from dba_objects where owner in (PUBLIC, SCOTT,SYS,SYSTEM);Select count(*) from mytab; - - - 43363行Set autotrace trace explain;Select owner,object_name from mytab where object_name=DBA_INDEXES;Create index idx on mytab(object_name);Select owner,object_name from mytab where object_name=DBA_INDEXES;索引存儲方式索引與表一樣,不僅需要在數(shù)據(jù)字典中保存索引的定義,還需要在表空間中為它分配實際的存儲空間存儲索引數(shù)據(jù)。當創(chuàng)建索引時,Oracle會自動在用戶的默認表空間中或指定的表空間中創(chuàng)建一個索引段,為索引數(shù)據(jù)提供存儲空間。與創(chuàng)建表的情況類似,在創(chuàng)建索引時,也可以為它設(shè)置存儲參數(shù)。為某個表創(chuàng)建的索引不必和這個表保存在同一個表空間中。索引原理在創(chuàng)建索引時,Oracle首先對將要建立索引的字段進行排序,然后將排序后的字段值和該值對應(yīng)記錄的物理地址ROWID存儲在索引段中。比如,假設(shè)使用下面的語句為emp表中的ename字段建立索引: CREATE INDEX EMP_ENAME ON EMP(ENAME); Oracle 首先在emp表中按照ename字段進行排序(默認為升序),然后按照排序后的順序?qū)name字段值和對應(yīng)的ROWID 逐個保存在索引中。 (P564 圖16.2)在索引創(chuàng)建之后,如果執(zhí)行的一條WHERE子句中引用了ENAME字段的查詢,比如: SELECT * FROM EMP WHERE ENAME=SMITHOracle將首先對索引中ENANME字段進行一次快速搜索(因為索引中的ENMAE字段已經(jīng)排序,所以這個搜索是很快的),找到符合條件的ENAME字段值所對應(yīng)的ROWID,然后再利用ROWID到EMP表中提取相應(yīng)的記錄。這個操作比逐條讀取EMP表中未排序的記錄要快得多。 (P563 圖16.1)可以看出,在索引中只保存索引字段的值與相應(yīng)的ROWID,這種組合稱為索引條目。索引的分類單列索引與復(fù)合索引唯一索引與非唯一索引標準索引(B樹索引或二叉樹索引)位圖索引 函數(shù)索引單列索引與復(fù)合索引基于單個列所創(chuàng)建的索引,單列索引。基于兩列或多列所創(chuàng)建的索引,即復(fù)合索引。唯一索引與非唯一索引索引列值不能重復(fù)、即唯一索引。索引列值可以重復(fù)、即非唯一索引。標準索引(B樹索引)用B-樹結(jié)構(gòu)來組織索引的。根:包含指向分支節(jié)點的信息。分支節(jié)點:包含指向下一級分支部分和指向葉子節(jié)點的信息。葉子節(jié)點:包含索引列和指向表中每個匹配行的ROWID信息。 P566 圖16.3位圖索引對于取值范圍只限于幾個固定值的列,比如性別列(只能是男和女),婚姻狀況列(只能是未婚、已婚和離異)。如果在其上建立B樹標準索引,會返回大量記錄,并不能明顯提高查詢速度??梢越⑽粓D索引,是一種全新的索引機制。 基數(shù):指某個列可能擁有的不重復(fù)數(shù)值的個數(shù)。對于基數(shù)很小的列,只是有限的幾個固定值,如果要建立索引,就應(yīng)該建立位圖索引,而不是默認的建立B樹索引。Oracle建議,當一個列的基數(shù)與表的總行數(shù)的比例小于1%,就應(yīng)當建立位圖索引。函數(shù)的索引如下查詢:Set autotrace on explainselect empno,ename,job,sal from scott.emp where (sal+comm+sal*0.2)2000;Create Index funidx_salcomm on emp(sal+comm+sal*0.2) -創(chuàng)建索引select empno,ename,job,sal from scott.emp where (sal+comm+sal*0.2)2000;16.2 管理索引的策略雖然使用索引能有提高查詢速度,但是如果為某個表創(chuàng)建了過多的索引,反而有可能會降低更新、插入、刪除等操作的速度。因為Oracle在更新表中數(shù)據(jù)的同時,還需要更新索引中的數(shù)據(jù)。因此,用戶在進行應(yīng)用設(shè)計時,一定要認真考慮,決定:什么表上創(chuàng)建索引、創(chuàng)建什么索引、創(chuàng)建幾個索引,以及如何創(chuàng)建索引等問題。一、選擇合適的索引類型(是B樹索引還是位圖索引)列的基數(shù)特性:通常如果列的基數(shù)只達到表中記錄數(shù)的1%或者列中的大部分值都重復(fù)出現(xiàn)100次以上,則對該列應(yīng)當建立位圖索引。而B樹索引則適用于那些具有高基數(shù)的列。列的NULL值特性:位圖索引中可以記錄具有NULL值的列,而在 B 樹索引中將忽略所有的NULL值列。因此如果某個列需要進行與NULL值相關(guān)的查詢,則應(yīng)當為它建立位圖索引。是否需要節(jié)省存儲空間:B樹索引會占用大量的存儲空間;而位圖索引通常只占用很少的存儲空間。查詢條件的邏輯運算符特性:對于一些特殊類型的查詢語句,位圖索引能夠比B樹索引更有效地提高查詢速度。比如,如果在查詢的WHERE子句中包含AND、OR等邏輯運算符,使用位圖索引可以極大地提高查詢速度,因為邏輯運算直接可以在位圖索引內(nèi)部完成。查詢條件的比較運算符特性:對于另外一些查詢語句,B樹索引能夠比位圖索引更有效地提高查詢速度。比如那些經(jīng)常會使用等比較運算符進行查詢的列,應(yīng)當使用B樹索引而不是位圖索引,這是由B樹索引的搜索特性決定的。二、在適當?shù)谋?、適當?shù)牧猩蟿?chuàng)建適當數(shù)量的索引在選擇應(yīng)該為哪些表創(chuàng)建索引,可以參考以下建議:一般不需要為很小的表創(chuàng)建索引對于比較大的表來說,如果經(jīng)常查詢的記錄數(shù)目少于表中所有記錄數(shù)目的15%,可以考慮為該表建立索引。在選擇應(yīng)該為表中的哪些列建立索引,參考以下建議:應(yīng)當為大部分字段值都不重復(fù)的字段建立索引。對于取值范圍很大的字段應(yīng)當創(chuàng)建普通索引(樹索引;對于取值范圍很小的字段應(yīng)當創(chuàng)建位圖索引。對于包含很多NULL值,經(jīng)常需要查詢所有NULL值記錄的字段,應(yīng)當建立索引。否則沒必要建立索引。不能在LONG或BLOB等大對象數(shù)據(jù)類型的列上創(chuàng)建索引。oracle會自動為具有primary key和unique約束的字段創(chuàng)建索引,不會自動為foreign key字段創(chuàng)建索引。三、合理設(shè)置復(fù)合索引中的列順序 復(fù)合索引中列的順序會影響查詢的速度,應(yīng)該根據(jù)查詢的頻率,查詢次數(shù)越多的字段放在越前面。四、設(shè)置合適的PCTREE參數(shù) 如果經(jīng)常要對某個表執(zhí)行插入操作,就應(yīng)該為這個表的索引設(shè)設(shè)一個較高的PCTREE參數(shù),以便預(yù)留更多的空閑空間。五、設(shè)置合適的表空間 把索引跟表放在相同的表空間,便于數(shù)據(jù)庫的管理比如說備份的時候;放在不同的表空間(不同的硬盤)可以減少I/O的訪問競爭,提高數(shù)據(jù)庫的訪問性能。因此,應(yīng)該根據(jù)具體情況為每個索引指定表空間。六、NOLOGGING項的使用創(chuàng)建索引時指定該選項,oracle將不會產(chǎn)生重做日志記錄。因此,在對大表創(chuàng)建索引的時候最好設(shè)置該項,這樣可以節(jié)省重做日志文件的存儲空間,并縮短創(chuàng)建索引的時間。七、裝載數(shù)據(jù)后再創(chuàng)建索引 在裝載數(shù)據(jù)之前最好不要創(chuàng)建索引,因為如果先建立了索引,那么每當向表中插入一條記錄時,Oracle 都要對索引段的索引內(nèi)容進行更新,這樣會大大降低裝載數(shù)據(jù)的速度。16.3 創(chuàng)建索引Create UNIQE|BITMAP Index schema.index_name on table_name(colum1 asc|desc, colum2 asc|desc, |express Tablespace tablespace_name pctfree n1 storagy(initial n2) Compress n3|nocompress Logging|Nologging Online Compute statistics ReverseNosort創(chuàng)建標準(B樹)索引創(chuàng)建位圖索引創(chuàng)建函數(shù)索引16.4 修改索引索引的重命名 ALTER INDEX idx_emp_name rename to new idx_emp_name;合并索引 (用來清理碎片) ALTER INDEX idx_emp_name coalesce;重建索引(用來清理碎片) ALTER INDEX idx_emp_name rebuild; 可以在重建索引時使用TABLESPACE選項,將索引轉(zhuǎn)移到另一個表空間。 ALTER INDEX idx_emp_name REBUID TABLESPACE example; 管理視圖主要內(nèi)容 17.1 視圖的概念使用視圖的目的提供各種數(shù)據(jù)表現(xiàn)形式;提供某些安全性保證隱藏數(shù)據(jù)的邏輯復(fù)雜性并簡化查詢語句執(zhí)行某些必須使用視圖的查詢簡化用戶權(quán)限的管理17.2 創(chuàng)建視圖語法: Create or replace force|noforce VIEW schema.view_name( column1,column2,) As select from where With check option CONSTRAINT contraint_name with read only創(chuàng)建簡單視圖創(chuàng)建視圖emp_view,從emp表中查詢出empno,ename,job字段。 Create view EMP_VIEW As select empno,ename,job from scott.emp;創(chuàng)建視圖-給列定義別名創(chuàng)建視圖 -帶with read only選項WITH CHECK OPTION 選項創(chuàng)建連接視圖基于多表或視圖所創(chuàng)建的視圖,即定義視圖的select子查詢是一個連接查詢。使用連接視圖的主要目的是簡化查詢。查詢scott方案下的dept、emp表創(chuàng)建出視圖v_emp_dept,包含ename、dname。能查詢出dname為Sales的相關(guān)人員信息。創(chuàng)建外聯(lián)接視圖創(chuàng)建復(fù)雜視圖 復(fù)雜視圖是指包含函數(shù)、表達式或分組數(shù)據(jù)的視圖。使用復(fù)雜視圖的主要目的是為了簡化查詢操作。復(fù)雜視圖主要用于執(zhí)行查詢操作,并不用于執(zhí)行DML操作。強制創(chuàng)建視圖正常情況下,如果基本表不存在,創(chuàng)建視圖就會失敗。但是,如果創(chuàng)建視圖的語句沒有語法錯誤,只要使用FORCE選項(默認值為NO FORCE)就可以創(chuàng)建該視圖。該視圖被稱為帶錯誤的視圖(view with errors)。此時視圖處于失效(INVALID)狀態(tài),不能執(zhí)行該視圖定義的查詢。但以后可以修復(fù)出現(xiàn)的錯誤,如創(chuàng)建其基礎(chǔ)表。Oracle會在相關(guān)的視圖受到訪問時自動重新編譯失效的視圖。這樣做的目的主要是為了使基礎(chǔ)表的創(chuàng)建和修改與視圖的創(chuàng)建和修改之間沒有依賴性,便于同步工作,提高效率。查看視圖信息查詢當前方案中所有視圖的信息查詢當前方案中某一視圖的列名信息更改視圖創(chuàng)建視圖之后,可能要改視圖的定義,如修改列名或修改所對應(yīng)的子查詢。更改視圖之后,依賴于該視圖的所有視圖和PL/SQL 程序都將變?yōu)镮NVALID狀態(tài)。更改視圖的方法是使用CREATE OR REPLACE VIEW 語句。這種方法代替了先刪除后創(chuàng)建的方法,會保留在該視圖上授予的各種權(quán)限,但與該視圖相關(guān)的存儲過程和視圖會失效。視圖的重新編譯當基礎(chǔ)表改變后,視圖會失效。盡管Oracle會在這些視圖受到訪問時會自動重新編譯這些視圖,但也可以使用ALTER VIEW語句明確地重新編譯視圖。當視圖被重新編譯后,依賴該視圖的對象就會失效。刪除視圖使用DROP VIEW語句刪除視圖。視圖被刪除后,該視圖的定義會從詞典中被刪除,并且在該視圖上授予的權(quán)限也將被刪除。其他引用該視圖的視圖及存儲過程等都會失效。DROP VIEW v_test-tab;注意:刪除視圖只是刪除視圖的定義,并不會刪除基表的數(shù)據(jù)。17.5 在連接視圖上執(zhí)行DML操作在視圖上進行的所有DML操作,最終都會在基礎(chǔ)表的數(shù)據(jù)上完成??筛逻B接視圖和鍵值保存表在插入數(shù)據(jù)時,除了需要滿足上面提到的條件之外,還需要保證那些沒有包含在視圖定義中的基表的列必須允許空值。如果在視圖定義中包含了with check option子句,那么對視圖的修改除了前面的那些原則之外,還必須滿足指定的約束條件。鍵值保存表如果在連接視圖中的一個基礎(chǔ)表的主鍵(主鍵、惟一鍵)在它的視圖中仍然存在,則稱這個基礎(chǔ)表為鍵值保存表。尤其是,鍵值保存表中的主鍵在它的連接視圖中仍然是主鍵。連接視圖的更新準則和DML操作一般準則INSERT準則1)插入列必須在鍵值保存表中2)滿足這些列已有的約束條件3)一次只能插入一個表。4)使用with check option選項,不可以INSERTUPDATE準則DELETE準則查詢視圖的可更新列OEM中管理視圖在OEM中查看、編輯、刪除視圖方案對象管理 - 管理表什么是Oracle數(shù)據(jù)庫方案?方案是用戶使用的一系列數(shù)據(jù)庫對象的集合。而用戶是用來連接數(shù)據(jù)庫并完成存取數(shù)據(jù)庫對象的數(shù)據(jù)。一個用戶一般對應(yīng)一個方案,該用戶的方案名等于用戶名,并作為該用戶的缺省方案。這也就是在企業(yè)管理器的方案下看到方案名都為數(shù)據(jù)庫用戶名的原因。如果SCOTT用戶創(chuàng)建了表EMP,那么SCOTT就是表EMP的所有者,SCOTT訪問SCOTT用戶下的EMP表時不用在表名前面加上表的所有者:SELECT * FROM EMP;如果其他用戶要訪問表EMP,要在表名前面加上表的所有者:SELECT * FROM scott.emp; 否則會顯示沒有此表。Oracle中的方案對象類型Table :表Index :索引View: 視圖Synonym:同義詞(方案對象的一個別名,簡化訪問,提高安全)Sequence:序列 (命名的順序編號生成器)Procedure、function、trigger等 存儲過程、函數(shù)、觸發(fā)器 (是用戶利用PL/SQL編寫的命名的程序塊)管理表本章內(nèi)容 15.1 表概述表是Oracle數(shù)據(jù)庫最基本的對象,其他許多數(shù)據(jù)庫對象(如索引、視圖)都以表為基礎(chǔ)。表被用于實際存儲數(shù)據(jù)。表中有列,列中存儲多行數(shù)據(jù)。在關(guān)系數(shù)據(jù)庫中,不同表中的數(shù)據(jù)彼此之間可能存在一定的關(guān)系。從用戶角度看,表是一張二維表,即:表由行和列兩部分組成,表通過行和列來組織數(shù)據(jù)。通常稱表中的一行為一條記錄,稱表中的一列為一個字段。表和列的命名規(guī)則長度30個字節(jié)之內(nèi)。必須以字母開頭。由字母、數(shù)字、_、#、$組成。不能使用保留字。非法的命名,可以用“”引著。一個表內(nèi)列名要唯一。表名在名稱空間內(nèi)必須唯一。Oracle中的數(shù)據(jù)類型字符型 char 、nchar varchar2、nvarchar2大對象數(shù)據(jù)類型 clob 、nclob blob、bfile (二進制)二進制數(shù)據(jù)類型 Row、Long Row數(shù)字型 number(p,s)時間和日期 Date,. 行數(shù)據(jù)類型RowID、URowID15.2 數(shù)據(jù)完整性與約束條件數(shù)據(jù)完整性是關(guān)系數(shù)據(jù)庫模型的基本原則,是用戶在表上定義的一系列規(guī)則或約束條件,以及在表之間定義的一系列相互關(guān)系。數(shù)據(jù)完整性的作用,簡單地說,就是強制要求數(shù)據(jù)庫中只能接受正確的、合理的數(shù)據(jù),防止錯誤的或無效的數(shù)據(jù)被插入到表中。分三種類型:15.2 數(shù)據(jù)完整性與約束條件數(shù)據(jù)完整性實體完整性參照完整性用戶自定義完整性15.3 管理表的策略設(shè)計表的結(jié)構(gòu)表的類型標準表(按堆組織)索引表(以 B樹索引段)外部表(操作系統(tǒng)文件中)分區(qū)表簇表表的位置及大小使用建表的相關(guān)選項 (nologging)創(chuàng)建表如果要在自己的方案中創(chuàng)建表,要求用戶必須具有CREATE TABLE系統(tǒng)權(quán)限。如果要在其他方案中建表,則要求用戶必須具有CREATE ANY TABLE系統(tǒng)權(quán)限。創(chuàng)建表時,Oracle會為該表分配相應(yīng)的表段。表段的名稱與表名完全相同,并且所有的數(shù)據(jù)都會被存放在該表段中。要求表的創(chuàng)建者必須指定表空間上具有空間配額或具有UNLIMITED TABLESPACE系統(tǒng)權(quán)限。Create table 語句Create table schema. table_name (column1 datatype1 default exp1 column1_constraint, column2 datatype2 default exp2 column2_constraint, table_constraint) on commit delete|preserve rows organizition heap.|index|external partition by() tablespace tablespace_name Logging|nologging compress|nocompress as query創(chuàng)建標準表 create table department ( deptid number(9) not null, deptno char(2) default 01 not null, name varchar2(20), address varchar2(30), constraint pk_deptid primary key(deptid) validate, constraint uniq_name unique(name) novalidate, constraint chk_address check (address in (1號樓,2號樓,3號樓,4號樓) validate)臨時表Oracle 的臨時表分為事務(wù)型和會話型。事務(wù)型臨時表 就是指在事務(wù)處理過程中插入的記錄只在事務(wù)提交或回滾之前有效,一旦事務(wù)完成,表中的記錄便被自動清除。會話型臨時表 指臨時表中的數(shù)據(jù)在本次會話期間一直有效,直到會話結(jié)束。會話結(jié)束后表中針對此次會話的數(shù)據(jù)會自動清空。 當在臨時表上執(zhí)行DML操作時,既不會加鎖也不會將數(shù)據(jù)變化寫到重做日志中。因此不能用臨時表保存永久數(shù)據(jù)。創(chuàng)建臨時表Create global temporary table table_name ( ) on commit delete rows | on commit preserve rows其中:global temporary table指定表的類型為臨時表。on commit delete rows指定表為事務(wù)臨時表。on commit preserve rows指定表為會話臨時表。事務(wù)臨時表例子:會話臨時表的例子:索引表對于普通表而言,其數(shù)據(jù)以無序方式存儲;而對于索引表來說,其數(shù)據(jù)以B-樹結(jié)構(gòu)來組織,并且其葉子數(shù)據(jù)塊既包含鍵列數(shù)據(jù),也包含非鍵列數(shù)據(jù)。一般情況下,表及其索引數(shù)據(jù)分別存放在表段和索引段中,當在where子句中引

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論