Oracle基本管理_第1頁
Oracle基本管理_第2頁
Oracle基本管理_第3頁
Oracle基本管理_第4頁
Oracle基本管理_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Oracle基本管理1. ORACLE數(shù)據(jù)庫啟動(dòng)與關(guān)閉1.1 打開和關(guān)閉數(shù)據(jù)庫 (手工)1.1.1 sqlplus連接 #su - oracle#sqlplus /nolog1.1.2 打開數(shù)據(jù)庫sql> connect sys/oracle as sysdba; sql> startup nomount|mount等待十幾秒左右,當(dāng)看到 oracle instances started, database mounted, database opened的時(shí)候,oracle數(shù)據(jù)庫打開成功 備注:打開數(shù)據(jù)庫startup可帶三個(gè)參數(shù),分別是 SQL > startup nom

2、ount 僅啟動(dòng)instances SQL > startup mount 啟動(dòng)instances,連上(mount)數(shù)據(jù)庫 SQL > startup normal 啟動(dòng)instances,連上(mount)數(shù)據(jù)庫(推薦)打開(open)數(shù)據(jù)庫 startup缺省參數(shù)是normal 1.1.3 啟動(dòng)oracle listener #su - oracle#lsnrctl start如果出錯(cuò)檢查環(huán)境變量是否設(shè)好,及l(fā)snrctl文件的內(nèi)容和執(zhí)行屬性。 1.1.4 關(guān)閉oracle listener #su - oracle#lsnrctl stop1.1.5 關(guān)閉數(shù)據(jù)庫 sql&g

3、t; connect sys/oracle as sysdba; sql> shutdown 關(guān)閉數(shù)據(jù)庫(推薦)等待幾秒左右,當(dāng)看到 database closed database dismounted oracle instances shut down的時(shí)候,oracle數(shù)據(jù)庫關(guān)閉成功 備注:關(guān)閉數(shù)據(jù)庫shutdown可帶三個(gè)參數(shù),分別是 SQL > shutdown abort 非正常立刻關(guān)機(jī)。等于忽然停電 SQL > shutdown immediate 做回滾*作,立刻關(guān)機(jī)。 SQL > shutdown normal 正常關(guān)機(jī) (推薦)shutdown缺省

4、參數(shù)是normal 2. 數(shù)據(jù)庫備份2.1 冷備份關(guān)閉數(shù)據(jù)庫時(shí)作的備份稱為冷備份。關(guān)閉數(shù)據(jù)庫,將所有和本實(shí)例有關(guān)的文件,包括dataed redolog,initora.ora等全部備份。恢復(fù)時(shí)只要將這些文件放回從前的目錄,startup數(shù)據(jù)庫即可。數(shù)據(jù)庫處于歸檔非歸檔狀態(tài)均可。2.2 用exp、imp命令做邏輯備份 EXP: 有三種主要的方式(完全、用戶、表) 1、完全: exp system/manager buffer=64000 full=y如果要執(zhí)行完全導(dǎo)出,必須具有角色EXP_FULL_DATABASE 。 2、用戶模式: exp system/manager buffer=640

5、00 owner=bill這樣用戶bill的所有對(duì)象被輸出到文件中。 3、表模式: exp system/manager buffer=64000 owner=bill tables=area這樣用戶bill的表area就被導(dǎo)出到文件中。需要注意的參數(shù)是Inctype,這個(gè)參數(shù)可以取一下三個(gè)值: Complete(全備份):把數(shù)據(jù)庫中所有數(shù)據(jù)對(duì)象導(dǎo)出到dump文件中,只有具有Exp_full_database的用戶有使用這個(gè)參數(shù)的權(quán)限。 Incremental(增量備份):把數(shù)據(jù)庫中所有上次備份后修改的表備份出來。 Cumulative(累計(jì)備份):把數(shù)據(jù)庫中所有全備份或者累計(jì)備份以后修改的表

6、備份出來。IMP: 具有三種模式(完全、用戶、表) 1、完全: imp system/manager buffer=64000 full=y如果要執(zhí)行完全導(dǎo)入,必須具有角色I(xiàn)MP_FULL_DATABASE 。 2、用戶模式: imp system/manager buffer=64000 fromuser=bill touser=billbak 文件中用戶bill的所有對(duì)象被導(dǎo)入到用戶billbakK中。必須指定fromuser、touser參數(shù)。3、表模式: imp system/manager buffer=64000 fromuser=bill touser=billbak table

7、s=area文件中用戶bill的表area就被導(dǎo)入到用戶billbak中。 2.3 用tar命令做物理備份 1、#su - oracle 2、% tar cvf /dev/rmt0 . 把oracle 路徑下所有文件備份到磁帶機(jī)上 3、% tar xvf /dev/rmt0 把備份磁帶上所有文件恢復(fù)進(jìn)oracle 當(dāng)前路徑 4、% tar tvf /dev/rmt/0 查看磁帶上有些什么文件 2.4 備份控制文件控制文件是Oracle數(shù)據(jù)庫中非常重要的文件。它記錄著oracle數(shù)據(jù)庫的物理結(jié)構(gòu)信息,比如數(shù)據(jù)文件,日值文件的數(shù)量和位置等。在數(shù)據(jù)庫啟動(dòng)過程中,需要讀取控制文件。如果控制文件損壞或丟

8、失,數(shù)據(jù)庫就無法啟動(dòng)。因此,做好控制文件的備份十分重要。一般的數(shù)據(jù)庫配置都會(huì)有多個(gè)控制文件。這些控制文件是完全相同的,分別存放在不同的位置(最好在不同的磁盤上),他們之間互為備份。數(shù)據(jù)庫啟動(dòng)過程中,必須保證所有控制文件都是一致的,否則數(shù)據(jù)庫不能啟動(dòng)。在oracle數(shù)據(jù)庫的參數(shù)文件(initSid.ora)中指定控制文件的位置。如果部分控制文件損壞,可以在參數(shù)文件中去掉相應(yīng)的控制文件,即可啟動(dòng)數(shù)據(jù)庫。每次數(shù)據(jù)庫物理結(jié)構(gòu)發(fā)生改變時(shí),必須及時(shí)備份控制文件。 $sqlplus SQL>connect internal SQL>alter database backup control /t

9、est.ctl ;也可以把控制文件備份成腳本,在必要的時(shí)候重建控制文件 SQL>alter database backup control trace;2.5 聯(lián)機(jī)全備份+日志備份2.5.1 設(shè)置ORACLE數(shù)據(jù)庫有兩種運(yùn)行方式:一是歸檔方式(ARCHIVELOG),歸檔方式的目的是當(dāng)數(shù)據(jù)庫發(fā)生故障時(shí)最大限度恢復(fù)所有已提交的事物;二是不歸檔方式(NOARCHIVELOG),恢復(fù)數(shù)據(jù)庫到最近的回收點(diǎn)。這兩種方式將對(duì)備份方法產(chǎn)生較大的影響。1.改變不歸檔方式為為歸檔方式 2.關(guān)閉數(shù)據(jù)庫,備份已有的數(shù)據(jù) 3.改變數(shù)據(jù)庫的運(yùn)行方式是對(duì)數(shù)據(jù)庫的重要改動(dòng),所以要對(duì)數(shù)據(jù)庫做備份,對(duì)可能出現(xiàn)的問題作出保

10、護(hù)。 4.啟動(dòng)Instance ,Mount數(shù)據(jù)庫但不打開數(shù)據(jù)庫,來改變歸檔方式 #sqlplus sql>connect internal sql>startup mount sql>alter database archivelog;5.使能自動(dòng)存檔 在初始化文件init*.ora(一般放ORACLE根目錄的下層目錄dbs下)加參數(shù): log_archive_start=true6.指定存檔的重做登錄文件名和存放的位置 同樣是在初始化文件init*.ora中加入下面的參數(shù): log_archive_format=%S.arc log_archive_dest=/arch1

11、2/arch (arch12 是日志文件存放的目錄)7.關(guān)閉數(shù)據(jù)庫,重新啟動(dòng)數(shù)據(jù)庫,歸檔方式轉(zhuǎn)換完成。 8.可用archive log list查看狀態(tài),去除歸檔日志功能的命令為alter database noarchivelog。2.5.2 步驟聯(lián)機(jī)全備份:數(shù)據(jù)庫處于open狀態(tài),依次對(duì)各個(gè)表空間備份sqlplus "/ as sysdba"SQL>alter tablespace system begin backup;復(fù)制此tablespace各個(gè)datafileSQL>alter tablespace system end backup;注意:begi

12、n backup是對(duì)tablespace凍結(jié)寫入,end backup是解除凍結(jié),因此復(fù)制datafile的過程不宜過長(zhǎng)備份controlfileSQL>alter database backup control . ;日志備份:sqlplus "/ as sysdba"SQL>alter system archive log stop;移去日志目錄下的所有archived redologSQL>alter system archive log start;2.5.3 恢復(fù)數(shù)據(jù)庫處于shutdown狀態(tài) 磁盤全部損壞,僅保存上次聯(lián)機(jī)全備份和每

13、天日志備份這是最壞情況解決硬件故障,配置系統(tǒng)軟件及環(huán)境oracle用戶,將全備份和日志備份轉(zhuǎn)移至相應(yīng)目錄,根據(jù)initSid.ora中controlfile的配置,將備份控制文件復(fù)制到響應(yīng)目錄下sqlplus "/ as sysdba"SQL>startup mountSQL>recover database until cancel using backup controlfile;逐個(gè)確認(rèn)待恢復(fù)的archived redolog,待最后一個(gè)完成后,鍵入cancel,使恢復(fù)結(jié)束SQL>alter database open resetlogs;注意:由于

14、日志已經(jīng)重置,所以應(yīng)盡快做一次聯(lián)機(jī)全備份 丟失某數(shù)據(jù)文件只要將此文件從上次聯(lián)機(jī)全備份中復(fù)制至其目錄,并將自上次聯(lián)機(jī)全備份以來所有日志備份移至歸檔目錄sqlplus "/ as sysdba"SQL>startup mountSQL>alter database recover datafile path/file ;或者簡(jiǎn)單些recover database;SQL>alter database open; 文件損壞或丟失,又無備份,這種情況只能將此文件脫機(jī),將數(shù)據(jù)exp出來,重建表空間,再imp進(jìn)去sqlplus "

15、/ as sysdba"SQL>connect internalSQL>startup mountSQL>alter database datafile path/file offline;SQL>alter database open;2.5.4 注意要點(diǎn)無論有多少把握,恢復(fù)前先做冷備份,此為第一原則。不這樣做,便是無路可退,一旦失誤,后果十分嚴(yán)重。1.rollback段損壞這是非常嚴(yán)重的問題,可在initora.ora中寫入_corrupted_rollback_segments=(rxx),啟動(dòng)時(shí)避開損壞的rollback段,這只是權(quán)宜之計(jì)。如數(shù)據(jù)庫處于

16、archivelog,應(yīng)從上一次全備份起利用備份的日志進(jìn)行恢復(fù);如數(shù)據(jù)庫處于noarchivelog,應(yīng)盡快將全部數(shù)據(jù)export出來,重建數(shù)據(jù)庫,再import進(jìn)去。所有*作之前,應(yīng)做冷備份。2.數(shù)據(jù)庫異常中止處理通過手工shutdown abort*作中止數(shù)據(jù)庫,不會(huì)產(chǎn)生大的問題,通常直接startup無需使用介質(zhì)恢復(fù)命令如果由于機(jī)器崩潰引起的中止,則情況嚴(yán)重得多,有可能要使用到上面提到的恢復(fù)方法,不過這種現(xiàn)象并不多見。一般需要顯式使用介質(zhì)恢復(fù)命令,如下:sqlplus "/ as sysdba"SQL>startup mount;SQL>recover d

17、atabase;SQL>alter database open;3. 數(shù)據(jù)庫的擴(kuò)充 3.1 增加一個(gè)表空間 3.1.1 創(chuàng)建表空間命令示例: SQL>create tablespace application datafile /usr/oracle/dbs/application.dbf size 3M 針對(duì)具體情況增加回滾和臨時(shí)表空間 命令示例: SQL>create rollback segment rbs8 tablespace rbs storage(initial 1m next 4m)SQL>CREATE TABLESPACE TEMP DATAFILE

18、"/usr/oracle/dbs/temp.dbf " SIZE 32M REUSE AUTOEXTEND ON NEXT 640K MINIMUM EXTENT 64K DEFAULT STORAGE ( INITIAL 64K NEXT 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0) TEMPORARY;回滾和臨時(shí)表空間用完后,可刪除或使它offline SQL>drop tablespace rbs8; SQL>drop tablespaces billtemp; SQL>alter tabl

19、espace rbs offline; SQL>alter tablespace billtemp offline; 3.1.2 增加某個(gè)表空間的大小 當(dāng)一個(gè)表空間的大小不能滿足工作需要時(shí),應(yīng)該擴(kuò)充表空間。 舉例: SQL>alter tablespace system add datafile /usr/oracle/dbs/sys338.dbf size 3M; 3.2 增加oracle的用戶,并給用戶授權(quán) 3.2.1 增加oracle的用戶, 并給用戶授權(quán) 舉例: SQL>create user newuser identified by userpasswd defa

20、ult tablespace application temporary tablespace billtemp; SQL>grant connect to newuser; SQL>grant resource to newuser; SQL>grant update on emp to newuser; 3.2.2 增加oracle的角色 oracle的缺省角色有connect、resource、dba。它是一組可以分配給其它role 或用戶的權(quán)限總和,connect 有8個(gè)權(quán)限,resource 有5個(gè)權(quán)限,dba有77個(gè)權(quán)限。給一般連接用戶賦connect,給一般編程

21、人員賦connect加resource,只有數(shù)據(jù)庫管理員才有dba的權(quán)限。 創(chuàng)建一個(gè)角色 SQL>create role newrole identified by rolepasswd; 給角色賦權(quán)限 SQL>grant select on all table to newrolle; SQL>grant connect to newrole with admin option; 3.2.3 中斷用戶同oracle的連接 當(dāng)oracle數(shù)據(jù)庫要關(guān)機(jī)或某個(gè)用戶占有的大量的資源需要被釋放時(shí),dba 需中斷用戶同oracle的連接。 、SQL>select sid,seri

22、al#,username from v$session; 、SQL>alter system kill session interger1,interger2 ; interger1,interger2分別對(duì)應(yīng)于sid和serial# 3.3 表、視圖、索引、約束Oracle數(shù)據(jù)庫數(shù)據(jù)對(duì)象中最基本的是表和視圖,其他還有約束、序列、函數(shù)、存儲(chǔ)過程、包、觸發(fā)器等。對(duì)數(shù)據(jù)庫的*作可以基本歸結(jié)為對(duì)數(shù)據(jù)對(duì)象的*作。3.3.1 表和視圖Oracle中表是數(shù)據(jù)存儲(chǔ)的基本結(jié)構(gòu)。ORACLE8引入了分區(qū)表和對(duì)象表,ORACLE8i引入了臨時(shí)表,使表的功能更強(qiáng)大。視圖是一個(gè)或多個(gè)表中數(shù)據(jù)的邏輯表達(dá)式。本文我

23、們將討論怎樣創(chuàng)建和管理簡(jiǎn)單的表和視圖。 管理表.1 建立表表可以看作有行和列的電子數(shù)據(jù)表,表是關(guān)系數(shù)據(jù)庫中一種擁有數(shù)據(jù)的結(jié)構(gòu)。用CREATE TABLE語句建立表,在建立表的同時(shí),必須定義表名,列,以及列的數(shù)據(jù)類型和大小。例如: CREATE TABLE products( PROD_ID NUMBER(4),PROD_NAME VAECHAR2(20),STOCK_QTY NUMBER(5,3);這樣我們就建立了一個(gè)名為products的表, 關(guān)鍵詞CREATE TABLE后緊跟的表名,然后定義了三列,同時(shí)規(guī)定了列的數(shù)據(jù)類型和大小。在創(chuàng)建表的同時(shí)你可以規(guī)定表的完整

24、性約束,也可以規(guī)定列的完整性約束,在列上普通的約束是NOT NULL,關(guān)于約束的討論我們?cè)谝院筮M(jìn)行。在建立或更改表時(shí),可以給表一個(gè)缺省值。缺省值是在增加行時(shí),增加的數(shù)據(jù)行中某一項(xiàng)值為null時(shí),oracle即認(rèn)為該值為缺省值。下列數(shù)據(jù)字典視圖提供表和表的列的信息:. DBA_TABLES. DBA_ALL_TABLES. USER_TABLES. USER_ALL_TABLES. ALL_TABLES. ALL_ALL_TABLES. DBA_TAB_COLUMNS. USER_TAB_COLUMNS. ALL_TAB_COLUMNS.2 表的命名規(guī)則表名標(biāo)識(shí)一個(gè)表,所以應(yīng)盡可能

25、在表名中描述表,oracle中表名或列名最長(zhǎng)可以達(dá)30個(gè)字符串。表名應(yīng)該以字母開始,可以在表名中包含數(shù)字、下劃線、#、$等。.3 從其它表中建立表可以使用查詢從基于一個(gè)或多個(gè)表中建立表,表的列的數(shù)據(jù)類型和大小有查詢結(jié)果決定。建立這種形式的表的查詢可以選擇其他表中所有的列或者只選擇部分列。在CREATE TABLE語句中使用關(guān)鍵字AS,例如:SQL>CREATE TABLE emp AS SELECT * FROM employeeTABLE CREATEDSQL> CREATE TABLE Y AS SELECT * FROM X WHERE no=2需要注意的是如果

26、查詢涉及LONG數(shù)據(jù)類型,那么CREATE TABLE.AS SELECT.將不會(huì)工作。.4 更改表定義在建立表后,有時(shí)候我們可能需要修改表,比如更改列的定義,更改缺省值,增加新列,刪除列等等。ORACLE使用ALTER TABLE語句來更改表的定義.4.1 增加列語法:ALTER TABLE schema. table_name ADD column_definition例:ALTER TABLE orders ADD order_date DATE;對(duì)于已經(jīng)存在的數(shù)據(jù)行,新列的值將是NULL..4.2 更改列語法:ALTER TABLE schem

27、a. table_name MODIFY column_name new_attributes;例:ALTER TABLE orders MODITY (quantity number(10,3),status varchar2(15);這個(gè)例子中我們修改了表orders,將STATUS列的長(zhǎng)度增加到15,將QUANTITY列減小到10,3;修改列的規(guī)則如下:可以增加字符串?dāng)?shù)據(jù)類型的列的長(zhǎng)度,數(shù)字?jǐn)?shù)據(jù)類型列的精度。減少列的長(zhǎng)度時(shí),該列應(yīng)該不包含任何值,所有數(shù)據(jù)行都為NULL改變數(shù)據(jù)類型時(shí),該列的值必須是NULL.對(duì)于十進(jìn)制數(shù)字,可以增加或減少但不能降低他的精度。.4.3 刪除數(shù)據(jù)

28、列優(yōu)化ORACLE數(shù)據(jù)庫,唯一的方法是刪除列,重新建立數(shù)據(jù)庫。在ORACLE8i中有很多方法刪除列,你可以刪除未用數(shù)據(jù)列或者可以標(biāo)示該列為未用數(shù)據(jù)列然后刪除。刪除數(shù)據(jù)列的語法是:ALTER TABLE schema. table_name DROP COLUM column_names | (column_names)CASCADE CONSTRAINS要注意的是在刪除列時(shí)關(guān)于該列的索引和完整性約束也同時(shí)刪除。注意關(guān)鍵字CASCADE CONSTRAINS,如果刪除的列是多列約束的一部分,那么這個(gè)約束條件相對(duì)于其他列也同時(shí)刪除。如果用戶擔(dān)心在大型數(shù)據(jù)庫中刪除列要花太多時(shí)間,可以先將他們標(biāo)記為未

29、用數(shù)據(jù)列,標(biāo)記未用數(shù)據(jù)列的語法如下:ALTER TABLE schema. table_name SET UNUSED COLUM column_names | (column_names)CASCADE CONSTRAINS這個(gè)語句將一個(gè)或多個(gè)數(shù)據(jù)列標(biāo)記為未用數(shù)據(jù)列,但并不刪除數(shù)據(jù)列中的數(shù)據(jù),也不釋放占用的磁盤空間。但是,未用數(shù)據(jù)列在視圖和數(shù)據(jù)字典中并不顯示,并且該數(shù)據(jù)列的名稱將被刪除,新的數(shù)據(jù)列可以使用這個(gè)名稱。基于該數(shù)據(jù)列的索引、約束,統(tǒng)計(jì)等都將被刪除。刪除未用數(shù)據(jù)列的語句是:ALTER TABLE schema. table_name DROP UNUSED COLUM | COLUM

30、N CONTINUE.4.4 刪除表和更改表名刪除表非常簡(jiǎn)單,但它是一個(gè)不可逆轉(zhuǎn)的行為。語法:DROP TABLE schema. table_name CASCADE CONSTRAINTS刪除表后,表上的索引、觸發(fā)器、權(quán)限、完整性約束也同時(shí)刪除。ORACLE不能刪除視圖,或其他程序單元,但oracle將標(biāo)示他們無效。如果刪除的表涉及引用主鍵或唯一關(guān)鍵字的完整性約束時(shí),那么DROP TABLE語句就必須包含CASCADE CONSTRAINTS子串。更改表名RENAME命令用于給表和其他數(shù)據(jù)庫對(duì)象改名。ORACLE系統(tǒng)自動(dòng)將基于舊表的完整性約束、索引、權(quán)限轉(zhuǎn)移到新表中。ORAC

31、LE同時(shí)使所有基于舊表的數(shù)據(jù)庫對(duì)象,比如視圖、程序、函數(shù)等,為不合法。語法:RENAME old_name TO new_name;例:SQL> RENAME orders TO purchase_orders;.4.5 截短表TRUNCATE命令與DROP命令相似, 但他不是刪除整個(gè)數(shù)據(jù)表,所以索引、完整性約束、觸發(fā)器、權(quán)限等都不會(huì)被刪除。缺省情況下將釋放部分表和視圖空間,如果用戶不希望釋放表空間,TRUNCATE語句中要包含REUSE STORAGE子串。TRUNCATE命令語法如下:TRUNCATE TABLE|CLUSTER schema. name DROP|RE

32、USE STORAGE例:SQL> TRUNCATE TABLE t1; 管理視圖視圖是一個(gè)或多個(gè)表中的數(shù)據(jù)的簡(jiǎn)化描述,用戶可以將視圖看成一個(gè)存儲(chǔ)查詢(stored query)或一個(gè)虛擬表(virtual table).查詢僅僅存儲(chǔ)在oracle數(shù)據(jù)字典中,實(shí)際的數(shù)據(jù)沒有存放在任何其它地方,所以建立視圖不用消耗其他的空間。視圖也可以隱藏復(fù)雜查詢,比如多表查詢,但用戶只能看見視圖。視圖可以有與他所基于表的列名不同的列名。用戶可以建立限制其他用戶訪問的視圖。.1 建立視圖CREATE VIEW命令創(chuàng)建視圖,定義視圖的查詢可以建立在一個(gè)或多個(gè)表,或其他視圖上。查詢

33、不能有FOR UPDATE子串,在早期的ORACLE8i版本中不支持ORDER BY子串,現(xiàn)在的版本中CREATE VIEW可以擁有ORDER BY子串。例:SQL> CREATE VIEW TOP_EMP AS SELECT empno EMPLOYEE_ID,ename EMPLOYEE_NAME,salary FROM empWHERE salary >2000用戶可以在創(chuàng)建視圖的同時(shí)更改列名,方法是在視圖名后立即加上要命名的列名。重新定義視圖需要包含OR REPLACE子串。SQL> CREATE VIEW TOP_EMP(EMPLOYEE_ID,EMPLOYEE_N

34、AME,SALARY) AS SELECT empno ,ename ,salary FROM empWHERE salary >2000如果在創(chuàng)建的視圖包含錯(cuò)誤在正常情況下,視圖將不會(huì)被創(chuàng)建。但如果你需要?jiǎng)?chuàng)建一個(gè)帶錯(cuò)誤的視圖必須在CREATE VIEW語句中帶上FORCE選項(xiàng)。如:CREATE FORCE VIEW ORDER_STATUS AS SELECT * FROM PURCHASE_ORDERSWHERE STATUS= APPPOVE ;SQL>/warning :View create with compilation errors這樣將創(chuàng)建了一個(gè)名為ORDER_S

35、TATUS的視圖,但這樣的視圖的狀態(tài)是不合法的,如果以后狀態(tài)發(fā)生變化則可以重新編譯,其狀態(tài)也變成合法的。.2 從視圖中獲得數(shù)據(jù)從視圖中獲得數(shù)據(jù)與從表中獲得數(shù)據(jù)基本一樣,用戶可以在連接和子查詢中使用視圖,也可以使用SQL函數(shù),以及所有SELECT語句的字串。.3 插入、更新、刪除數(shù)據(jù)用戶在一定的限制條件下可以通過視圖更新、插入、刪除數(shù)據(jù)。如果視圖連接多個(gè)表,那么在一個(gè)時(shí)間里只能更新一個(gè)表。所有的能被更新的列可以在數(shù)據(jù)字典USER_UPDATETABLE_COLUMNS中查到。用戶在CREATE VIEW中可以使用了WITH子串。WITH READ ONLY子串表示創(chuàng)建

36、的視圖是一個(gè)只讀視圖,不能進(jìn)行更新、插入、刪除*作。WITH CHECK OPTION表示可以進(jìn)行插入和更新*作,但應(yīng)該滿足WHERE子串的條件。這個(gè)條件就是創(chuàng)建視圖WHERE子句的條件,比如在上面的例子中用戶創(chuàng)建了一個(gè)視圖TOP_EMP,在這個(gè)視圖中用戶不能插入salary小于2000的數(shù)據(jù)行。.4 刪除視圖刪除視圖使用DROP VIEW命令。同時(shí)將視圖定義從數(shù)據(jù)字典中刪除,基于視圖的權(quán)限也同時(shí)被刪除,其他涉及到該視圖的函數(shù)、視圖、程序等都將被視為非法。例:DROP VIEW TOP_EMP;3.3.2 索引索引是一種可以提高查詢性能的數(shù)據(jù)結(jié)構(gòu),在這一部分我們將討論索引如何提高

37、查詢性能的。ORACLE提供了以下幾種索引: B-Tree、哈希(hash)、位圖(bitmap)等索引類型 基于原始表的索引 基于函數(shù)的索引 域(Domain)索引實(shí)際應(yīng)用中主要是B-Tree索引和位圖索引,所以我們將集中討論這兩種索引類型。 B-Tree索引B-Tree索引是最普通的索引,缺省條件下建立的索引就是這種類型的索引。B-Tree索引可以是唯一或非唯一的,可以是單一的(基于一列)或連接的(多列)。B-Tree索引在檢索高基數(shù)數(shù)據(jù)列(高基數(shù)數(shù)據(jù)列是指該列有很多不同的值)時(shí)提供了最好的性能。對(duì)于取出較小的數(shù)據(jù)B-Tree索引比全表檢索提供了更有效的方法。但當(dāng)檢查的范圍超

38、過表的10%時(shí)就不能提高取回?cái)?shù)據(jù)的性能。正如名字所暗示的那樣,B-Tree索引是基于二元樹的,由枝干塊(branch block)和樹葉塊(leaf block)組成,枝干塊包含了索引列(關(guān)鍵字)和另一索引的地址。樹葉塊包含了關(guān)鍵字和給表中每個(gè)匹配行的ROWID。CREATE UNIQUE INDEX scott.ord_ord_no_idxON scott.ord(ord_no) REVERSEPCTFREE 30STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx01; 位圖索引位

39、圖索引主要用于決策支持系統(tǒng)或靜態(tài)數(shù)據(jù),不支持行級(jí)鎖定。位圖索引可以是簡(jiǎn)單的(單列)也可以是連接的(多列),但在實(shí)踐中絕大多數(shù)是簡(jiǎn)單的。位圖索引最好用于低到中群集(cardinality)列,在這些列上多位圖索引可以與AND或OR*作符結(jié)合使用。位圖索引使用位圖作為鍵值,對(duì)于表中的每一數(shù)據(jù)行位圖包含了TRUE(1)、FALSE(0)、或NULL值。位圖索引的位圖存放在B-Tree結(jié)構(gòu)的頁節(jié)點(diǎn)中。B-Tree結(jié)構(gòu)使查找位圖非常方便和快速。另外,位圖以一種壓縮格式存放,因此占用的磁盤空間比B-Tree索引要小得多。CREATE BITMAP INDEX scott.ord_region_id_idx

40、ON scott.ord(region_id)PCTFREE 30STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx01; 修改索引ALTER INDEX scott.ord_region_id_idxALLOCATE EXTENT (SIZE 200KDATAFILE DISK6/indx01.dbf );重建索引對(duì)于頻繁更新的表,索引會(huì)變得層次很深,效率變低。這時(shí)需要重建索引。ALTER INDEX scott.ord_region_id_idx REBUILDTABLESPAC

41、E indx02;3.3.3 序列(Sequences)Oracle序列是一個(gè)連續(xù)的數(shù)字生成器。序列常用于人為的關(guān)鍵字,或給數(shù)據(jù)行排序否則數(shù)據(jù)行是無序的。像約束一樣,序列只存在于數(shù)據(jù)字典中。序列號(hào)可以被設(shè)置為上升、下降,可以沒有限制或重復(fù)使用直到一個(gè)限制值。 創(chuàng)建序列創(chuàng)建序列使用SET SEQUENCE語句。CREATE SEQUENCE schema sequence KEYWORDKEYWORD包括下面的值:KEYWORD 描述START WITH 定義序列生成的第一個(gè)數(shù)字,缺省為1INCREMENT BY 定義序列號(hào)是上升還是下降,對(duì)于一 個(gè)降序的序列INCREMENT B

42、Y為負(fù) 值MINVALUE 定義序列可以生成的最小值,這是降 序序列中的限制值。缺省情況下該值為 NOMINVALUE,NOMINVALUE,對(duì)于 升序?yàn)?,對(duì)于降序?yàn)?10E26.MAXVALUE 序列能生成的最大數(shù)字。這是升序序列 中的限制值,缺省的MAXVALUE為 NOMAXVALUE,NOMAXVALUE,對(duì) 于升序?yàn)?0E26,對(duì)于降序?yàn)?1。CYCLE 設(shè)置序列值在達(dá)到限制值以后可以重 復(fù)NOCYCLE 設(shè)置序列值在達(dá)到限制值以后不能重 復(fù),這是缺省設(shè)置。當(dāng)試圖產(chǎn) MAXVALUE+1的值時(shí),將會(huì)產(chǎn)生一 個(gè)異常CACHE 定義序列值占據(jù)的內(nèi)存塊的大小, 缺省值為20NOCACHE

43、 在每次序列號(hào)產(chǎn)生時(shí)強(qiáng)制數(shù)據(jù)字典更 新,保證在序列值之間沒有間隔當(dāng)創(chuàng) 建序列時(shí),START WITH值必須等于 或大于MINVALUE。 刪除序列刪除序列使用DROP SEQUENCE語句DROP SEQUENCE sequence_name3.4 網(wǎng)絡(luò)管理3.4.1 Net8 server端配置 listener.ora文件的樣本:CONNECT_TIMEOUT_LISTENER = 0LOGGING_LISTENER = OFFLISTENER = (DESCRIPTION_LIST = (DESCRIPTION = # Local connections. (

44、ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = icache) ) ) (DESCRIPTION = # General TCP connections. (ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr)(PORT = 1521) ) )# For secure connections over SSL, uncomment the following lines.# (DESCRIPTION = # Secure TCP connections.# (ADDRESS =# (PROTOCOL = TCPS)(

45、HOST = dbsvr)(PORT = 2484)# )# ) (DESCRIPTION = # IIOP Connections. (PROTOCOL_STACK = (PRESENTATION = GIOP) (SESSION = RAW) ) (ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr)(PORT = 2481) )# For secure IIOP connections over SSL, uncomment the following lines.# (DESCRIPTION = # Secure IIOP Connections.# (PR

46、OTOCOL_STACK =# (PRESENTATION = GIOP)# (SESSION = RAW)# )# (ADDRESS = (PROTOCOL = TCPS)(HOST = dbsvr)(PORT = 2482)# ) )SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = s450 ) (ORACLE_HOME = /home1/ias/app/oracle/product/1.0.2) (SID_NAME = s450 ) ) (SID_DESC = (ORACLE_HOME = /home1/ias/ap

47、p/oracle/product/1.0.2) (SID_NAME = iCache_extproc) (PROGRAM = extproc) ) ) 啟動(dòng)listener 在響應(yīng)的端口上設(shè)置并啟動(dòng)listener 手工啟動(dòng)listener: 1. >lsnrctl start 查看狀態(tài) 2. >lsnrctl status3.4.2 Net 8 client端配置Net 8 client端常用的配置方法為tns方式使用圖形配置工具進(jìn)行配置 開始->程序->Oracle->Network Administration->Net8 Assista

48、nt. 1、選本地 -> 概要文件 加入tnsnames 2、選本地 ->服務(wù)命名 新建一個(gè)連接串,包括主機(jī)名、端口,協(xié)議 3、選文件->保存網(wǎng)絡(luò)配置 直接配置$ORACLE_HOME/network/admin/tnsnames.ora1. 備份tnsnames.ora2. 按照示例對(duì)連接串做拷貝3. 改變連接串的名字,主機(jī)名,端口,協(xié)議,SID等參數(shù)4. 保存文件nttest = (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=localserver) (PORT=1521) ) (CONNECT_DATA=(sid=oradb)

49、 ) )3.4.3 sqlnet.ora3.4.4 網(wǎng)絡(luò)連通性測(cè)試sqlplus tnsping ping ,netstat 1. sqlplus system/manager gis 注意:gis是剛才設(shè)置的新的連接串 2在客戶端 >Tnsping gis,并且檢查tnsnames.ora中的配置是否與server端的$ORACLE_HOME/network/admin/listener.ora中的配置是否一致。1 Ping server IP地址,查看網(wǎng)絡(luò)連通性3.4.5 常見NET8 錯(cuò)誤故障排除是每個(gè)系統(tǒng)管理人員必要面對(duì)的工作。下面給出幾種故障分析和排除方法。 服務(wù)

50、器端診斷任務(wù)1: 數(shù)據(jù)庫系統(tǒng)是否啟動(dòng)確定數(shù)據(jù)庫系統(tǒng)是否已啟動(dòng),只要用SQL*PLUS登錄即可:SQLPLUS system/manager如果收到下面信息,則數(shù)據(jù)庫還不能用。 ORA-1017: invalid U/P ORA-1034: Oracle not available任務(wù) 2: 執(zhí)行繞彎測(cè)試為了確認(rèn)listener.ora, tnsnames.ora sqlnet.ora文件的存在,有效。要在服務(wù)器端UNIX在: $ORACLE_HOME/network/admin Windows NT在:ORACLE_HOMEnetworkadmin a. 這些文件是否在工作。b. TNS_AD

51、MIN 變量有效性。使用 Net8 Assistant進(jìn)行繞彎測(cè)試:1. 啟動(dòng)Net8 Assistant: 在 UNIX, 從 $ORACLE_HOME/bin. 目錄來運(yùn)行netasst 在NT, choose Start > Programs > Oracle - HOME_NAME >Network Administration > Net8 Assistant.2. 在導(dǎo)航器擴(kuò)展 Directory或 Local > Service Naming.3. 選擇net service name 或 database service.4. 選命令 > T

52、est Net Service. 客戶端診斷當(dāng)服務(wù)器已經(jīng)通過一般的SQL*PLUS測(cè)試和繞彎測(cè)試后,可以進(jìn)行客戶端的測(cè)試,步驟如下:1. 檢查所安裝的協(xié)議是否與服務(wù)器端一致;在UNIX, 可以運(yùn)行$ORACLE_HOME/bin目錄下的 adapters 來確認(rèn)。結(jié)果顯示:Installed Net8 Tranport Protocols are:IPCTCP/IPBEQueathSSLRAW.2. 檢查所有 Net8 軟件在客戶端已經(jīng)安裝。3. 確認(rèn)客戶端機(jī)器$ORACLE_HOME/network/admin目錄下的tnsnames.ora 和 sqlnet.ora文件的內(nèi)容:a. 當(dāng)前的工作目錄b. TNS_ADMIN 環(huán)境變量在NT中,如果 TNS_ADMIN 環(huán)境變量沒有注冊(cè),就要進(jìn)行注冊(cè)。c. 用FTP, TELNET及PING 檢查網(wǎng)絡(luò)的連接情況。4. 用TNSPING 、TRCROUTE 實(shí)用程序或 Net8 Assistant進(jìn)行測(cè)試 TNSPING:tnsping net_service_name count net service name: 在 tnsnames.ora 或名字服務(wù)上得使用。如: NIS 或 DCE的 CDS. count (可選): 實(shí)驗(yàn)次數(shù)例1

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。