Oracle數(shù)據(jù)庫技術(shù)培訓(xùn).ppt_第1頁
Oracle數(shù)據(jù)庫技術(shù)培訓(xùn).ppt_第2頁
Oracle數(shù)據(jù)庫技術(shù)培訓(xùn).ppt_第3頁
Oracle數(shù)據(jù)庫技術(shù)培訓(xùn).ppt_第4頁
Oracle數(shù)據(jù)庫技術(shù)培訓(xùn).ppt_第5頁
已閱讀5頁,還剩86頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

,Oracle數(shù)據(jù)庫技術(shù)培訓(xùn),2008年4月,培訓(xùn)內(nèi)容,Oracle數(shù)據(jù)庫基礎(chǔ) Oracle 數(shù)據(jù)庫結(jié)構(gòu) Oracle 數(shù)據(jù)庫實(shí)例 * Oracle 數(shù)據(jù)庫訪問 * Oracle 分布式處理及分布式數(shù)據(jù)庫 * Oracle 數(shù)據(jù)庫備份和恢復(fù) *,培訓(xùn)內(nèi)容,數(shù)據(jù)庫基礎(chǔ) Oracle 數(shù)據(jù)庫結(jié)構(gòu) Data block, Extent,Segment Tablespace, Datafile Data Dictionary Oracle 數(shù)據(jù)庫實(shí)例 Database and Instance Startup and Shutdown Memory Structure Process Structure Oracle 數(shù)據(jù)庫訪問 Oracle Sql and Pl*sql Oracle Procedure and Package,培訓(xùn)內(nèi)容,Oracle分布式處理及分布式數(shù)據(jù)庫 分布式處理 Oracle 客戶機(jī)服務(wù)器的體系結(jié)構(gòu) Net8 分布式數(shù)據(jù)庫 Oracle分布式數(shù)據(jù)庫體系結(jié)構(gòu) Oracle 數(shù)據(jù)庫的備份和恢復(fù) 物理備份 熱備份 邏輯備份,數(shù)據(jù)庫基礎(chǔ),關(guān)系型數(shù)據(jù)庫,在1970年提出了關(guān)系模型的概念. 這是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的基礎(chǔ) (RDBMS). 關(guān)系模型包含以下內(nèi)容: 對(duì)象和關(guān)系的集合 關(guān)系上的一組操作 數(shù)據(jù)一致性管理,關(guān)系型數(shù)據(jù)庫,關(guān)系型數(shù)據(jù)庫是關(guān)系或二維表的集合.,Oracle Server,ID LAST_NAME FIRST_NAME 10 Havel Marta 11 Magee Colin 12 Giljum Henry 14 Nguyen Mai,SALES_ ID NAME PHONE REP_ID 201 Unisports 55-2066101 12 202 Simms Atheletics 81-20101 14 203 Delhi Sports 91-10351 14 204 Womansport 1-206-104-0103 11,Table Name: CUSTOMER,Table Name: EMP,關(guān)系型數(shù)據(jù)庫,SALES_ ID NAME PHONE REP_ID 201 Unisports 55-2066101 12 202 Simms Atheletics 81-20101 14 203 Delhi Sports 91-10351 14 204 Womansport 1-206-104-0103 11,Row (Tuple),Column (Attribute),S_CUSTOMER Table (Relation),每個(gè)表由行和列組成. 通過執(zhí)行結(jié)構(gòu)化查詢語句(SQL)操縱行上的數(shù)據(jù).,關(guān)系型數(shù)據(jù)庫,主鍵(PK)-基表中每一行都有的唯一標(biāo)識(shí)符. 外鍵(FK)-多個(gè)基表間建立邏輯關(guān)系的標(biāo)識(shí).,ID LAST_NAME FIRST_NAME 10 Havel Marta 11 Magee Colin 12 Giljum Henry 14 Nguyen Mai,Table Name: S_CUSTOMER,Table Name: S_EMP,Primary Key,Foreign Key,Primary Key,SALES_ ID NAME PHONE REP_ID 201 Unisports 55-2066101 12 202 Simms Atheletics 81-20101 14 203 Delhi Sports 91-10351 14 204 Womansport 1-206-104-0103 11,關(guān)系型數(shù)據(jù)庫特點(diǎn),通過SQL命令訪問或修改數(shù)據(jù)庫中的對(duì)象 由一系列基表構(gòu)成 支持大量操作 便于修改 數(shù)據(jù)獨(dú)立性,關(guān)系型數(shù)據(jù)庫對(duì)象,描述 數(shù)據(jù)庫的基本存儲(chǔ)單位(由行和列組成). 一個(gè)或多個(gè)表中數(shù)據(jù)的邏輯映像. 產(chǎn)生主鍵的值. 提高查詢的性能. 改變對(duì)象的名稱 過程、函數(shù)和包(由SQL、PL/SQL語句組成).,對(duì)象 基表 視圖 序列號(hào) 索引 同義詞 程序單元,Oracle 數(shù)據(jù)庫結(jié)構(gòu),Oracle數(shù)據(jù)庫結(jié)構(gòu),數(shù)據(jù)塊,區(qū)和段的關(guān)系 數(shù)據(jù)塊(db_block) 它是Oracle數(shù)據(jù)庫存儲(chǔ)的最小單位,Oracle是以多個(gè)Oracle塊的大小來請(qǐng)求數(shù)據(jù)的。 數(shù)據(jù)塊的大小是在數(shù)據(jù)庫創(chuàng)建時(shí)設(shè)定的。并且塊大小是操作系統(tǒng)塊大小的倍數(shù)。 塊格式:塊頭,表目錄,行目錄,行數(shù)據(jù),空閑空間,區(qū) (Extent),數(shù)據(jù)庫存儲(chǔ)空間分配的一個(gè)邏輯單元,它是由一些連續(xù)的數(shù)據(jù)塊組成。而一個(gè)或多個(gè)區(qū)又夠成段(Segment)。 初始區(qū)( Initial Extent ) 增量區(qū)( Next Extent ) 數(shù)據(jù)段區(qū) (在創(chuàng)建表時(shí),可指定表的存儲(chǔ)參數(shù)。若不指定,使用缺省表空間存 儲(chǔ)參數(shù)) 舉例:Create table table_name (col1 type, col2 type ) Storage ( initial 50K next 50k pctincrease 0); 索引段區(qū) 分配給索引段的區(qū),只要索引存在就保留其分配。如果刪除索引及相關(guān) 的表,Oracle將回收這些區(qū)給表空間中的其它用戶使用。,區(qū) (Extent),回退段區(qū) Oracle將自動(dòng)檢測(cè)數(shù)據(jù)庫中的回退段,是否已經(jīng)大于最佳大小, 若大于最大值,Oracle將自動(dòng)釋放回退段中的一個(gè)或多個(gè)區(qū)。 臨時(shí)段區(qū) Oracle在執(zhí)行完需要臨時(shí)段的語句時(shí),Oracle將自動(dòng)刪除臨時(shí)段, 并將其已經(jīng)分配給該段的區(qū)返回到相關(guān)的表空間中。,段(Segment),段是由一組區(qū)組成。它包括表空間中特定邏輯存儲(chǔ)結(jié)構(gòu)組成的所有數(shù) 據(jù)。 組成 數(shù)據(jù)段 表 分區(qū) 表簇 索引段 臨時(shí)段 在處理查詢時(shí),Oracle需要臨時(shí)工作區(qū),作為語法檢查和執(zhí)行的中間場(chǎng)所。Oracle將自動(dòng)分配臨時(shí)工作區(qū),通常臨時(shí)工作區(qū)作為排序工作區(qū)。,段(Segment),組成 (Cont) 臨時(shí)段 下列語句需要臨時(shí)工作區(qū) Create Index Select order by Select distinct Select group by Select Union Select Intersect Select Minus 若用戶在定義時(shí),若沒有指定臨時(shí)段表空間,則缺省的臨時(shí)段 空間為system表空間。,段(Segment),組成 (Cont) 回退段 每個(gè)數(shù)據(jù)庫都包含一個(gè)或多個(gè)回退段?;赝硕斡涗浟擞擅總€(gè)事 物處理改變了的原值。它主要用于提供讀一致性、回退事物處 理和恢復(fù)數(shù)據(jù)庫。 在創(chuàng)建回退段時(shí),需要指定該段的區(qū)的分配。每個(gè)回退段必須 至少分配兩個(gè)區(qū)。 事物順序地寫入回退段中。每個(gè)事物在任何時(shí)候只寫入回退段 一個(gè)區(qū)中。多個(gè)活動(dòng)的事務(wù)可以并行地寫入單個(gè)回退段甚至是 同一個(gè)回退段的區(qū)中。但是回退段中的每個(gè)數(shù)據(jù)塊,只為單個(gè) 事物處理保存數(shù)據(jù)。,回退段(rollback Segment),回退段管理 OEM(oracle enterprise manager)來管理 rollback segment SQL 命令來管理 創(chuàng)建回退段: create rollback segment name tablespace ts_name storage( initial number k or M next number k or M optimal number k or M minextent number maxextent number);,回退段(rollback Segment),查詢系統(tǒng)中已有的回退段數(shù) 通過系統(tǒng)的參數(shù)文件來查看系統(tǒng)中可用的rollback segment 個(gè)數(shù)。 initsid.ora 文件 (私有的) connect sys/manager desc dba_rollback_segs select segment_name from dba_rollback_segs; /*查詢系統(tǒng)中使用的回退段數(shù)*/ 查詢回退段請(qǐng)求數(shù) select sum(value) data requests from v$sysstat where name in ( do block gets,consistent gets);,Oracle數(shù)據(jù)庫結(jié)構(gòu),表空間及數(shù)據(jù)文件 邏輯上Oracle將數(shù)據(jù)存儲(chǔ)于表空間中,物理上存儲(chǔ)于相應(yīng)表空間關(guān) 聯(lián)的數(shù)據(jù)文件上。 Oracle是由一個(gè)或多個(gè)表空間組成。 每個(gè)表空間由一個(gè)或多個(gè)數(shù)據(jù)文件組成。 數(shù)據(jù)庫的全部數(shù)據(jù)存儲(chǔ)于數(shù)據(jù)文件中,這些數(shù)據(jù)文件組成了數(shù)據(jù)庫中的每個(gè)表空間。,表空間,系統(tǒng)表空間(system) 每個(gè)數(shù)據(jù)庫都包含一個(gè)system表空間。它是在數(shù)據(jù)庫創(chuàng)建時(shí),由Oracle自動(dòng)創(chuàng)建的。 system表空間始終包含整個(gè)數(shù)據(jù)庫的數(shù)據(jù)字典。 臨時(shí)段表空間(Temporary Tablespace) 臨時(shí)段所屬的表空間 索引表空間(Index Tablespace) 索引段所屬的表空間 回退段表空間(Rollback Tablespace) 回退段所屬的表空間,創(chuàng)建表空間,OEM(Oracle Enterprise Manager) Oracle提供圖形界面的管理工具來創(chuàng)建、管理表空間。 SQL 命令 創(chuàng)建tablespace Create tablespace test_ts Datafile file_name size 10M default Storage ( initial 50k next 50k pctincrease 0 minextents 2); 修改tablespace Alter tablespace test_ts add datafile file_name size 10M; 刪除tablespace drop tablespace;,表空間查詢,通過執(zhí)行下面的語句來查詢?cè)摂?shù)據(jù)庫系統(tǒng)中所包含的表空間及狀態(tài) Connect sys/manager; desc dba_tablespaces select * from dba_tablespaces; /* 查詢表空間當(dāng)前狀態(tài)及存儲(chǔ)參數(shù) */ select tablespace_name,sum(bytes) from dba_free_space group by tablespace_name; /* 查詢表空間的剩余狀態(tài) */,數(shù)據(jù)文件,在一個(gè)完整的數(shù)據(jù)庫的環(huán)境中,需要下列文件: 數(shù)據(jù)文件 每個(gè)數(shù)據(jù)文件只能于一個(gè)表空間和一個(gè)數(shù)據(jù)庫關(guān)聯(lián)。 在數(shù)據(jù)文件被首次創(chuàng)建時(shí),分配的磁盤空間被格式化。 使用數(shù)據(jù)字典,查詢數(shù)據(jù)庫對(duì)應(yīng)的數(shù)據(jù)文件。 connect sys/manager; desc dba_data_files; select * from dba_data_files;,重做日志文件(redolog file),數(shù)據(jù)的每一種改變,都記錄到重做日志文件中。當(dāng) 事故發(fā)生時(shí),使用重做日志文件恢復(fù)所有的事物。 在數(shù)據(jù)庫創(chuàng)建時(shí),只定三個(gè)缺省的redolog file. redolog1,redolog2,redolog3 在數(shù)據(jù)庫處于非歸檔方式下,redolog file是循環(huán)使用的。 在處于歸檔方式下的數(shù)據(jù)庫,所有的redolog信息被保留。 查看系統(tǒng)的redolog file的狀態(tài) connect sys/manager; desc v$logfile; select * from v$logfile;,控制文件(control file),控制文件用于保存數(shù)據(jù)庫管理系統(tǒng)操作的重要信息。它是在數(shù)據(jù) 實(shí)例(instance)啟動(dòng)時(shí),確定數(shù)據(jù)文件和重做日志文件在系統(tǒng)中 的位置。 控制文件的丟會(huì)給數(shù)據(jù)庫的系統(tǒng)管理帶來災(zāi)難性的后果. 建議將控制文件存儲(chǔ)于多個(gè)磁盤卷。也可以在數(shù)據(jù)庫創(chuàng)建后,建 立一個(gè)備份的控制文件。 alter database backup controlfile to trace; 在系統(tǒng)的trace目錄找到控制文件的創(chuàng)建模板。 查詢control file 位置 connect sys/manager desc v$controlfile; select * from v$controlfile;,參數(shù)文件 (initsid.ora),參數(shù)文件在數(shù)據(jù)庫的位置: $ORACLE_HOME/dbs/init(sid).ora if sid=ora805 then 參數(shù)文件名為: initora805.ora 它定義在系統(tǒng)啟動(dòng)時(shí)所定義的信息.定義例程運(yùn)行環(huán)境.通過 對(duì)參數(shù)文件的調(diào)整可以優(yōu)化系統(tǒng)性能. 查詢系統(tǒng)運(yùn)行的參數(shù)值 svrmgrl svrmgrconnect internal; svrmgrshow parameters; svrmgrshow parameter db,定義:在數(shù)據(jù)庫啟動(dòng)例程時(shí),所必須讀取的包含數(shù)據(jù)庫例程和配置參數(shù)列表的文本文件。,參數(shù)文件 (initsid.ora),初始化參數(shù)內(nèi)容: 啟動(dòng)例程的數(shù)據(jù)庫名 SGA在內(nèi)存結(jié)構(gòu)中占有多少內(nèi)存 如何處理裝滿的聯(lián)機(jī)重做日志文件 數(shù)據(jù)庫控制文件的名稱及位置 數(shù)據(jù)庫私有rollback段的名稱及個(gè)數(shù) 見系統(tǒng)參數(shù)文件:E:pora804databaseinitorcl.ora,Oracle數(shù)據(jù)庫結(jié)構(gòu),數(shù)據(jù)字典 數(shù)據(jù)字典是Oracle數(shù)據(jù)庫的重要組成。它由一組只讀表組成。 包括: 數(shù)據(jù)庫所有對(duì)象的定義(表,視圖,索引,簇,同義詞,序列 ,過程,函數(shù),程序包,觸發(fā)器) 空間的分配和使用狀況 列的缺省值 完整性約束信息 用戶名 已授予用戶的角色和權(quán)限 審計(jì)信息等,數(shù)據(jù)字典,數(shù)據(jù)字典結(jié)構(gòu) 基表 存放相關(guān)數(shù)據(jù)庫信息的基礎(chǔ)表 視圖 匯總并顯示存放數(shù)據(jù)字典基表中信息的視圖,數(shù)據(jù)字典,數(shù)據(jù)字典所有者 Oracle的sys用戶擁有數(shù)據(jù)字典所有的基表和視圖。任何Oracle用戶都不能改變數(shù)據(jù)字典的任何數(shù)據(jù)。不能更新、插入、 刪除。數(shù)據(jù)字典的改變會(huì)影響數(shù)據(jù)庫的正常運(yùn)行。 系統(tǒng)管理員需要嚴(yán)格管理系統(tǒng)用戶.(sys and system),數(shù)據(jù)字典,常用的數(shù)據(jù)字典 前綴 范圍 USER 用戶視圖 ALL 用戶可訪問的部分 DBA 數(shù)據(jù)庫管理員視圖,常用的數(shù)據(jù)字典,dba_tablespaces dba_data_files dba_tables dba_users dba_views dba_indexes dba_db_links dba_free_space,dba_ind_columns dba_jobs dba_objects dba_rollback_segs dba_segments dba_sequences dba_snappshots dba_synonyms dba_tab_columns dba_triggers dba_constraints dba_cons_columns,Oracle數(shù)據(jù)庫實(shí)例,Oracle數(shù)據(jù)庫實(shí)例,數(shù)據(jù)庫和實(shí)例 每個(gè)Oracle數(shù)據(jù)庫的運(yùn)行都于Oracle的例程(Instance)相關(guān)。 數(shù)據(jù)庫在服務(wù)器上啟動(dòng)時(shí),Oracle分配一個(gè)SGA(system global area)的內(nèi)存區(qū)。 例程是由(SGA和后臺(tái)進(jìn)程組成),是Oracle數(shù)據(jù)庫的運(yùn)行 環(huán)境 在通常情況下,數(shù)據(jù)庫與例程是一對(duì)一的,但是在Oracle Parallel Server的環(huán)境下,允許多個(gè)例程裝載相同的數(shù)據(jù)庫。,數(shù)據(jù)庫的啟動(dòng)和關(guān)閉,數(shù)據(jù)庫的啟動(dòng)于關(guān)閉必須使用管理員權(quán)限. 在數(shù)據(jù)庫安裝后,建立了一個(gè)叫做internal的操作系統(tǒng)用戶,其口令是由數(shù)據(jù)庫的口令文件來認(rèn)證的。它負(fù)責(zé)數(shù)據(jù)庫的啟動(dòng)與關(guān)閉。 數(shù)據(jù)庫的啟動(dòng)分為三個(gè)步驟: 啟動(dòng)例程 裝載數(shù)據(jù)庫 打開數(shù)據(jù)庫,數(shù)據(jù)庫的啟動(dòng)和關(guān)閉,數(shù)據(jù)庫正常啟動(dòng)過程: svrmgrl (啟動(dòng)server manager) svrmgrl connect internal; svrmgrlstartup /*啟動(dòng)數(shù)據(jù)庫*/ svrmgrlshutdown /*關(guān)閉數(shù)據(jù)庫 */ Svrmgrl 它是數(shù)據(jù)庫的管理工具,關(guān)于它的具體的使用,見 svrmgrl help,數(shù)據(jù)庫的啟動(dòng)和關(guān)閉,在數(shù)據(jù)庫關(guān)閉時(shí)應(yīng)注意: 若有數(shù)據(jù)庫的客戶端沒有退出數(shù)據(jù)庫連接,在使用正常的數(shù)據(jù)庫關(guān)閉的方式,無法關(guān)閉,數(shù)據(jù)庫關(guān)閉處于等待狀態(tài)。 使用下面的方式關(guān)閉數(shù)據(jù)庫: svrmgrl shutdown; svrmgrl shutdown immediate; /* 斷開數(shù)據(jù)庫連接,關(guān)閉數(shù)據(jù)庫*/ svrmgrl shutdown abort; /*在某些特殊情況下,使用這種關(guān)閉數(shù)據(jù)庫方式。它將立即結(jié)束當(dāng)前的sql語句,不回退未提交的事物,數(shù)據(jù)完整性沒有保護(hù)。在下次啟動(dòng)時(shí),數(shù)據(jù)庫將自動(dòng)進(jìn)行恢復(fù),用戶最好不使用這種方法。*/,Oracle數(shù)據(jù)庫實(shí)例,內(nèi)存結(jié)構(gòu) SGA(系統(tǒng)全局區(qū)) 它是一組共享內(nèi)存結(jié)構(gòu),由Instance 數(shù)據(jù)和控制信息組成。 包含下面的結(jié)構(gòu): 數(shù)據(jù)庫緩沖區(qū)高速緩存 (db_block_buffer) 重做日志緩沖區(qū) (log_buffer) 共享池(shared_pool_size) 數(shù)據(jù)字典高速緩存 其他 PGA(程序全局區(qū)) 是內(nèi)存中的區(qū)域,包含單個(gè)進(jìn)程的數(shù)據(jù)和控制信息。每個(gè)服務(wù)器進(jìn)程分配一個(gè)PGA,PGA由每個(gè)服務(wù)器進(jìn)程獨(dú)占。當(dāng)用戶連接入Oracle數(shù)據(jù)庫并建立會(huì)話時(shí),Oracle分配PGA。,Oracle數(shù)據(jù)庫實(shí)例,進(jìn)程結(jié)構(gòu) 在Oracle數(shù)據(jù)庫中,有兩類進(jìn)程: 服務(wù)器進(jìn)程 Oracle通過服務(wù)器進(jìn)程來處理與例程連接的用戶請(qǐng)求。 后臺(tái)進(jìn)程 為了將性能提到最高限度以及容納更多的用戶,多進(jìn)程的Oracle系統(tǒng)使用了一些另外的進(jìn)程(后臺(tái)進(jìn)程) Oracle 中的后臺(tái)進(jìn)程包括: DBW0 數(shù)據(jù)庫寫入進(jìn)程,將緩沖區(qū)的內(nèi)容寫入數(shù)據(jù)文件。 LGWR 將重做日志緩沖區(qū)的內(nèi)容寫入磁盤的重做日志文件,Oracle數(shù)據(jù)庫實(shí)例,進(jìn)程結(jié)構(gòu) Cont 后臺(tái)進(jìn)程 SMON 系統(tǒng)監(jiān)控進(jìn)程,在例程啟動(dòng)時(shí),負(fù)責(zé)實(shí)現(xiàn)系統(tǒng)的崩潰恢復(fù)。 PMON 用戶進(jìn)程失敗時(shí),進(jìn)程監(jiān)控程序?qū)崿F(xiàn)進(jìn)程恢復(fù)。 RECO 它是解決與分布式事物相關(guān)的故障。只有例程允許分布式事物處理并且 Distributed_transactions 0時(shí),RECO進(jìn)程才會(huì) 出現(xiàn)。 CKPT 檢查點(diǎn)進(jìn)程,Oracle數(shù)據(jù)庫實(shí)例,進(jìn)程結(jié)構(gòu) Cont 后臺(tái)進(jìn)程 ARCn 歸檔程序進(jìn)程。當(dāng)數(shù)據(jù)庫設(shè)于歸擋方式時(shí),當(dāng)重做日志文件已滿或出現(xiàn) alter system switch logfile命令進(jìn)行日志切換時(shí),Oracle的 ARCn進(jìn)程將重做日志文件中的內(nèi)容拷貝到指定的存儲(chǔ)設(shè)備上。 Dnnn 調(diào)度程序進(jìn)程 (在多線索結(jié)構(gòu)中使用) Snnn 共享服務(wù)器進(jìn)程(在多線索結(jié)構(gòu)中使用),Oracle數(shù)據(jù)庫訪問,Oracle數(shù)據(jù)庫訪問,Oracle SQL,SQL*Plus and PL*SQL SQL是結(jié)構(gòu)化的查詢語言 Oracle的SQL語言包含對(duì)ANSI/ISO標(biāo)準(zhǔn)SQL語言的擴(kuò)充。 Oracle的SQL語言分為以下幾類: DML(數(shù)據(jù)操縱語言) DDL(數(shù)據(jù)定義語言) 事物處理的控制語言 會(huì)話控制語句 系統(tǒng)控制語句 SQL*PLUS 是Oracle的一個(gè)使用程序,它可以運(yùn)行于客戶端,也可以運(yùn)行 服務(wù)器端,通過它能夠查看數(shù)據(jù)字典的信息,以及查看用戶數(shù)據(jù)和結(jié)構(gòu)等,運(yùn)行程序。,Oracle數(shù)據(jù)庫訪問,PL*SQL 是Oracle的一種過程化的語言。他有自己的程序結(jié)構(gòu), 有各種條件控制和循環(huán)控制。通過語言,能夠?qū)憯?shù)據(jù)庫的存儲(chǔ)過程和包。甚至通過PL*SQL語言還可以開發(fā)基于Web的應(yīng)用。,SQL,DML Select (從一個(gè)或多個(gè)表或視圖中檢索數(shù)據(jù)) select empno,ename,sal,deptno from emp where deptno=10; 復(fù)雜的select 語句: group by 子句 select deptno,min(sal),max(sal) from emp group by deptno; having 子句 select deptno,min(sal),max(sal) from emp where job=CLERK group by deptno having min(sal)1000;,SQL,DML select cont Order by select ename ,deptno,sal from emp order by deptno ASC,sal DESC; for upfate select empno,sal,comm from emp,dept where job=CLERK and emp.deptno=dept.deptno and loc=NEW YORKfor update; select empno,sal,comm from emp,dept where job=CLERK and emp.deptno=dept.deptno and loc=NEW YORK for update of emp.sal; join select empno,ename,dname from emp,dept where emp.deptno=dept.deptno;,SQL,DML update(改變表與視圖現(xiàn)有行與列的值) update emp set sal=1000 where empno=7369; Insert (向表與視圖中增加新行) insert into emp values(8888,abc,clerk,0000,sysdate,2000,0,10); delete (從表與視圖中刪除行) delete from emp where deptno=10;,常用的sql函數(shù),number function abs(n) mod(m,n) power(m,n) round(m,n) sign(n) sort(n) 開平方 trunc(n,m),常用的sql函數(shù),character function CONCAT(char1, char2) / *返回char1與char2的連接 */ INITCAP(char) /* 返回第一個(gè)字母大寫的string */ LPAD(char1,n ,char2) LTRIM(char ,set) LOWER REPLACE(char,search_string,replacement_string) SUBSTR(char, m ,n) INSTR (char1,char2 ,n,m) UPPER(char) LENGTH(char) .,常用的sql函數(shù),Date function ADD_MONTHS(d,n) LAST_DAY(d) MONTHS_BETWEEN(d1, d2) NEXT_DAY(d, char) SYSDATE .,常用的sql函數(shù),Conversion Functions TO_CHAR(d ,format) TO_CHAR(n ,format) TO_NUMBER TO_DATE 其它函數(shù) NVL(expr1, expr2) USER .,SQL*Plus,SQLPlus 是Oracle 的一個(gè)實(shí)用程序. sql*plus的使用: 數(shù)據(jù)庫創(chuàng)建后,將安裝scott/tiger的demo用戶。 sqlplus scott/tiger sql /* sql*plus的命令行狀態(tài) */ sql set pause on spool filename spool off,PL*SQL,Pl*SQL是Oracle對(duì)SQL的過程化的擴(kuò)充。Pl*SQL能使用戶將SQL語句和過程化的結(jié)構(gòu)結(jié)合起來。 PL*SQL的程序單元分為 匿名塊 結(jié)構(gòu): Declare /*變量 定義 */ Begin /* 程序體 */ Exception /* 異常處理 */ End;,Pl*SQL匿名塊 (舉例),DECLARE acct_balance NUMBER(11,2); acct CONSTANT NUMBER(4) := 3; debit_amt CONSTANT NUMBER(5,2) := 500.00; BEGIN SELECT bal INTO acct_balance FROM accounts WHERE account_id = acct FOR UPDATE OF bal; IF acct_balance = debit_amt THEN UPDATE accounts SET bal = bal - debit_amt WHERE account_id = acct; ELSE INSERT INTO temp VALUES (acct, acct_balance, 捍nsufficient funds?; - insert account, current balance, and message END IF; COMMIT; END;,PL*SQL,存儲(chǔ)過程 procedure,package and function procedure and function 結(jié)構(gòu),PROCEDURE name (parameter, parameter, .) IS local declarations /*變量定義*/ BEGIN executable statements /*過程體*/ EXCEPTION exception handlers /*異常處理*/ END name; FUNCTION name (parameter, parameter, .) RETURN datatype IS local declarations /*變量定義*/ BEGIN executable statements?/*過程體*/ EXCEPTION exception handlers /*異常處理*/ END name;,Pl*SQL過程 (舉例),PROCEDURE raise_salary (emp_id INTEGER, increase REAL) IS current_salary REAL; salary_missing EXCEPTION; BEGIN SELECT sal INTO current_salary FROM emp WHERE empno = emp_id; IF current_salary IS NULL THEN RAISE salary_missing; ELSE UPDATE emp SET sal = sal + increase WHERE empno = emp_id; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO emp_audit VALUES (emp_id, No such number); WHEN salary_missing THEN INSERT INTO emp_audit VALUES (emp_id, Salary is null); END raise_salary;,Pl*SQL函數(shù) (舉例),FUNCTION sal_ok (salary REAL, title REAL) RETURN BOOLEAN IS min_sal REAL; max_sal REAL; BEGIN SELECT losal, hisal INTO min_sal, max_sal FROM sals WHERE job = title; RETURN (salary = min_sal) AND (salary = max_sal); END sal_ok;,Pl*SQL,包結(jié)構(gòu):,CREATE PACKAGE name AS - specification (visible part) - public type and item declarations - subprogram specifications END name; CREATE PACKAGE BODY name AS - body (hidden part) - private type and item declarations - subprogram bodies BEGIN - initialization statements END name;,Pl*SQL 包定義(舉例),CREATE PACKAGE emp_actions AS - specification TYPE EmpRecTyp IS RECORD (emp_id INTEGER, salary REAL); CURSOR desc_salary RETURN EmpRecTyp; PROCEDURE hire_employee ( ename VARCHAR2, job VARCHAR2, mgr NUMBER, sal NUMBER, comm NUMBER, deptno NUMBER); PROCEDURE fire_employee (emp_id NUMBER); END emp_actions;,Pl*SQL包體 (舉例),CREATE PACKAGE BODY emp_actions AS - body CURSOR desc_salary RETURN EmpRecTyp IS SELECT empno, sal FROM emp ORDER BY sal DESC; PROCEDURE hire_employee ( ename VARCHAR2, job VARCHAR2, mgr NUMBER, sal NUMBER, comm NUMBER, deptno NUMBER) IS BEGIN INSERT INTO emp VALUES (empno_seq.NEXTVAL, ename, job, mgr, SYSDATE, sal, comm, deptno); END hire_employee; PROCEDURE fire_employee (emp_id NUMBER) IS BEGIN DELETE FROM emp WHERE empno = emp_id; END fire_employee; END emp_actions;,Oracle分布式處理及分布式數(shù)據(jù)庫,分布式處理,Oracle C/S Architechture 在Oracle數(shù)據(jù)庫的環(huán)境中,數(shù)據(jù)庫應(yīng)用程序與數(shù)據(jù)庫分為兩個(gè)部分。前端成為客戶機(jī)部分,后端成為服務(wù)器部分。此即客戶機(jī)服務(wù)器體系結(jié)構(gòu)。 在Oracle客戶機(jī)服務(wù)器的體系結(jié)構(gòu)中,Oracle 需要sql*net(net8) 來保障客戶機(jī)與服務(wù)器間的通信。,分布式處理,Net8(sql*net) Net8是oracle的網(wǎng)絡(luò)接口。它允許在客戶機(jī)服務(wù)器上運(yùn)行。 在分布式的環(huán)境中,Oracle的應(yīng)用程序需要運(yùn)行在Net8之上 Net8分為client端和server端兩部分。在server端需要運(yùn)行監(jiān)聽程序保障client 端的請(qǐng)求。 Server端的監(jiān)聽程序?yàn)椋?$ORACLE_HOME/network/admin/listener.ora 啟動(dòng)net8 server: lsnrctl start 查看net8 server的狀態(tài): lsnrctl status 停止net8 Server: lsnrctl stop,分布式處理,Net8(sql*net) Net8 client 目錄: $ORACLE_HOME/net8/admin/tnsnames.ora 測(cè)試net8 client是否連通: tnsping alisename; sqlplus scott/tigeralisename;,Net8 client配置文件,AliseName.world = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (Host = hostname) (Port = 1521) ) ) (CONNECT_DATA = (SID = orasid) ) ),分布式數(shù)據(jù)庫,Oracle分布式數(shù)據(jù)庫體系結(jié)構(gòu) 分布式數(shù)據(jù)庫是指存儲(chǔ)在多臺(tái)計(jì)算機(jī)上的數(shù)據(jù)庫的集合,一般以單個(gè)數(shù)據(jù)庫的形式出現(xiàn)在應(yīng)用程序面前。應(yīng)用程序可以同時(shí)訪問并修改網(wǎng)絡(luò)上若干數(shù)據(jù)庫的數(shù)據(jù)。 數(shù)據(jù)庫與數(shù)據(jù)庫鏈接 分布式數(shù)據(jù)庫中的每個(gè)數(shù)據(jù)庫都與系統(tǒng)中的其他數(shù)據(jù)庫有所不同。擁有自己的全局?jǐn)?shù)據(jù)庫名。 在分布式數(shù)據(jù)庫系統(tǒng)為了簡(jiǎn)化程序的請(qǐng)求。Oracle使用了數(shù)據(jù)庫鏈接的技術(shù)。數(shù)據(jù)庫鏈接定義了從一個(gè)Oracle數(shù)據(jù)庫到另外一個(gè)數(shù)據(jù)庫單向通訊的路徑。,數(shù)據(jù)庫鏈接,database link 它是本地?cái)?shù)據(jù)庫和網(wǎng)上另一數(shù)據(jù)庫之間的鏈接。通過這個(gè)鏈接,使本地?cái)?shù)據(jù)庫用戶訪問遠(yuǎn)端數(shù)據(jù)庫的任務(wù)變得簡(jiǎn)單。對(duì)于本地?cái)?shù)據(jù)庫用戶對(duì)遠(yuǎn)端數(shù)據(jù)庫的訪問是透明的。 創(chuàng)建database link create database link dblink_name connect to username identified by password using connect string ; 其中username與password是需要訪問的遠(yuǎn)端數(shù)據(jù)庫的用戶和口令 connect string是本地訪問員端數(shù)據(jù)庫的sql*net連接。,數(shù)據(jù)庫鏈接(舉例),CREATE DATABASE LINK CONNECT TO scott IDENTIFIED BY tiger USING sale;,創(chuàng)建數(shù)據(jù)庫鏈接:,使用數(shù)據(jù)庫鏈接:,SELECT * FROM ,INSERT INTO (acc_no, acc_name, balance) VALUES (5001, BOWER? 2000);,UPDATE SET balance = balance + 500; DELETE FROM WHERE acc_name = BOWER,Oracle 數(shù)據(jù)庫的備份與恢復(fù),備份方式,物理備份 就是Oracle的數(shù)據(jù)文件通過操作系統(tǒng)的工具進(jìn)行的 備份。 熱備份 數(shù)據(jù)庫啟動(dòng)并以歸檔方式 online offline 冷備份 數(shù)據(jù)庫關(guān)閉 歸檔方式 非歸檔方式 邏輯備份 通過Oracle的實(shí)用程序進(jìn)行的備份 exp & imp,物理備份,確認(rèn)需要備份的文件的位置 數(shù)據(jù)文件 以O(shè)racle用戶的身份進(jìn)入操作系統(tǒng) sqlplus sys/manager select name,status from v$datafile; NAME STATUS - /u02/oradata/test/systest.dbf SYSTEM /u03/oradata/test/rbstest.dbf ONLINE /u03/oradata/test/temptest.dbf ONLINE /u04/oradata/test/usrtest.dbf ONLINE /u04/oradata/test/tooltest.dbf ONLINE,物理備份,確認(rèn)需要備份的文件的位置 日志文件 以O(shè)racle用戶的身份進(jìn)入操作系統(tǒng) sqlplus sys/manager select member from v$logfile; MEMBER - /u01/oradata/test/log1test.dbf /u01/oradata/test/log2test.dbf /u01/oradata/test/log3test.dbf,物理備份,確認(rèn)需要備份的文件的位置 控制文件 以O(shè)racle用戶的身份進(jìn)入OS。 $svrmgrl svrmgrconnect internal; connected svrmgrshow parameter control_file; NAME TYPE VALUE - control_files string /u01/oradata/test/ctrl1test.ctl svrmgr 通常情況下,系統(tǒng)會(huì)有三個(gè)控制文件。,物理備份,確認(rèn)需要備份的文件的位置 歸檔文件 以O(shè)racle的身份進(jìn)入操作系統(tǒng)。鍵入如下命令: $svrmgrl svrmgrconnect internal; connected. svrmgrshow parameter archive; NAME TYPE VALUE - log_archive_des string ?/dba/arch log_archive_format string %t_%s.dbf svrmgr,物理備份,確認(rèn)需要備份的文件的位置 參數(shù)文件 以oracle用戶的身份進(jìn)入操作系統(tǒng),并且知道oracle數(shù)據(jù)庫的sid. 假設(shè)sid為ora805 $cd $ORACLE_HOME/dbs $ls init*.ora init.ora initora805.ora (其中initora805.ora 是系統(tǒng)的參數(shù)文件) 或者通過下列的命令查詢instance 的sid: sqlplus sys/manager; sqlselect instance from v$tread; INSTANCE - test /* test為oracle的sid */,熱備份(物理備份),定義 在數(shù)據(jù)庫啟動(dòng)的情況下進(jìn)行的備份。對(duì)數(shù)據(jù)庫所有的物理文件進(jìn)行拷貝時(shí),Oracle用戶仍然處于不間斷運(yùn)行的環(huán)境中。 熱備份可以兩種: online與offline的唯一區(qū)別是:數(shù)據(jù)庫的tablespace 是否在線。 online 需要備份的tablespace是在線的。 offline 需要備份的tablespace是離線的。,數(shù)據(jù)庫熱備份的步驟,1. 以archive log 方式啟動(dòng)數(shù)據(jù)庫 在正常數(shù)據(jù)shutdown。修改參數(shù)文件: init.ora 增加下面兩行: log_archive_start=true log_archive_dest=$ORACLE_HOME/dbs/arch 重新啟動(dòng)數(shù)據(jù)庫,這時(shí)數(shù)據(jù)庫將以archive log 方式運(yùn)行. $svrmgrl svrmgrconnect internal; svrmgrstartup mount; svrmgralter database archivelog; svrmgrarchive log start; svrmgralter database open;,數(shù)據(jù)庫熱備份的步驟,2. 備份數(shù)據(jù)庫 在線的tablespace的備份 執(zhí)行 svrmgrl svrmgrconnect internal; svrmgralter tablespace tablespace_name begin backup; svrmgr執(zhí)行系統(tǒng)的備份文件命令 cp svrmgralter tablespace tablespace_name end backup; 下線的tablespace的備份 svrmgralter tablespace tablespace_name offline normal; svrmgr執(zhí)行操作系統(tǒng)備份的命令 svrmgralter tablespace tablespace_name online;,數(shù)據(jù)庫熱備份的步驟,2. 備份數(shù)據(jù)庫 備份控制文件 svrmgrconnect internal; svrmgralter database backup controlfile to filenamereues; 備份控制文件trace svrmgrconnect internal; svrmgralter database backup controlfile to trace; 在系統(tǒng)發(fā)生故障時(shí)的恢復(fù)工作,需要根據(jù)不同的故障情況,在oracle工程師的指導(dǎo)下實(shí)現(xiàn)恢復(fù)的工作。,數(shù)據(jù)庫熱備份的注意事項(xiàng),在執(zhí)行熱備份的方式下,數(shù)據(jù)庫不能運(yùn)行于noarchive log方式。 查詢數(shù)據(jù)庫的運(yùn)行模式: svrmgrconnect internal; svrmgrarchive log list; Database log Mode Archive Mode sqlconnect sys/manager sqlselect log_mode from v$database; LOG_MODE - ARCHIVELOG,數(shù)據(jù)庫熱備份的注意事項(xiàng),在數(shù)據(jù)庫中,system表空間不能offline,所以,只能使 用online的熱備份方式。 對(duì)于一個(gè)tablespace中所有的數(shù)據(jù)文件均需要進(jìn)行備份,否則整個(gè)tablespace 是無效

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論