[整理]Oracle常用命令及Sql._第1頁
[整理]Oracle常用命令及Sql._第2頁
[整理]Oracle常用命令及Sql._第3頁
[整理]Oracle常用命令及Sql._第4頁
[整理]Oracle常用命令及Sql._第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、分頁select t2.* from (select rownum row no, t1.* from ( select *from AC_CUSTOMER)t1 where row num 0)select t2.* from (select rownum row no, t1.* from ()t1 where row num 0)左連接sql 的 left join 命令詳解表 aaid adate1 a12 a23 a3表 bbid bdate1 b12 b24 b4兩個表 a,b 相連接,要取出 id 相同的字段select * from a inner join b on a.ai

2、d = b.bid 這是僅取出匹配的數(shù)據(jù)此時的取出的是:1 a1 b12 a2 b2那么 left join 指:select * from a left join b on a.aid = b.bid首先取出 a 表中所有數(shù)據(jù),然后再加上與 a,b 匹配的的數(shù)據(jù)此時的取出的是:1 a1 b12 a2 b23 a3 空字符同樣的也有 right join指的是首先取出 b 表中所有數(shù)據(jù),然后再加上與 a,b 匹配的的數(shù)據(jù)此時的取出的是:1 a1 b12 a2 b24 空字符 b4LEFT JOIN 或 LEFT OUTER JOIN左向外聯(lián)接的結(jié)果集包括LEFT OUTER 子句中指定的左表的

3、所有行,而不僅僅是聯(lián)接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列表列均為空值。三范式第一范式:1)任何給定行的列必須是只包含一個值;2)表中的每一行必須有相同數(shù)量的列;3 )表中的每一行必須是唯一的即是不相同的;第二范式:1)必須滿足第一范式;2)表中的所有非主鍵必須依賴一整個主鍵;第三范式:1)必須滿足第二范式;2)表中的所有非主鍵必須相互獨立;范式中還有復合主鍵的用法;查看表SQL select * from tab;查看表結(jié)構(gòu)SQL describe 表名簡寫以上命令SQL desc 表名系統(tǒng)時間selectto char(sysdate,yy

4、yymmdd hhss) from dual;select to_char(sysdate,yyyy-mm-dd,hh24:mi:ss) from dual;導入/導出導入:imp crddev/amcamc file=c:amc.dmp導出: exp crddev/amcamc file=c:amc.dmp如何單獨備份一個或多個用戶:D:exp scott/tiger file=導出文件D:exp system/manager owner=(用戶 1,用戶 2,,用戶 n) file=導出文件如何單獨備份一個或多個表:D:exp 用戶/密碼 tables=表D:exp 用戶/密碼 table

5、s=(表 1,,表 2)D:exp system/manager tables=( 用戶 1.表)D:exp system/manager tables=(用戶 1.表 1,用戶 2.表 1)如何導入指定表D:exp scott/tiger file=a.dmpD:imp test/test fromuser=scott tables=emp file=a.dmpD:imp test/test tables=dept file=a.dmp如果導出用戶沒有 DBA 權(quán)限,則導入用戶可以不用指定fromuser、touser 參數(shù)如果導出用戶擁有 DBA 權(quán)限,則導入用戶也必須擁有DBA 權(quán)限)注

6、釋SQLcomment on table 表 is 表注釋 ;注釋已創(chuàng)建。SQLcomment on column 表.列 is 列注釋 ;注釋已創(chuàng)建。查詢表注釋SQL select * from user_tab_comments where comments is not null;查詢列注釋SQL select * from user_col_comments where comments is not null;查看表空間查看表空間名字select distinct TABLESPACE_NAME from tabs;查看幾個表空間select count(distinct TABLE

7、SPACE_NAME) from tabs;select b.file_id文件 ID,b.tablespace_name表空間 ,b.file_name物理文件名 ,b.bytes總字節(jié)數(shù),(b.bytes-sum(nvl(a.bytes,0)已使用 ,sum(nvl(a.bytes,0)剩余 ,sum(nvl(a.bytes,0)/(b.bytes)*100 剩余百分比 from dba_free_space a,dba_data_files b wherea.file_id=b.file_id group by b.tablespace_name,b.file_name,b.file_i

8、d,b.bytesorder by b.tablespace_name-dba_free_space - 表空間剩余空間狀況-dba_data_files - 數(shù)據(jù)文件空間占用情況查看表空間是否自動擴展select file_name,autoextensible,increment_by from dba_data_files; 表空間自動擴展alter database datafile path:datafile name autoextend on next 1Mmaxsize 100M; 表空間大小select tablespace_name,count(*),sum(blocks)

9、,sum(bytes)/1024/1024from dba_data_files group by tablespace_name;使用情況select df.tablespace_name 表空間名 ,totalspace 總空間 M,freespace 剩余空間M,round(1-freespace/totalspace)*100,2) 使用率 % from(select tablespace_name,round(sum(bytes)/1024/1024) totalspace from dba_data_files group bytablespace_name) df, (selec

10、t tablespace_name,round(sum(bytes)/1024/1024) freespace fromdba_free_spacegroup by tablespace_name) fs where df.tablespace_name=fs.tablespace_name;使用情況SELECT a.tablespace_name 表空間名 ,total 表空間大小 ,free 表空間剩余大小 , (total-free) 表空間使用大小 ,ROUND(total-free)/total,4)*100 使用率 %FROM (SELECT tablespace_name,SUM

11、(bytes) free FROM DBA_FREE_SPACE GROUP BYtablespace_name ) a,(SELECT tablespace_name,SUM(bytes) total FROM DBA_DATA_FILESGROUP BY tablespace_name) bWHERE a.tablespace_name=b.tablespace_name控制DDL 數(shù)據(jù)定義語言:create、 alter 、drop 、 truncate (創(chuàng)建、修改結(jié)構(gòu)、刪除、截斷) (其他: rename ) DML 數(shù)據(jù)操縱語言:insert 、 delete 、 select、

12、update (增、刪、查、改)DCL 數(shù)據(jù)控制語言:grant、revoke (授權(quán)、回收)、set role事務(wù)控制:commit、 rollback 、 savepoint (其他: lock table、 set constraint(s) 、 set transaction) 審計控制:audit、 noaudit系統(tǒng)控制:alter system會話控制:alter session其他語句:comment (添加注釋)、explain plan、analyze (收集統(tǒng)計)、validate、call表結(jié)構(gòu)復制SQL create table b as select * from

13、a where 1=2;SQL create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2;查看回滾段SQLSELECTSEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STAFUOSMDBA_ROLLBACK_SEGS;查看數(shù)據(jù)文件放置路徑SQL select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;查看當前連接用戶SQL show user

14、SQL select 100*20 from dual;連接字符串SQL select 列 1| 列 2 from 表 1;SQL select con cat 列 1,列 2) from 表 1;復制數(shù)據(jù)用戶間復制數(shù)據(jù)SQL copy from user1 to user2 create table2 using select * from table1;視圖group by視圖中不能使用 order by ,但可用 group by 代替來達到排序目的 SQL create view a as select b1,b2from b group by b1,b2;創(chuàng)建用戶通過授權(quán)的方式來創(chuàng)建

15、用戶SQL grant connect,resource to test identified by test;備份create table yhda_bak as select * from yhda;分組統(tǒng)計select sid,count(*) from yhda a group by sid having count(*)1select函數(shù)ORDER BY -按照指定列排序返回結(jié)果的子句DISTINCT -只返回結(jié)果集合內(nèi)唯一行的關(guān)鍵詞COUNT - 返回匹配查詢的數(shù)據(jù)行總數(shù)數(shù)值的函數(shù)AVG-該函數(shù)返回指定列的平均值SUM-該函數(shù)把指定的列中的數(shù)字加起來MIN-該函數(shù)返回列中最小的非

16、NULL 值MAX-該函數(shù)返回列中的最大值GROUP BY -按列匯集查詢函數(shù)結(jié)果的子句存儲查詢結(jié)果利用 Oracle 中的 Spool 緩沖池技術(shù)可以實現(xiàn) Oracle 數(shù)據(jù)導出到文本文件。 在 Oracle PL/SQL 中輸入緩沖開始命令,并指定輸出的文件名:spool d:output.txt在命令行中隨便輸入你的SQL 查詢:select mobile from customer; select mobile from client;在命令行中輸入緩沖結(jié)果命令:spool off; 則系統(tǒng)將緩沖池中的結(jié)果都輸出到 output.txt 文件中。 以 TAB 鍵分隔刪除表注意事項在刪除

17、一個表中的全部數(shù)據(jù)時,須使用 TRUNCATE TABL 表名;因為用 DROP TABLE DELETE *FROM 表名時,TABLESPAC 表空間該表的占用空間并未釋放,反復幾次 DROP, DELETE 操作后,該 TABLESPAC 上百兆的空間就被耗光了。having用法having 子句對 group by 子句所確定的行組進行控制 ,having 子句條件中只允許涉及常量 , 聚 組函數(shù)或 group by 子句中的列 .外聯(lián)接+用法外部聯(lián)接 +按其在 =的左邊或右邊分左聯(lián)接和右聯(lián)接 .若不帶 +運算符的表中的一個行不 直接匹配于帶 +預算符的表中的任何行 ,則前者的行與后者

18、中的一個空行相匹配并被返回 若二者均不帶 +,則二者中無法匹配的均被返回 .利用外部聯(lián)接 +,可以替代效率十分低下 的 not in 運算 ,大大提高運行速度 .例如 ,下面這條命令執(zhí)行起來很慢用外聯(lián)接提高表連接的查詢速度在作表連接 (常用于視圖 )時,常使用以下方法來查詢數(shù)據(jù) :SELECT PAY_NO, PROJECT_NAMEFROM AWHERE A.PAY_NO NOT IN (SELECT PAY_NO FROM B WHERE VALUE =120000);-但是若表 A 有 10000 條記錄,表 B 有 10000 條記錄,則要用掉 30 分鐘才能查完,主要 因為 NOTI

19、N 要進行一條一條的比較,共需要 10000*10000 次比較后,才能得到結(jié)果。該用 外聯(lián)接后,可以縮短到 1 分左右的時間 :SELECT PAY_NO,PROJECT_NAMEFROM A,BWHERE A.PAY_NO=B.PAY_NO(+)AND B.PAY_NO IS NULLAND B.VALUE =12000;select a.empno from emp a where a.empno not in (select empno from emp1 where job=倘若利用外部聯(lián)接 ,改寫命令如下 :select a.empno from emp a ,emp1 bwher

20、e a.empno=b.empno(+)and b.empno is nulland b.job= SALE ;可以發(fā)現(xiàn) ,運行速度明顯提高 .set transaction用法在執(zhí)行大事務(wù)時 ,有時 oracle 會報出如下的錯誤 :ORA-01555:snapshot too old (rollback segment too small)這說明 oracle 給此事務(wù)隨機分配的回滾段太小了 ,這時可以為它指定一個足夠大的回滾段,以確保這個事務(wù)的成功執(zhí)行 .例如set transaction use rollback segment roll_abc;delete from table_n

21、ame where .commit;回滾段 roll_abc 被指定給 delete 事務(wù) ,commit 命令則在事務(wù)結(jié)束之后取消了回滾段的指定 .庫重建注意事項在利用 import 進行數(shù)據(jù)庫重建過程中 ,有些視圖可能會帶來問題 ,因為結(jié)構(gòu)輸入的順序可能造 成視圖的輸入先于它低層次表的輸入,這樣建立視圖就會失敗 .要解決這一問題 , 可采取分兩步走的方法 :首先輸入結(jié)構(gòu) ,然后輸入數(shù)據(jù) .命令舉例如下 (uesrname:jfcl,password:hfjf,host sting:ora1, 數(shù)據(jù)文件 :expdata.dmp): imp jfcl/hfjfora1 SALEfile=em

22、pdata.dmp rows=Nimp jfcl/hfjfora1 file=empdata.dmp full=Y buffer=64000 commit=Y ignore=Y第一條命令輸入所有數(shù)據(jù)庫結(jié)構(gòu),但無記錄 .第二次輸入結(jié)構(gòu)和數(shù)據(jù) ,64000 字節(jié)提交一次 .ignore=Y 選項保證第二次輸入既使對象存在的情況下也能成功 .刪除重復記錄:-查找表中 num 列重復的,列出重復的記錄數(shù),并列出他的 name 屬性select count(num), max(name) from studentgroup by numhaving count(num) 1-按 num 分組后找出表中

23、num 列重復,即出現(xiàn)次數(shù)大于一次delete from student( 上面 Select 的 ) 這樣的話就把所有重復的都刪除了。 慎重-執(zhí)行下面 SQL 語句后就可以顯示所有 DRAWING 和 DSNO 相同且重復的記錄SELECT * FROM EM5_PIPE_PREFABWHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D 相當于 First,SecondWHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING ANDEM5_PIPE_PREFAB.DSNO=D.DSNO);-執(zhí)行下面 SQL 語句后

24、就可以刪除所有 DRAWING 和 DSNO 相同且重復的記錄DELETE FROM EM5_PIPE_PREFABWHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB DWHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING ANDEM5_PIPE_PREFAB.DSNO=D.DSNO);返回表中N,M條記錄:取得某列中第 N 大的行select column_name from(select table_name.*,dense_rank() over (order by column desc) rank fro

25、m table_name) where rank =&N ;假如要返回前 5 條記錄:select * from tablename where rownum6;( 或是 rownum = 5 或是 rownum != 6) 假如要返回第 5-9 條記錄:select * from tablenamewhere and rownum 10min usselect * from table namewhere and rownum5order by n ame選出結(jié)果后用 name 排序顯示結(jié)果。(先選再排序)注意:只能用以上符號(、,=,=,Between.and。由于 rownum

26、是一個總是從 1 開始的偽列,Oracle 認為這種條件不成立,查不到記錄.另外,這個方法更快:select * from (select rownum r,a from yourtablewhere rownum 10這樣取出第 11-20 條記錄!(先選再排序再選)要先排序再選則須用select 嵌套:內(nèi)層排序外層選。rownum 是隨著結(jié)果集生成的,一旦生成,就不會變化了;同時,生成的結(jié)果是依次遞加的,沒有 1 就永遠不會有 2!rownum 是在查詢集合產(chǎn)生的過程中產(chǎn)生的偽列,并且如果 where 條件中存在 rownum 條件的話,則:1:假如 判定條件是常量,則:只能 rownum

27、 = 1, SPOOL ON.SQLSQL SELECT ALTER VIEW |TNAME| COMPILE; FROM TAB;SQL SPOOL OFF然后執(zhí)行 ON.SQL 即可。SQL ON.SQL當然,授權(quán)和創(chuàng)建同義詞也可以快速進行,如:SQL SELECT GRANT SELECT ON |TNAME| TO USERNAME; FROM TAB;SQL SELECT CREATE SYNONYM|TNAME| FOR USERNAME.|TNAME|; FROM TAB;讀寫文本型操作系統(tǒng)文件-在 PL/SQL 3.3 以上的版本中,UTL_FILE 包允許用戶通過 PL/SQ

28、L 讀寫操作系統(tǒng)文件。如下:DECALREFILE_HANDLE UTL_FILE.FILE_TYPE;BEGINFILE_HANDLE:=UTL_FILE.FOPEN(,TESTA.TX)T; ,UTL_FILE.PUT_LINE(FILE_HANDLE, HELLO,IT S A TEST TXT FILE );UTL_FILE.FCLOSE(FILE_HANDLE); END;1、ORACLE數(shù)據(jù)庫的啟動和關(guān)閉對于 DBA 們來說,關(guān)閉和重新啟動數(shù)據(jù)庫以便優(yōu)化、調(diào)整應用的運行是經(jīng)常碰到的事情。如果用戶已經(jīng) log 進如了數(shù)據(jù)庫,你用 SHUTDOWN IMMEDIATE 或 SHUTDO

29、WN ABORT 命令來執(zhí)行 關(guān)閉數(shù)據(jù)庫,那用戶將不能連接,直到數(shù)據(jù)庫重新啟動,用戶時常會抱怨:怎么又要重起。其實,每次這樣的啟動關(guān)閉都是為了數(shù)據(jù)庫能更好的運做。 這篇文章將具體介紹 shutdown/startup 操作時應想到的步驟和許多注意事項,或許這些能對你有所幫助。NOTE 在執(zhí)行第一步前,SHUT DOWN 數(shù)據(jù)庫,不要提前關(guān)閉SQL*NET,直到你確認關(guān)閉了SERVERh的數(shù)據(jù)庫后再關(guān)閉 SQL*NET 因為一旦你關(guān)閉了 SQL*NET,用戶將將失去和數(shù)據(jù)庫的會話。第一步 -存檔或刪除老的 trace files 和 logs當你啟動 ORACLE 的一個實例(INSTANCE

30、時,ORACLE 把關(guān)于該實例的診斷信息寫入指定 的 trace和 log 文件。每個后臺進程都增加一個 TRACE 文件,它被存儲在指定的目錄(該路徑由 INIT.ORA或 CONFIG.ORA 文件中的 BACKGROUND_DUMP_DES 參數(shù)指定)。用戶在數(shù)據(jù)庫中遇到一個 內(nèi)部錯誤時也 增力口 USERS TRACE 文件,該文件的 位置由 INIT.ORA 或 CONFIG.ORA 文件中的USER_DUMP_DEST參數(shù)指定。TRACE 文件的個數(shù)和名稱形式由你的操作系統(tǒng)決定。例如在UNIX 下,文件名是一個數(shù)字加下畫線加后臺進程號,類似 3_12345.trc ,當你下一次啟動

31、實例時,一個新的文件將被產(chǎn)生,因為進 程號的不同,文件名可能是 3_13245.trc 。由于每次啟動和關(guān)閉數(shù)據(jù)庫時,ORACLE 并不自動刪除 TRACE 文件,所以如果忽略這個步驟,那這些沒有用的文件將占據(jù)大量的自由空間。所以DBA 應該主動的管理這些文件,或刪除或存檔在別的指定目錄下,如何管理主要是根據(jù)你自己的開發(fā)環(huán)境需要而訂了。SQL*NET 也產(chǎn)生 LOG 文件,一般叫LISTENER.LOG 為了能知道他的位置,可以鍵入命令lsnrctl statusLISTENER.LOGt 件大小也隨著啟動的次數(shù)不斷的變大,所以通過妥善管理它也能有效的利用空間。第二步-改名 ALERT LOG

32、件ALERT LOG 文件也是用來記錄 INSTANCE 的診斷信息的。它的存放目錄也通過BACKGROUND_DUMP_DEST參數(shù)來指定。一般情況下 ALERT LOG 文件命名方式為:ALERT_ .LOG ALTER LOG 文牛包括了 一些數(shù)據(jù)庫主要事件信息,例如: startup,dhutdown, redo log 的使用, tablespace 的改變,文件的 改變,內(nèi)部錯誤信息,tablespace-backup 的狀態(tài)的改變等。 ALTER LOG 文件是重要的,同時該 文件的大小增長的速度也很驚人, 如果你不檢查他, 一段時間后你想看看它將是很費勁, 因為它 已經(jīng)很大了,

33、查起來也費勁。為了既能留下這些有用的信息, 同時不至于浪費很大的空間, 可以用改名的方法。 你可以在 任何時候更改 ALTER LOG 文件名,甚至在 DATABASEOPEN 時。當 ORACLE 不能找到被BACKGROUND_DUMP_DESC指定的文件時,他將增加一個新的ALTER LOG 文牛。雖然改名不要求 SHUTDOW 但選擇在SHUTDOWN/STARTU 澈 據(jù)庫時更改名字是一個好的主意。NOTE 下面的幾步是在 restart 數(shù)據(jù)庫時做的。第三步 -產(chǎn)生一個增加控制文件( CREATE CONGROLFIL)E 命令的文件為了 recover 一個被破壞的數(shù)據(jù)庫,你不得

34、不用CREATECONTROLFILE 命令來重建 controlfiles。CREATE CONTROLFI 命令有兩個使用:1、在你的現(xiàn)有 CONTROL FILE 文件破化后重建它2、 在 ALTER DATABASES 別的參數(shù)時,如: MAXDATAFILES你可以手輸入命令,但最好在STARTUP 前發(fā)送一命令,以便你擁有最新版本的CREATECONTROLFIL 命 令。從進入 SQLDBA SERVER MANAGE 或者 SQL*PLUS 輸入:alter database backup controlfile to trace;該命令在 USER_DUMP_DESC 參數(shù)指

35、定的 路徑產(chǎn) 生一個 TRACE 文件,名字可能是SIDNAME_PROCESSID.TRC該文件將包含針對你的數(shù)據(jù)庫的完整的CREATE CONTROLFIL 語法。第四步-扌把 PACKAGES 和 PROCEDURE 駐留 SGA 區(qū)眾所周知,當 PL/SQL OBJECTS 被一個用戶調(diào)用時,它將被存儲在SGA 區(qū)的 SQL 共享池中,當別人再度調(diào)用該 OBJECT 寸直接從 SGA 區(qū)讀取,能感受到明顯的速度提升。所以,把常用的 PACKAGES和PROCEDURE 在 STARTUP 寸就載入并駐留 SGA 將提高應用的整體性能。通過從新編譯、調(diào) 用等方法可以調(diào)用 OBJECT(

36、PROCEDURES CURSORS 進 SGA 然后用 DBMS_SHARED_POOL.KEE 來駐 留SGA=如下:alter package APPOWNER.ADD_CLIENT compile;execute DBMS_SHARED_POOL.KEEP(APPOWNER.ADD_CLIENT,P);(P 代表 PROCEDURES C 代表 CURSORS般每個數(shù)據(jù)庫包括兩類駐留程序:1、數(shù)據(jù)庫的核心 PACKAGES2、用戶自定義的 PACKAGES核心 PACKAGE 包括 SYS 所有的 PACKAGES STANDARD DBMS_SQL, DBMS_UTILITYDIUT

37、IL, 為了查看你的 INSTANCE 中那些被駐留了,查詢 DBA_OBJECT_SIZE 用下面的語句:select Owner,Name,Type,Source_Size+Code_Size+Parsed_Size+Error_Size Total_Bytesfrom DBA_OBJECT_SIZEwhere Type = PACKAGE BODY order by 4 desc;2、Oracle基本知識一個表空間只能屬于一個數(shù)據(jù)庫每個數(shù)據(jù)庫最少有一個控制文件(建議3 個,分別放在不同的磁盤上)每個數(shù)據(jù)庫最少有一個表空間(SYSTEM 表空間)建立 SYSTEM 表空間的目的是盡量將目的

38、相同的表存放在一起,以提高使用效率每個數(shù)據(jù)庫最少有兩個聯(lián)機日志文件一個數(shù)據(jù)文件只能屬于一個表空間一個數(shù)據(jù)文件一旦被加入到一個表空間中,就不能再從這個表空間中移走,也不能再加入到其他表空間中建立新的表空間需要建立新的數(shù)據(jù)文件數(shù)據(jù)文件被 ORACLE格式化為 ORACLE塊, ORACLE塊的大小是在第一次創(chuàng)建數(shù)據(jù)庫時設(shè) 定的,并且以后不能改變單獨一個事務(wù)不能跨越多個回滾段索引表不含 ROWID 值擁有不同大小的回滾段沒有任何益處ORACLE 在初始安裝時建立一個缺省數(shù)據(jù)庫,實例名為ORCL一個塊的最大長度為 16KB 有 2K、4K、8K、16K)每個數(shù)據(jù)庫最大文件數(shù)(按塊大?。?K 塊2000

39、0 個文件4K 塊40000 個文件8K 塊或以上65536 個文件oracle server 可以同時啟動多個數(shù)據(jù)庫一套操作系統(tǒng)上只能安裝一個版本的ORACLE 數(shù)據(jù)庫系統(tǒng)一套 ORACLE 數(shù)據(jù)庫系統(tǒng)中可以有多個ORACLE 數(shù)據(jù)庫每個 ORACLE 數(shù)據(jù)庫擁有一個數(shù)據(jù)庫實例(INSTANCE所以,一套操作系統(tǒng)上同時可以有多個oracle 數(shù)據(jù)庫實例啟動3、oracle數(shù)據(jù)庫的幾種啟動方式1、startup nomount非安裝啟動,這種方式啟動下可執(zhí)行:重建控制文件、重建數(shù)據(jù)庫 啟動 instanee,即啟動 SGA 和后臺進程,這種啟動只需要init.ora 文件。2、startup

40、mount dbname安裝啟動,這種方式啟動下可執(zhí)行:數(shù)據(jù)庫日志歸檔、數(shù)據(jù)庫恢復、重新命名一些數(shù)據(jù)庫文件如:系統(tǒng)表空間或日志文件。 執(zhí)行nomoun”然后打開控制文件3、startup open dbname先執(zhí)行“nomoun”然后執(zhí)行“mount”再打開包括 Redo log 文件在內(nèi)的所有數(shù)據(jù)庫文件, 這種方式下可訪問數(shù)據(jù)庫中的數(shù)據(jù)。4、startup,等于以下三個命令startup nomountalter database mountalter database ope n5、startup restrict約束方式啟動這種方式能夠啟動數(shù)據(jù)庫,但只允許具有一定特權(quán)的用戶訪問非特權(quán)用

41、戶訪問時,會出現(xiàn)以下提示:ERROR:ORA-01035: ORACLE 只允許具有 RESTRICTED SESSIO 權(quán)限的用戶使用6、 startup force 強制啟動方式 當不能關(guān)閉數(shù)據(jù)庫時,可以用 startup force 來完成數(shù)據(jù)庫的關(guān)閉 先關(guān)閉數(shù)據(jù)庫,再執(zhí)行正常啟動數(shù)據(jù)庫命令7、 startup pfile= 參數(shù)文件名 帶初始化參數(shù)文件的啟動方式 先讀取參數(shù)文件,再按參數(shù)文件中的設(shè)置啟動數(shù)據(jù)庫 例: startup pfile=E:Oracleadminoradbpfileinit.ora8、startup EXCLUSIVE4、Oracle8的不安全因素作為對象關(guān)系型

42、數(shù)據(jù)庫的杰出代表,Oracle 無疑是最具實力的。無論是在數(shù)據(jù)庫的規(guī)模,多媒體數(shù)據(jù)類型的支持,SQL 操作復制的并行性還是在安全服務(wù)方面,Oracle 均比 SYBASEInformix 強許多, 加上其最新版本 Oracle8.0.4 更是增強了這方面的特性,而且還引入了一些 新的特性, 比如: 數(shù)據(jù)分區(qū) (Data Partitioning) 、 對象關(guān)系技術(shù) (Object Relational Technology) 、 唯索引表(Indexonly tables)、連接管理器(Connection Manager)NET8 特性卜高級隊列 (Advaneed Quening)等,所以

43、有一種說法:Oracle8 是適用于如 Peoplesoft, SAP 和 Baan 等圭寸裝式應用系統(tǒng)最好的數(shù)據(jù)庫引擎。雖然 Oracle8 有許多的優(yōu)點,但正如微軟的WINDOWS 系統(tǒng)也會死機一樣,任何再好的軟件也有他的缺陷, 一個優(yōu)秀的軟件不可能就是十全十美, 他只是避免了大多數(shù)常見的或者可能 被考慮到的問題,而一些不容易被發(fā)現(xiàn)卻非常致命的問題往往會被疏忽掉。Oracle8 也同樣存在著不安全的因素,許多正在想盡快升級到 Oracle8 的 Oracle7.1 、 Oracle7.2、 Oracle7.3 用 戶不能不考慮到這個因素。 當然, 這個不安全因素并不是一下子就發(fā)現(xiàn)的, 而是

44、我們在對一 個非常龐大的表進行管理時發(fā)現(xiàn)的,這種隱患在使用Oracle 創(chuàng)建的小型或者中型數(shù)據(jù)庫中可能不會出現(xiàn)或根本無法發(fā)現(xiàn), 因為 Oracle8 獨有的特性已經(jīng)將這種隱患降低到最低的程度, 你大可放心你的數(shù)據(jù)庫系統(tǒng)的安全。問題 我們安裝的 Oracle8 數(shù)據(jù)庫是工作于主機 -終端方式下的, 系統(tǒng)主機采用的是四臺 HP-9000 小 型機、1.5G 的內(nèi)存。建庫初期時設(shè)定的最大事務(wù)數(shù)是按Oracle8 的默認取值這也是 Oracle7的默認取值取的:塊值為 2K,事務(wù)數(shù)為 32 (對于一個要處理非常龐大的數(shù)據(jù)庫時,一般我 們設(shè)定的塊值要大于 2K,至少應為 4K 或者 16K,當然這還與主

45、機的 CPU 能力和 I/O 能力值 有關(guān)),并在建庫時沒有進行分區(qū)建表,這也許就為以后數(shù)據(jù)庫出問題留下了隱患。由于日 訪問數(shù)據(jù)庫的用戶非常多,而且對同一表操作的用戶數(shù)量太大, 致使那個表經(jīng)常被鎖住, 不 斷有用戶抱怨他們進不了系統(tǒng),主機發(fā)送的數(shù)據(jù)包太慢,經(jīng)常報ORA-6OO 的錯誤。起初我們以為是系統(tǒng)網(wǎng)絡(luò)問題,但這種可能性比較小,因為我們發(fā)現(xiàn)系統(tǒng)CPU 峰值經(jīng)常在 90%多,空閑很小, 數(shù)據(jù)庫資源太忙, 同時有十多個人鎖住一個大表進行操作, 自然一部分用戶就無 法進入系統(tǒng),對此我們寫了如下的SQL 語句對鎖表用戶進行監(jiān)控:SELECT OBJECT_ID,SESSION_ID,SERIAL#

46、,ORACLE_USENAME,OS_USER_NAME,S_PROCESSFROM V$LOCKED_OBJECT 1,V$SESSION S WHERE 1.SESSION_ID=S.SID;也許有的人會問為什么不用如下的SQL 語句進行查詢:SELECT a.username,a.sid,a.serial#,b.id1,c.sql_text from v$session a,V$lock b,v$sqltext c where a.lockwait=b.kaddr anda. sql_address=c.address and a.sql_hash_value=c.hash_value;

47、以上兩個 SQL 語句都會查詢返回當前被鎖住的用戶列表,但第二個SQL 語句由于加入了sql_text 從而使這個查詢變得非常的慢長,特別是在有許多用戶同時對數(shù)據(jù)庫進行操作時, 建議不用,第一個 SQL 語句會在很短的時間內(nèi)查詢出是誰在鎖表,從而有利于對數(shù)據(jù)庫的 管理,一但有用戶進入不了, 我們就馬上殺死其鎖進程SID, SERIAL# SQL 語句如下:ALTER SYSTEM KILL SESSN SJDSERIAL#,但這并不是解決問題的根本方法,只能暫時緩解一下; 另外我們還發(fā)現(xiàn)回滾段時常有“online 與“offline 的現(xiàn)象,于是我們又考慮是否是回滾段引起的問題: 因為我們一但

48、對大的回滾段進行操作, 馬上就會有用戶反映無法進入。 我們知道回 退段的大小直接依賴于數(shù)據(jù)庫的活動狀態(tài),而每一個EXTENTS 都應具有相同的值(Oracle的推薦)INITIAL EXTENTS 勺值可以從 2K( 32)、4K( 69)、8K( 142)、16K、32K 等列表中選 擇 ,這將保證你刪掉一個區(qū)的時候,你可以重新使用它的空間而不會造成浪費,另外 MINEXTENTS應設(shè)為 20,這將不會使回退段擴展另一個EXTENT 時用到正在被活動的事務(wù)所使用的空間, 因而我們就可以據(jù)此來確定回退段大小, 查出數(shù)據(jù)庫正常運行時所需回滾段的 尺寸,為此我們重新設(shè)置了回退段的OPTIMAL 參

49、數(shù)事實是 OPTIMAL 的值并不足引起數(shù)據(jù)庫出錯,增大了 OPTIMAL 的值,使用命令 SET TRANSACTION USE ROLLBACK SEGME 為系統(tǒng) 指定了一個大的回退段 注意 OPTIMAL 參數(shù)要足夠大以使 ORACLE 不需經(jīng)常回縮和重新分配 EXTENTS如果設(shè)得小于最小覆蓋值,性能將由于額外的段重設(shè)置而下降,對于一個要執(zhí)行 長查詢的系統(tǒng),OPTIMAL 應設(shè)成足夠大以避免 ORA-1555, “Smapshot too old 的錯誤,而對 于運行小的事務(wù),OPTIMAL 應設(shè)得小一些,使回退段足夠小以便放于內(nèi)存中,這將提高系統(tǒng)性能。 ,但我們發(fā)現(xiàn)這樣做后, OR

50、A-600 的錯誤依然出現(xiàn),而且鎖表越來越嚴重;我們又 考慮暫時鎖住這個表, 不讓用戶進入, 先把用戶的鎖進程全部殺完再看, 由于一開始就采用 了主機 -終端的工作方式,因而根本就無法清除得完,除非斷掉外部的所有網(wǎng)絡(luò)連接,但那 樣無疑是重啟數(shù)據(jù)庫,最終我們選擇了重啟數(shù)據(jù)庫。重啟數(shù)據(jù)庫后系統(tǒng)資源一下子得以釋放, 用戶明顯感覺速度上來了, 能夠保證正常使用, 就 在我們認為系統(tǒng)可能是因為長期沒有 DOWN 機,用戶登錄數(shù)過多造成數(shù)據(jù)庫死鎖的時候,一個非常嚴重的問題出現(xiàn)了, 那個表中的一個數(shù)據(jù)無法進行UPDATE UPDATE 就報 ORACLE內(nèi)部代碼錯誤,當時我們并沒在意,但是不久, 我們又發(fā)現(xiàn)

51、另一表中編號有重復的現(xiàn)象, 根 據(jù) ORACLE8的數(shù)據(jù)唯索引表性,這種現(xiàn)象應該根本不會存在,因為我們在這個表中只建立 了唯一索引,于是我們電話詢問ORACLE 公司的技術(shù)工程師,也許 ORACLE 的技術(shù)工程師們也是第一次遇到這種問題,他們的回答是數(shù)據(jù)字典太老,數(shù)據(jù)索引壞掉,建議重建索引,并把問題向亞太反映。在 ORACLE 公司的技術(shù)工程師的指導下,我們重建了該表,并重新建立 了索引,在重建索引過程中,開始幾次都不成功,而且無法 DROP 掉先前的表,經(jīng)過仔細的 查找,我們發(fā)現(xiàn)ORACLE8 中的確有索引重復的現(xiàn)象,一個表中有兩條重復的索引,直接導 致數(shù)據(jù)庫 HANG,不能訪問,但查看系統(tǒng)

52、狀態(tài)、 進程、LISTENERS 都正常,從日志文件來看, 文件過?。?MB),CHECK POINT頻繁,影響到了系統(tǒng)的性能,通過以上調(diào)整后,數(shù)據(jù)庫問 題暫時緩解了,可以做 UPDATE 但是ORACLE 的內(nèi)部代碼錯誤卻依然存在,只是暫時還不會影響到我們對數(shù)據(jù)庫的使用,而回滾段開始出現(xiàn)“online rollback segment 的問”題,更加令人不解的是數(shù)據(jù)庫居然出現(xiàn)了自動DOWN 機的現(xiàn)象,于是我們再次詢問 ORACLE 公司的技術(shù)工程師,他們的答復是 ORACLE 已經(jīng)注意到了 ORACLE8.O.4 版本的一些問題,他們將會給數(shù) 據(jù)庫打 PATCH 希望能夠解決到這些問題,但是

53、考慮到給數(shù)據(jù)庫打一個PATCH 將會把所有的數(shù)據(jù)都要 EXPORT 出來,這將是一個非常危險的操作,而且所有主機上的程序都要重新編 譯一到,沒有一個星期的時間是無法做好的, 而那是根本不可能的事情, 因而我們現(xiàn)在還在 等待 ORACLE 公司一個更好的解決辦法。說明以上問題可能是 ORACLE 的個 BUG,但任何軟件都有它不完善的一面,否則又何必出什么補丁了, 有了補丁肯定會比沒有補丁強, 但是我們在設(shè)計一個系統(tǒng)時也一定要考慮到以下的 一些方面:1、 主機系統(tǒng)的 CPU 能力與 I/0 能力:HP 偏重于 I/0 能力,CPU 能力不強,你的數(shù)據(jù)庫就應 該盡量避免讓 CPU 占用率太大;DE

54、C 偏重于 CPU 能力,I/O 能力不強,你的數(shù)據(jù)庫就可以考 慮適當增大某些占用 CPU 參數(shù)的設(shè)置;SUN 的 CPU 能力與 1/0 能力差不多,你的數(shù)據(jù)庫就應 該考慮平衡參數(shù),過大過小都不好。2、 增大日志文件的 SIZE 至少一會低于 8MB,日志文件過小會導致 CHECK POINT 頻繁, 從而影響到系統(tǒng)的性能。3、 回滾段最好保持一個比較合理的值,對一些較大的回滾段可適當增加MINEXTENTS 并設(shè)置 OPTIMAL,保證一般事物處理無需經(jīng)常動態(tài)分配空間與及時回收空間。4 、 要 充 分 利 用 CPU 系 統(tǒng) 資 源 及 提 高 CPU 的 命 中 率 , 可 適 當 增

55、大log_simultaneous_copies,db_block_latches,db_writes 的設(shè)置。5、 適當增加 db_block_buffer 與 share_poll_size 的 SIZE 以提高 BUFFER 值,增加內(nèi)存,盡 快提高BUFF 及 SQL 的命中率。6、 主機-終端方式盡管可以便于數(shù)據(jù)維持,但主機-終端方式卻造成主機負荷太重,建議采 用客戶-服務(wù)端方式建系統(tǒng)。5、Oracle數(shù)據(jù)庫碎片整理我們知道, oracle 作為一種大型數(shù)據(jù)庫,廣泛應用于金融、郵電、電力、民航等 數(shù)據(jù)吞吐量巨大,計算機網(wǎng)絡(luò)廣泛普及的重要部門。對于系統(tǒng)管理員來講,如何 保證網(wǎng)絡(luò)穩(wěn)定運行

56、,如何提高數(shù)據(jù)庫性能,使其更加安全高效,就顯得尤為重要 。作為影響數(shù)據(jù)庫性能的一大因素-數(shù)據(jù)庫碎片,應當引起dba 的足夠重視,及時發(fā)現(xiàn)并整理碎片乃是 dba 一項基本維護內(nèi)容。1、碎片是如何產(chǎn)生的當生成一個數(shù)據(jù)庫時,它會分成稱為表空間( tablespace )的多個邏輯段(segment),如系統(tǒng)(system)表空間,臨時(temporary )表空間等。一個表空間 可以包含多個數(shù)據(jù)范圍(exte nt)和一個或多個自由范圍塊,即自由空間( free space)。表空間、段、范圍、自由空間的邏輯關(guān)系如下:當表空間中生成一個段時,將從表空間有效自由空間中為這個段的初始范圍 分配空間。在這

57、些初始范圍充滿數(shù)據(jù)時,段會請求增加另一個范圍。這樣的擴展 過程會一直繼續(xù)下去,直到達到最大的范圍值,或者在表空間中已經(jīng)沒有自由空 間用于下一個范圍。最理想的狀態(tài)就是一個段的數(shù)據(jù)可被存在單一的一個范圍中 。這樣,所有的數(shù)據(jù)存儲時靠近段內(nèi)其它數(shù)據(jù),并且尋找數(shù)據(jù)可少用一些指針。 但是一個段包含多個范圍的情況是大量存在的,沒有任何措施可以保證這些范圍 是相鄰存儲的,如圖 1。當要滿足一個空間要求時,數(shù)據(jù)庫不再合并相鄰的自 由范圍(除非別無選擇) , 而是尋找表空間中最大的自由范圍來使用。這樣將逐 漸形成越來越多的離散的、分隔的、較小的自由空間,即碎片。例如:2、碎片對系統(tǒng)的影響隨著時間推移,基于數(shù)據(jù)庫

58、的應用系統(tǒng)的廣泛使用,產(chǎn)生的碎片會越來越多,將對數(shù)據(jù)庫有以下兩點主要影響:( 1)導致系統(tǒng)性能減弱如上所述,當要滿足一個空間要求時,數(shù)據(jù)庫將首先查找當前最大的自由范 圍,而 最大自由范圍逐漸變小,要找到一個足夠大的自由范圍已變得越來越困 難,從而導致表空間中的速度障礙,使數(shù)據(jù)庫的空間分配愈發(fā)遠離理想狀態(tài);2)浪費大量的表空間盡管有一部分自由范圍(如表空間的pctincrease 為非 0)將會被 smon (系統(tǒng)監(jiān)控)后臺進程周期性地合并,但始終有一部分自由范圍無法得以自動合并,浪 費了大量的表空間。3、自由范圍的碎片計算由于自由空間碎片是由幾部分組成,如范圍數(shù)量、最大范圍尺寸等,我們可 用

59、fsfi-free spacefragmentation index (自由空間碎片索引)值來直觀體現(xiàn)fsfi=100*sqrt(max(extent)/sum(extents)*1/sqrt(sqrt(count(extents)可以看出, fsfi 的最大可能值為 100(一個理想的單文件表空間) 。隨著范 圍的增加, fsfi 值緩慢下降,而隨著最大范圍尺寸的減少, fsfi 值會迅速下降。下面的腳本可以用來計算 fsfi 值:rem fsfi value computerem fsfi.sqlcolumn fsfi format 999,99select tablespace_name

60、,sqrt(max(blocks)/sum(blocks)* (100/sqrt(sqrt(count(blocks) fsfifrom dba_free_spacegroup by tablespace_name order by 1;spool fsfi.rep;/spool off;比如,在某數(shù)據(jù)庫運行腳本 fsfi.sql, 得到以下 fsfi 值:tablespace_name fsfirbs 74.06system 100.00temp 22.82tools 75.79users 100.00user_tools 100.00ydcx_data 47.34ydcx_idx 57.19yd

溫馨提示

  • 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

提交評論