ORACLE數(shù)據(jù)庫資料整理【經(jīng)典】_第1頁
ORACLE數(shù)據(jù)庫資料整理【經(jīng)典】_第2頁
ORACLE數(shù)據(jù)庫資料整理【經(jīng)典】_第3頁
ORACLE數(shù)據(jù)庫資料整理【經(jīng)典】_第4頁
ORACLE數(shù)據(jù)庫資料整理【經(jīng)典】_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

ORACLE數(shù)據(jù)庫管理ORACLE數(shù)據(jù)庫管理 11 數(shù)據(jù)庫安裝及卸載 4 系統(tǒng)安裝 4 系統(tǒng)安裝時錯誤 4 系統(tǒng)卸載 42 數(shù)據(jù)庫對象設(shè)計 5 表設(shè)計 5 表空間設(shè)計說明 5 表分區(qū)設(shè)計說明 5 視圖設(shè)計 5 觸發(fā)器設(shè)計 6 觸發(fā)器功能 6 索引設(shè)計 6 索引的默認結(jié)構(gòu) 6 索引對dml的影響 7 索引狀態(tài) 7 job設(shè)計 7 同義詞說明 83 數(shù)據(jù)庫答理(DBA) 8 執(zhí)行SQL軌跡分析 8 執(zhí)行計劃分析 8 跟蹤文件解析 9 數(shù)據(jù)庫參數(shù)說明 10 命令行屏幕顯示修改 10 系統(tǒng)參數(shù)修改說明 11 數(shù)據(jù)文件解析 11 口令文件 11 監(jiān)聽文件 11 用戶及權(quán)限管理 11 表查詢權(quán)限 11 數(shù)據(jù)庫備份 12 冷備份腳本 12 熱備份腳本 12 數(shù)據(jù)庫恢復 13 數(shù)據(jù)庫級常見問題分析處理 133 本地服務(wù)名配置無法啟用 13 oracle服務(wù)無法自己啟動問題 14 無法進行OEM問題 14 數(shù)據(jù)庫出現(xiàn)亂碼問題解決方法 14 數(shù)據(jù)字典說明 15 與用戶有關(guān)的數(shù)據(jù)字典 15 與邏輯數(shù)據(jù)結(jié)構(gòu)有關(guān)的數(shù)據(jù)字典 15 與實例有關(guān)的動態(tài)性能視圖 15 與實例有關(guān)的動態(tài)數(shù)據(jù)字典 153.9 數(shù)據(jù)庫優(yōu)化 16 數(shù)據(jù)庫性能優(yōu)化 16 SQL語句優(yōu)化 16 ORACLE運行環(huán)境優(yōu)化 17 查詢中索引無法使用 20 實例解析 20 數(shù)據(jù)庫監(jiān)聽操作 21 對數(shù)據(jù)庫所做的dml語句進行監(jiān)聽的方法 21 數(shù)據(jù)庫對象鎖 22 查看是否有被鎖對象 22 對用戶帳號進行上鎖及解鎖 22 查看哪一個用戶處于死鎖狀態(tài) 22 正確刪除沒有用的歸檔日志文件 22 命中率說明 22 BUFFER命中率 22 LIBRARY命中率 23 LATCH命中率 23 In-MemorySort命中率 23 BufferNoWait 24 RedoNoWait 24 ExecutetoParse 25 ParseCPUtoParesElapsed 25 Non-ParseCPU 25 Rollbacksegment竟爭情況 26 Tablespace的I/O比例 26 Datafile的I/O比例 263 重做日志緩存區(qū)命中率 27 碎片程度 27 ORACLE中的等待事件 27 Bufferbusywait 27 Dbfilescatteredread 27 Dbfilesequentialread 27 Dbfilesinglewrite 28 Directpathread 28 Directpathwrite 28 Freebufferinspected 28 Freebufferwaits 28 Latchfree 28 Librarycacheloadlock 28 Librarycachelock 28 Librarycachepin 28 Logbufferspace 28 Logfileparallelwrite 28 Logfilesinglewrite 28 Logfileswitch(archiveingneeded) 28 Logfileswitch(checkpointincomplete) 29 Logfilesync 29 Transaction 29 Undosegmentextension 294 數(shù)據(jù)庫應(yīng)用(開發(fā)) 29 表操作 29 表主鍵操作 29 表分區(qū)操作 29 修改表數(shù)據(jù)操作 29 刪除表數(shù)據(jù)操作 30 索引操作 30 普通索引操作 30 函數(shù)索引操作 30 自定義函數(shù)索引操作 30 查看索引是否失效 31 索引表空間釋放 31 分區(qū)索引在使用時,無法在執(zhí)行計劃列表中顯示 31 存儲過程及函數(shù)操作 31 循環(huán)使用 31 goto、exit及return在程序或循環(huán)語句中的作用 324.3.3 no_data_foundandsql%notfoundandsql%rowcount三者之間的區(qū)別 32 綁定變量的使用 33 觸發(fā)器操作 33 使某個觸發(fā)器無效 33 恢復觸發(fā)器使用 33 使某張表所涉及的所有觸發(fā)器無效 33 恢復某張表所涉及的所有觸發(fā)器使用 33 表空間操作 34 刪除表空間 34 判斷表空間是否需要進行碎片整理 34 表空間使用大小計算 34 數(shù)據(jù)導入導出操作 34 大表數(shù)據(jù)操作 34 往主鍵表中插入上千萬條數(shù)據(jù)的效率問題 34 快速刪除大表中的數(shù)據(jù) 35 加速or連接查詢大表效率 35 如果存在則修改否則將該數(shù)據(jù)添加到表中 35 不常見內(nèi)置函數(shù)及分析函數(shù) 36 查看誰登陸了數(shù)據(jù)庫的內(nèi)置函數(shù) 36 分析函數(shù)解析 36 兩個替換函數(shù)的區(qū)別(replace與translate) 38 SQL語句操作技巧匯總 38 判斷某字符串是否是純數(shù)字 38 查詢結(jié)果如何按家庭樹排列 38 如何求同一時間段內(nèi)同一部門相隔5分鐘的數(shù)據(jù) 38 如何將普通表改為分區(qū)表,并保留其數(shù)據(jù),將其數(shù)據(jù)分區(qū)保存 39 查詢執(zhí)行次數(shù)多的SQL 39 查詢讀硬盤多的SQL 39 查詢排序多的SQL 39 查詢分析的次數(shù)太多的SQL 39 游標的觀察SQL 39 查看當前用戶執(zhí)行的SQL 40 oracle中number類型的數(shù)值是如何存儲的 40 查詢數(shù)據(jù)時為什么要用指定的字段名來代替“*” 40 查詢某個數(shù)據(jù)庫對象的創(chuàng)建時間 405 ORACLE操作異常積累 41 ORA-00000:語句級操作異常 41 to_char引發(fā)的無效數(shù)字問題 415.1.2 nvl使用問題 41 NULL使用使用問題 41 ORA-01113:file3needsmediarecovery 41 ORA-00600:內(nèi)部錯誤代碼,參數(shù):[kcratr1_lostwrt],[],[],[],[],[],[],[] 42 DUAL查詢返回多行數(shù)據(jù)異常 42 ora-30554 42 ORA-01123:無法啟動聯(lián)機備份;未啟用介質(zhì)恢復? 42 ORA-00157:控制文件版本不區(qū)配 42 ORA-01092:ORACLE例程終止。強行斷開連接 43 ORA-12154:TNS:無法處理服務(wù)名 45 ORA-01017:invalidusername/password;logondenied 46 ORA-00001無法啟動,系統(tǒng)索引正處于監(jiān)視狀態(tài) 46數(shù)據(jù)庫安裝及卸載系統(tǒng)安裝系統(tǒng)安裝時錯誤安裝過程中選擇路徑后,會報area…錯誤,這是因為安裝程序包的路徑包括中文字符而導致的。系統(tǒng)卸載1)單擊“開始”—找到命令—ORACLEuniversalinstaller—點擊卸載產(chǎn)品—按步驟卸載即可;2)進入注冊表刪除相關(guān)服務(wù)信息運行regedit選擇HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,press‘del’key,刪除所有與oracle相關(guān)的項目。1)選擇HKEY_LOCAL_MACHINE|SOFTWARE|ORACLE注冊表鍵,然后刪除此鍵。刪除方法是在樹型目錄中選中Oracle欄,然后右擊鼠標,在彈出式菜單中單擊刪除。2)選擇HKEY_LOCAL_MACHINE|SYSTEM|CURRENTCONTROLSET|SERVICES,刪除SERVICES鍵下以O(shè)racle為前綴的鍵。3)選擇選擇HKEY_LOCAL_MACHINE|SYSTEM|CURRENTCONTROLSET|SERVICES|EVENTLOG|APPLICATION,刪除此鍵下以O(shè)racle為前綴的鍵。4)選擇HKEY_CLASSES_ROOT,刪除此鍵下所有以O(shè)ra、Oracle、Orcl、EnumOra為前綴的鍵。5)選擇HKEY_CURRENT_USER|SOFTWARE|MICROSOFT|WINDOWS|CURRENTVERSION|EXPLORER|MENUORDER|STARTMENU|PROGRAMS,刪除此鍵下所有以O(shè)racle為前綴的鍵。數(shù)據(jù)庫對象設(shè)計表設(shè)計刪除不用的表字段:ALTERTABLElunartestDROPUNUSEDCOLUMNS;ALTERTABLElunartestDROPUNUSEDCOLUMNSCHECKPOINT20;DEALLOCATEUNUSED;表空間設(shè)計說明每個數(shù)據(jù)庫都有一個默認表空間,一般新增用戶都不會用系統(tǒng)默認的表空間,而是指定一個新的表空間作為新增用戶的默認表空間。表空間段的分配計算:pctfree=(averagerowsize-initialrowsize)*100/averagerowsizepctused=100-pctfree-(averagerowsize*100/availabledataspace—現(xiàn)有數(shù)據(jù)空間)如果更新表可使得行增大的話,則pctused值設(shè)置在40到70之間,其它情況應(yīng)該設(shè)置為60到85之間。Initial:該值最好設(shè)置為2的倍數(shù);移動表空間Altertableusername.table_namemovetablespace_name;注意:移動表空間后,表索引需要重建,否則會出現(xiàn)ORA-01502:索引'ICDSC.IX_CITYCODE_CITYID'或這類索引的分區(qū)處于不可用狀態(tài)。表分區(qū)設(shè)計說明分區(qū)定義:在非常大的數(shù)據(jù)庫中,可以通過把一個大表的數(shù)據(jù)分成多個小表來簡化數(shù)據(jù)庫的管理,這些小表稱作分區(qū)。一般在數(shù)據(jù)量相當大的情況下,而且經(jīng)常需要查詢大批量類似的數(shù)據(jù)時,一般都會考慮去分區(qū)的。分區(qū)種類:range、list、hashrange分區(qū)確定最大值之后,不可以再修改,而list可修改;list和hash只適合9i或9i以上版本。臨時表1、會話臨時表--建表語句:CreateGLOBALTEMPORARYtabletable_name(,,,)oncommitpreserverows--該種會話臨時表在會話結(jié)束時,會自動TRUNCATE2、事物等待臨時表視圖設(shè)計定義:是一個數(shù)據(jù)庫虛擬的表;使用視圖原則:1、視圖中盡量避免出現(xiàn)數(shù)據(jù)排序的SQL語句;2、查詢的數(shù)據(jù)來源于一個或多個表;3、如果視圖中嵌入視圖,盡量不要超過三個。使用視圖優(yōu)點:用視圖使復雜的查詢簡單化;提高數(shù)據(jù)安全,使得只有查看該部分數(shù)據(jù)權(quán)限的人使用觸發(fā)器設(shè)計觸發(fā)器功能主要用于兩個數(shù)據(jù)庫或不同用戶間的數(shù)據(jù)同步或者用于管理員對數(shù)據(jù)庫的一些操作進行監(jiān)控。觸發(fā)器用于不同用戶間的數(shù)據(jù)同步的一個用例:--Theyareinsertingtothetabletestti2whenthedataoftabletesttiareupdatedcreateorreplacetriggertr_old_testafterupdateontesttiforeachrowbegininsertintotestti2(ti2name,ti2id,flag)values(:new.tiname,:new.tiid,'Y');end;createorreplaceproceduresp_old_test(str_in_namevarchar2,i_in_idnumber,v_setoutnumber)isstr_g_vavarchar2(100);beginstr_g_va:='updatetesttisettiname='||chr(39)||str_in_name||chr(39)||'wheretiid='||i_in_id;dbms_output.put_line(str_g_va);EXECUTEIMMEDIATEstr_g_va;v_set:=0;commit;exceptionwhenothersthenrollback;v_set:=1;end;createtabletestti(tinamevarchar2(10),tiidnumber);createtabletestti2(ti2namevarchar2(10),ti2idnumber,flagchar(1))索引設(shè)計索引的默認結(jié)構(gòu)默認的索引是b_tree索引;索引對dml的影響對insert的影響.(分裂,要保證tree的平衡)對delete的影響.(刪除行的時候要標記改節(jié)點為刪除).對update的影響,如果更新表中的索引字段,則要相應(yīng)的更新索引中的鍵值。查詢中包含索引字段的鍵值和行的物理地址。索引狀態(tài)1、VAILD可用的;2、N/A不確定的,一般為分區(qū)索引狀態(tài)即本地索引狀態(tài);--當普通索引被建為本地索引時,狀態(tài)同樣為N/A,修改為全局索引后,馬上要變?yōu)閂AILD即可用的--對分區(qū)表建立索引時添加LOCAL關(guān)鍵字,索引只作用于分區(qū),而不是作用于整個表。--8I數(shù)據(jù)庫執(zhí)行計劃看不出明顯區(qū)別。3、UNUSABLE—不可用的;job設(shè)計修改文件initsid.ora的參數(shù):job_queue_processes=4

8i,9i

(允許同時執(zhí)行的JOB數(shù))job_queue_interval=10

8i

job_queue_keep_connections=true

8iDBMS_JOB.SUBMIT(:jobno,//job號

‘your_procedure;’,--shallrunprocedure

trunc(sysdate)+1/24,--nextruntime

‘trunc(sysdate)+1/24+1’--alternationtimeatatime

刪除job:dbms_job.remove(jobno);修改job:dbms_job.what(jobno,what);修改下一次運行的時間:dbms_job.next_date(job,next_date);修改間隔時間:dbms_erval(job,interval);stopjob:dbms.broken(job,broken,nextdate);startjob:dbms_job.run(jobno);注意:修改后一定要COMMIT;payattendtiontoupdateaftermustcommit;--刪除臨時表任務(wù):在每天臨晨5點,清空報表臨時表數(shù)據(jù),以求加快報表查詢速度declarev_countnumber;v_jobnumnumber:=400;beginselectcount(*)intov_countfromsys.dba_jobstwheret.what='p_magent_truncrpttmptable;'andt.schema_user='magent';if(v_count=0)thenbmit(job=>v_jobnum,what=>'p_magent_truncrpttmptable;',next_date=>to_date(to_char(sysdate,'yyyy-mm-dd')||'05:00:00','yyyy-mm-ddhh24:mi:ss'),interval=>'trunc(sysdate+1,''dd'')+5/24');commit;elseintov_jobnumfromsys.dba_jobstwheret.what='p_magent_truncrpttmptable;'andt.schema_user='magent';sys.dbms_job.change(job=>v_jobnum,what=>'p_magent_truncrpttmptable;',next_date=>to_date(to_char(sysdate,'yyyy-mm-dd')||'05:00:00','yyyy-mm-ddhh24:mi:ss'),interval=>'trunc(sysdate+1,''dd'')+5/24');commit;endif;end;同義詞說明A:封裝數(shù)據(jù)庫對象用于簡單化同一數(shù)據(jù)庫不同用戶或不同數(shù)據(jù)庫之間的訪問同義詞創(chuàng)建,如在icd用戶下創(chuàng)建以下同義詞:createorreplacesynonymT_PUB_COMMONINFO--(或者是對象名+dblink);則在icd用戶下訪問icdsc用戶下的表t_pub_commoninfo時,就可以直接用:select*fromt_pub_commoninfo;B:同義詞權(quán)限同義詞也分為privateandpublic,默認情況下就是私有的。所以drop同義詞時需要加上權(quán)限關(guān)鍵字,否則會提示相應(yīng)的同義詞不存在。數(shù)據(jù)庫答理(DBA)執(zhí)行SQL軌跡分析執(zhí)行計劃分析利用命令查看執(zhí)行計劃,一般需要對AUTOTRACE進行配置,具體步驟如下:1、建計劃表:SQL>@?\rdbms\admin\utlxplan;表已創(chuàng)建。2、建表的同義字:SQL>createpublicsynonymplan_tableforplan_table;3、授權(quán)同義字:SQL>grantallonplan_tabletopublic;授權(quán)成功。4、創(chuàng)建角色:SQL>createrolerol_strace;角色已創(chuàng)建5、授權(quán):SQL>grantselectonv_$sesstattorol_strace;授權(quán)成功。SQL>grantselectonv_$statnametorol_strace;授權(quán)成功。SQL>grantselectonv_$sessiontorol_strace;授權(quán)成功。SQL>grantrol_stracetodbawithadminoption;授權(quán)成功。DBA用戶首先被授予了plustrace角色,然后我們可以把plustrace授予public這樣所有用戶都將擁有plustrace角色的權(quán)限.SQL>grantplustracetopublic;授權(quán)成功。SQL>connecticddrpt/icdrptSQL>setautotraceonSQL>settimingon關(guān)于Autotrace幾個常用選項的說明:SETAUTOTRACEOFF不生成AUTOTRACE報告,這是缺省模式SETAUTOTRACEONEXPLAINAUTOTRACE只顯示優(yōu)化器執(zhí)行路徑報告SETAUTOTRACEONSTATISTICS--只顯示執(zhí)行統(tǒng)計信息SETAUTOTRACEON包含執(zhí)行計劃和統(tǒng)計信息SETAUTOTRACETRACEONLY同setautotraceon,但是不顯示查詢輸出SQL>setautotracetraceonlySQL>selecttable_namefromuser_tables;已選擇46行。ExecutionPlan0SELECTSTATEMENTOptimizer=CHOOSE10NESTEDLOOPS21NESTEDLOOPS(OUTER)32NESTEDLOOPS(OUTER)43NESTEDLOOPS(OUTER)54NESTEDLOOPS(OUTER)65NESTEDLOOPS76TABLEACCESS(BYINDEXROWID)OF'OBJ$'87INDEX(RANGESCAN)OF'I_OBJ2'(UNIQUE)96TABLEACCESS(CLUSTER)OF'TAB$'109INDEX(UNIQUESCAN)OF'I_OBJ#'(NON-UNIQUE)115TABLEACCESS(BYINDEXROWID)OF'OBJ$'1211INDEX(UNIQUESCAN)OF'I_OBJ1'(UNIQUE)134INDEX(UNIQUESCAN)OF'I_OBJ1'(UNIQUE)143TABLEACCESS(CLUSTER)OF'USER$'1514INDEX(UNIQUESCAN)OF'I_USER#'(NON-UNIQUE)162TABLEACCESS(CLUSTER)OF'SEG$'1716INDEX(UNIQUESCAN)OF'I_FILE#_BLOCK#'(NON-UNIQUE)181TABLEACCESS(CLUSTER)OF'TS$'1918INDEX(UNIQUESCAN)OF'I_TS#'(NON-UNIQUE)SQL執(zhí)行軌跡從最大的子數(shù)字開始執(zhí)行。Statistics311recursivecalls0dbblockgets909consistentgets8physicalreads0redosize2000bytessentviaSQL*Nettoclient536bytesreceivedviaSQL*Netfromclient5SQL*Netroundtripsto/fromclient11sorts(memory)0sorts(disk)46rowsprocessed跟蹤文件解析外部表訪問跟蹤文件1、找到USER_DUMP所在的路徑SQL>showparameteruser_dumpSQL>NAMETYPEVALUEuser_dump_deststringd:/oracle/admin/lotus2/udump2、在找到的目標路徑下新建指向跟蹤文件夾的directorycreateorreplacedirectoryudumpas‘d:\oracle\admin\lotus2\udump’;3、如要對某些操作生成跟蹤文件,則修改會話狀態(tài)altersessionsetsql_trace=true;4、執(zhí)行要跟蹤的操作select*fromuser_directories;5、將會話狀態(tài)修改過來altersessionsetsql_trace=false;6、查詢跟蹤文件目錄及文件名selectc.value||'\'||b.instance||'_ora_'||a.spid||'.trc'astrace_file_namefromv$mystatm,v$sessions,v$processpwherem.STATISTIC#=1ands.PADDR=p.ADDR)a,fromv$threadt,v$parameterptwherept.NAME='thread'and(pt.VALUE=0ort.THREAD#=to_number(pt.VALUE)))b,(SELECTVALUEFROMSYS.v$parameterWHERENAME='user_dump_dest')c7、新增外部表,用來訪問跟蹤文件內(nèi)容createtablelotus_ora_29731(textvarchar2(400))organizationexternal(typeoracle_loaderdefaultdirectoryUDUMPaccessparameters(recordsdelimitedbynewlinenobadfilenodiscardfilenologfile)location('lotus_ora_29731.trc'))rejectlimitunlimited8、查詢外部表,獲取跟蹤文件內(nèi)容select*fromlotus_ora_29731;利用命令分析跟蹤文件以DBA身份登陸數(shù)據(jù),查看各用戶下使用的SQL語句:1、首先查詢出各用戶的SID,SERIAL#:select*fromv_$session;2、生成相關(guān)用戶的軌跡文件:EXECUTEDBMS_SYSTEM.SET_SQL_TRACE_IN_session(9,181,TRUE);3、將軌跡文件轉(zhuǎn)換成易懂的執(zhí)行計劃:tkprofD:\oracle\admin\lotus\udump\lotus_ora_2176.trcd:\outfiles.orasqlexplain=icd/icd(數(shù)據(jù)庫用戶名/密碼);4、查看解析后的文件,里面包含了最易懂的執(zhí)行計劃信息。數(shù)據(jù)庫參數(shù)說明命令行屏幕顯示修改Settimeon顯示當前系統(tǒng)時間在命令行Settimeoff關(guān)閉在命令行顯示的當前系統(tǒng)時間Settimingon—-顯示執(zhí)行時間Settimingoff—隱藏執(zhí)行時間其它更多的SET使用可以在命令行輸入“HELPSET”命令查詢系統(tǒng)參數(shù)修改說明數(shù)據(jù)文件解析口令文件口令文件作用口令文件對本地用戶及遠程非DBA用戶是沒有多大作用的,它只是對遠程以DBA登陸才會啟作用,如果該文件不正確,那么,遠程就無法以DBA身份登陸了??诹钗募陆_本hostorapwdfile=D:\oracle\ora92\DATABASE\PWDSID.orapassword=oraclepassentries=口令文件刪除腳本hostdelD:\oracle\ora92\DATABASE\PWDSID.ORA—SID表示實例名,而且只能是實例名,不能用其它的名稱來替換??诹钗募谑褂眠^程中異常處理在遠程以DBA登陸時出現(xiàn)以下錯誤:ora-01017:invalidusername/password;logondenied[此處是無法通過口令文件驗證]解決方法如下:altersystemsetremote_login_passwordfile=exclusivescope=spfile;說明:none遠程以DBA連接會有錯誤,而參數(shù)為exclusive時可以遠程以DBA連接,另一個參數(shù)是shared,多個數(shù)據(jù)庫可以共享一個口令文件,可此時口令文件中只能存儲SYS用戶的口令,而其他用戶不能被授予SYSDBA身份。當強制受權(quán)時會出現(xiàn)以下錯誤:ora-01994:grantfaild:cannotaddusertopublicpasswordfile數(shù)據(jù)庫備份時,同時需要備份該文件。監(jiān)聽文件SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=PLSExtProc)(ORACLE_HOME=D:\oracle\OraHome92)(PROGRAM=extproc))(SID_DESC=(GLOBAL_DBNAME=lotus2)--通過實例名來找請求注冊哪一個實例上(即SID_NAME[實例ID])(ORACLE_HOME=D:\oracle\OraHome92)(SID_NAME=lotus2)))用戶及權(quán)限管理表查詢權(quán)限1、同一實例下,給一個新增的用戶ICDRPT賦予訪問icdmagent用戶的只讀權(quán)限:C:\DocumentsandSettings\Administrator>sqlplusicdmagent/icdmagentSQL>grantselectonall_tablestoicdrpt;授權(quán)成功。數(shù)據(jù)庫備份冷備份腳本1)首先找到數(shù)據(jù)文件位置:SQL>selectnamefromv_$datafile;NAMENAME已選擇23行。2)進行文件復制echoBeginCold_BackupDatabase...date/ttime/tsqlplussys/sysassysdbashutdownimmediatecopyd:\oracle\oradata\lotus\*.*d:\數(shù)據(jù)備份\lotuscopyd:\oracle\ora92\database\PWDlotus.orad:\數(shù)據(jù)備份\lotus\pwdechoTheColdBackupDatabaseSuccessed.以上腳本在命令行執(zhí)行。熱備份腳本altertablespacesystembeginbackup;hostcopyD:\oracle\ora92\itpub\system01.dbfd:\jimmy\system01.dbf;altertablespacesystemendbackup;altertablespaceUNDOTBS1beginbackup;hostcopyD:\oracle\ora92\itpub\UNDOTBS01.dbfd:\jimmy\UNDOTBS01.dbf;altertablespaceUNDOTBS1endbackup;altertablespaceINDXbeginbackup;hostcopyD:\oracle\ora92\itpub\INDX01.dbfd:\jimmy\INDX01.dbf;altertablespaceINDXendbackup;altertablespaceTOOLSbeginbackup;hostcopyD:\oracle\ora92\itpub\TOOLS01.dbfd:\jimmy\TOOLS01.dbf;altertablespaceTOOLSendbackup;altertablespaceUSERSbeginbackup;hostcopyD:\oracle\ora92\itpub\USERS01.dbfd:\jimmy\USERS01.dbf;altertablespaceUSERSendbackup;altertablespacePERSTATbeginbackup;hostcopyD:\oracle\ora92\itpub\PERSTAT01.dbfd:\jimmy\PERSTAT01.dbf;altertablespacePERSTATendbackup;alterdatabasebackupcontrolfileto'd:\jimmy\jimmy_bak.ora';altersystemsetuser_dump_dest='D:\jimmy';alterdatabasebackupcontrolfiletotrace;altersystemsetuser_dump_dest='D:\oracle\ora92\admin\sample\udump';altersystemarchivelogcurrent;select*fromv$log;熱備份步驟:1)shotdownimmediate;--首先關(guān)閉數(shù)據(jù)據(jù)庫;2)startupmount;--以歸檔模式啟動數(shù)據(jù);3)alterdatabasearchivelog;--啟動歸檔模式;4)alterdatabaseopen;--打開數(shù)據(jù)庫;5)備份表空間6)備份控制文件7)備份日志文件8)altersystemarchivelogcurrent;--歸檔結(jié)束數(shù)據(jù)庫恢復原已經(jīng)備份好的數(shù)據(jù)文件及密碼文件覆蓋數(shù)據(jù)庫現(xiàn)有的密碼文件和數(shù)據(jù)文件。數(shù)據(jù)庫級常見問題分析處理本地服務(wù)名配置無法啟用點擊工具-->oraclenetconfigurationassistant,進入如下圖界面:發(fā)現(xiàn)怎么點擊“本地NET服務(wù)名配置”都無法進入下一步,在網(wǎng)上找了一下并沒有找到類似錯誤觖決方法。于是想用另一種方法,進行對其它機器數(shù)據(jù)庫連接,直接在文件“”中添加需要添加的本地服務(wù)名配置,可是不管怎么配置(而且確認配置沒有錯),數(shù)據(jù)庫登陸時都是無法識別“服務(wù)名”。這不又沒辦法了,于是想進入“ORACLEENTERPRISEMANAGERCONSOLE”試試看,右擊下圖中“將數(shù)據(jù)庫添加到樹”時,出現(xiàn)了一個錯誤,見圖三:圖二圖三一看上圖,也就估計是哪出錯了,可能是什么時候把文件“”給損壞了,重建一下該文件,問題就解決了。oracle服務(wù)無法自己啟動問題找到文件‘’,將文件中的“sqlnet.authentication_service=(nts)”腳本注釋掉即可。無法進行OEM問題一旦無法進入OEM有三種可能:1:沒有裝OEM資料檔案庫,需要安裝資料檔案庫才能進入OEM,使用EnterpriseManagerConfigurationAssistant安裝一個資料檔案庫試一下;2:可能是OEM的服務(wù)沒有啟動,查看服務(wù)項看OracleOraHome90ManagementServer服務(wù)是否有啟動,若沒有啟動,則啟動該服務(wù)試一下;3:查看設(shè)置的主機名是否有錯及用戶名與密碼是否匹配。數(shù)據(jù)庫出現(xiàn)亂碼問題解決方法數(shù)據(jù)庫出現(xiàn)亂碼,這是一個設(shè)置問題,需要修改文件才能解決該問題:找到文件“$ORACLE_HOME\sysman\config”下的文件“”,修改文件中的腳本“1”為“”數(shù)據(jù)字典說明與用戶有關(guān)的數(shù)據(jù)字典DBA_USERS—可以查看用戶ID、表空間、創(chuàng)建日期及帳戶是否被鎖信息DBA_PROFILES--DBA_ROLESDBA_ROLE_PRIVSDBA_SYS_PRIVS—DBA的系統(tǒng)權(quán)限D(zhuǎn)BA_TS_QUOTASDBA_TAB_PRIVS—可以查詢出哪個用戶賦予了另一個用戶訪問其相關(guān)表、視圖及存儲過程等等權(quán)限與邏輯數(shù)據(jù)結(jié)構(gòu)有關(guān)的數(shù)據(jù)字典DBA_TABLES—所有用戶表DBA_TAB_COLUMNS—所有用戶表字段DBA_VIEWS—所有用戶視圖DBA_INDEXES—所有用戶索引DBA_IND_COLUMNS—所有用戶索引名DBA_CONSTRAINTS—可以查詢出所有用戶表的約束名及約束信息DBA_CONS_COLUMNS—可以查詢出字段名及約束名DBA_SYNONYMS—所有用戶同義詞USER_CATALOG-該視圖保存了用戶所有的表級對象,如:表、視圖、序列,但不包括過程、函數(shù)、包等其它對象USER_ARGUMENTS-該視圖保存了用戶所有過程、函數(shù)的輸入?yún)?shù)名稱及參數(shù)數(shù)據(jù)類型USER_SOURCE-該視圖可以查出用戶所有的過程、函數(shù)、包及觸發(fā)器的程序腳本USER_COL_COMMENTS-該視圖可以查出用戶所有表及視圖的字段注釋USER_TABLES-該視圖可以查詢用戶所有的表USER_OBJECT-該視圖可以查出用戶所有對象信息,如:DATABASELINK、PACKAGE、FUNCTION、PROCEDURE、TRIGGER、VIEW、TABLE、INDEX、TABLEPARTITION、SEQUENCEUSER_CONSTRAINTS-該視圖可以查出用戶所有表的約束名及類型,包括主鍵、索引等USER_CONS_COLUMNS-該視圖可以查出所有用戶表的具體約束信息,包括是對表的哪一個字段進行的約束信息USER_INDEXS-所有表索引對象名V$EVENT_NAME-節(jié)點等待數(shù)。MYSTAT-數(shù)據(jù)庫信息統(tǒng)計V$LOCK及V$SQL-結(jié)論是根據(jù)V$LOCK視圖和V$SQL做出的,V$LOCK視圖可以顯示阻塞的會話,V$SQL會顯示這些阻塞會話試圖執(zhí)行的SQLSYS.V_$SQLAREA-SQL池保存所有執(zhí)行過的SQL。V$PWFILE_USERS-用來查看用戶的權(quán)限。與實例有關(guān)的動態(tài)性能視圖V$FIXED_TABLEV$DATABASEV$DATAFILEV$CONTROLFILE—控制文件信息V$LOGFILE—重做日志文件V$INSTANCE—可以查詢到實例名、機器名、版本號、數(shù)據(jù)啟動時間及狀態(tài)、V$PARAMETER—查詢相關(guān)參數(shù)值,包括共享池大小V$SGA與實例有關(guān)的動態(tài)數(shù)據(jù)字典V$FILESTATV$LATCHV$LIBRARYCACHEV$LOCKV$LOCKED_OBJECTV$PROCESSV$SESSION—會話信息V$ROLLSTAT數(shù)據(jù)庫優(yōu)化數(shù)據(jù)庫性能優(yōu)化數(shù)據(jù)庫性能優(yōu)化內(nèi)容調(diào)整數(shù)據(jù)結(jié)構(gòu)的設(shè)計調(diào)整應(yīng)用程序結(jié)構(gòu)設(shè)計調(diào)整數(shù)據(jù)庫SQL語句調(diào)整服務(wù)器內(nèi)存分配調(diào)整硬盤I/O,這一步是在信息系統(tǒng)開發(fā)之前完成的調(diào)整操作系統(tǒng)參數(shù)不同類型系統(tǒng)優(yōu)化1.在線事務(wù)處理信息系統(tǒng)(OLTP)這種類型的信息系統(tǒng)一般需要有大量的Insert、Update操作。OLTP系統(tǒng)需要保證數(shù)據(jù)庫的并發(fā)性、可靠性和最終用戶的速度,這類系統(tǒng)使用的Oracle數(shù)據(jù)庫需要主要考慮下述因素或參數(shù):數(shù)據(jù)庫回滾段是否足夠是否需要建立Oracle數(shù)據(jù)庫索引、聚集、散列系統(tǒng)全局區(qū)(SGA)大小是否足夠SQL語句是否高效2.數(shù)據(jù)倉庫系統(tǒng)(DataWarehousing)這種信息系統(tǒng)的主要任務(wù)是從Oracle的海量數(shù)據(jù)中進行查詢,得到數(shù)據(jù)之間的某些規(guī)律。數(shù)據(jù)庫管理員需要為這種類型的Oracle數(shù)據(jù)庫著重考慮下述因素或參數(shù):是否采用B*-索引或者bitmap索引是否采用并行SQL查詢以提高查詢效率是否采用PL/SQL函數(shù)編寫存儲過程是否有必要建立并行數(shù)據(jù)庫,來提高數(shù)據(jù)庫的查詢效率SQL語句優(yōu)化SQL語句語句優(yōu)化規(guī)則去掉不必要的大表、全表掃描。不必要的大表、全表掃描會造成不必要的輸入輸出,而且還會拖垮整個數(shù)據(jù)庫;檢查優(yōu)化索引的使用這對于提高查詢速度來說非常重要;檢查子查詢,考慮SQL子查詢是否可以用簡單連接的方式進行重新書寫;調(diào)整PCTFREE和PCTUSED等存儲參數(shù)優(yōu)化插入、更新或者刪除等操作;考慮數(shù)據(jù)庫的優(yōu)化器;考慮數(shù)據(jù)表的全表掃描和在多個CPU的情況下考慮并行查詢。不同類型系統(tǒng)優(yōu)化1.索引的使用盡量使用索引是全表掃描還是索引范圍掃描主要考慮SQL的查詢速度問題。試比較下面兩條SQL語句:①語句A:SELECTdname,deptnoFROMdeptWHEREdeptnoNOTIN(SELECTdeptnoFROMemp);②語句B:SELECTdname,deptnoFROMdeptWHERENOTEXISTS(SELECTdeptnoFROMempWHEREdept.deptno=emp.deptno);索引不起作用的情況存在數(shù)據(jù)類型隱形轉(zhuǎn)換列上有數(shù)學運算使用不等于(<>)運算使用substr字符串函數(shù)‘%’通配符在第一個字符字符串連接(||)函數(shù)的索引例如,日期類型是經(jīng)常用到的,而且在SQL語句中會使用to_char函數(shù)以查詢具體的的范圍日期。如:select*fromstaff_memberwhereTO_CHAR(birth_day,’YYYY’)=’2003’;可以建立基于函數(shù)的索引如:CREATEINDEXInd_emp_birthONstaff_member(to_char((birth_day,’YYYY’SQL中包含groupby子句SQL中包含orderby子句SQL中包含distinct子句SQL中包含minus或union操作3.選擇聯(lián)合查詢的聯(lián)合次序聯(lián)合查詢中如涉及到多個表的字段關(guān)聯(lián)及查詢,其SQL查詢語句聯(lián)合次序的不同寫法,會導致語句對各表具體操作的步驟有不同的次序,所以雖然執(zhí)行結(jié)果相同,但執(zhí)行效率卻不同。4.SQL子查詢的調(diào)整關(guān)聯(lián)子查詢和非關(guān)聯(lián)子查詢非關(guān)聯(lián)查詢的開銷——非關(guān)聯(lián)查詢時子查詢只會執(zhí)行一次,而且結(jié)果是排序好的,并保存在一個Oracle的臨時段中,其中的每一個記錄在返回時都會被父查詢所引用。在子查詢返回大量的記錄的情況下,將這些結(jié)果集排序,以及將臨時數(shù)據(jù)段進行排序會增加大量的系統(tǒng)開銷。關(guān)聯(lián)查詢的開銷——對返回到父查詢的記錄來說,子查詢會每行執(zhí)行一次。因此,必須保證任何可能的時候子查詢用到索引。在子查詢中慎重使用IN或者NOTIN語句,使用where(NOT)exists的效果要好的多。帶IN的關(guān)聯(lián)子查詢是多余的,因為IN子句和子查詢中相關(guān)的操作的功能是一樣的。為非關(guān)聯(lián)子查詢指定EXISTS子句是不適當?shù)?,因為這樣會產(chǎn)生笛卡爾乘積。盡量不要使用NOTIN子句。慎重使用視圖的聯(lián)合查詢,尤其是比較復雜的視圖之間的聯(lián)合查詢。一般對視圖的查詢最好都分解為對數(shù)據(jù)表的直接查詢效果要好一些。可以在參數(shù)文件中設(shè)置SHARED_POOL_RESERVED_SIZE參數(shù),這個參數(shù)在SGA共享池中保留一個連續(xù)的內(nèi)存空間,連續(xù)的內(nèi)存空間有益于存放大的SQL程序包。ORACLE運行環(huán)境優(yōu)化內(nèi)存結(jié)構(gòu)的調(diào)整內(nèi)存參數(shù)的調(diào)整主要是指Oracle數(shù)據(jù)庫的系統(tǒng)全局區(qū)(SGA)的調(diào)整。SGA主要由三部分構(gòu)成:共享池、數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)。1.共享池共享池由兩部分構(gòu)成:共享SQL區(qū)和數(shù)據(jù)字典緩沖區(qū)。共享SQL區(qū)是存放用戶SQL命令的區(qū)域,數(shù)據(jù)字典緩沖區(qū)存放數(shù)據(jù)庫運行的動態(tài)信息。(1)數(shù)據(jù)庫管理員通過執(zhí)行下述語句,來查看共享SQL區(qū)的使用率。select(sum(pins-reloads))/sum(pins)"LibCache"fromv$librarycache;共享SQL區(qū)的使用率應(yīng)該在90%以上,否則需要增加共享池的大小。(2)數(shù)據(jù)庫管理員可以執(zhí)行下述語句,查看數(shù)據(jù)字典緩沖區(qū)的使用率。select(sum(-getmisses-usage-fixed))/sum(gets)"RowCache"fromv$rowcache;數(shù)據(jù)字典緩沖區(qū)的使用率也應(yīng)該在90%以上,否則需要增加共享池的大小。2.數(shù)據(jù)緩沖區(qū)數(shù)據(jù)庫管理員可以通過下述語句,來查看數(shù)據(jù)庫數(shù)據(jù)緩沖區(qū)的使用情況:SELECTname,valueFROMv$sysstatWHEREnameIN('dbblockgets','consistentgets','physicalreads');根據(jù)查詢出來的結(jié)果可以計算出數(shù)據(jù)緩沖區(qū)的使用命中率:數(shù)據(jù)緩沖區(qū)的使用命中率=1–(physicalreads/(dbblockgets+consistentgets)),這個命中率應(yīng)該在90%以上,否則需要增加數(shù)據(jù)緩沖區(qū)的大小。3.日志緩沖區(qū)數(shù)據(jù)庫管理員可以通過執(zhí)行下述語句,查看日志緩沖區(qū)的使用情況。selectname,valuefromv$sysstatwherenamein('redoentries','redologspacerequests');根據(jù)查詢出的結(jié)果可以計算出日志緩沖區(qū)的申請失敗率:申請失敗率=requests/entries申請失敗率應(yīng)該接近于0,否則說明日志緩沖區(qū)開設(shè)太小,需要增加Oracle數(shù)據(jù)庫的日志緩沖區(qū)。暫且提升性能語句:altersystemflushshared_pool;物理IO的調(diào)整在磁盤上建立數(shù)據(jù)文件前首先運行磁盤碎片整理程序,為了安全地整理磁盤碎片,需關(guān)閉打開數(shù)據(jù)文件的實例,并且停止服務(wù)。如果有足夠的連續(xù)磁盤空間建立數(shù)據(jù)文件,那么就很容易避免數(shù)據(jù)文件產(chǎn)生碎片。不要使用磁盤壓縮,Oracle數(shù)據(jù)文件不支持磁盤壓縮。不要使用磁盤加密,加密象磁盤壓縮一樣增加了一個處理層,降低磁盤讀寫速度。如果擔心自己的數(shù)據(jù)可能泄密,可以使用dbms_obfuscation包和labelsecurity選擇性地加密數(shù)據(jù)的敏感部分。使用RAID,RAID的使用應(yīng)注意:選擇硬件RAID超過軟件RAID;日志文件不要放在RAID5卷上,因為RAID5讀性能高而寫性能差;把日志文件和歸檔日志放在與控制文件和數(shù)據(jù)文件分離的磁盤控制系統(tǒng)上。分離頁面交換文件到多個磁盤物理卷,跨越至少兩個磁盤建立兩個頁面文件。可以建立四個頁面文件并在性能上受益,確保所有頁面文件的大小之和至少是物理內(nèi)存的兩倍。CPU的優(yōu)化調(diào)整1.查看CPU的使用情況使用操作命令可以看到CPU的使用情況,一般UNIX操作系統(tǒng)的服務(wù)器,可以使用sar–u命令查看CPU的使用率;NT操作系統(tǒng)的服務(wù)器,可以使用NT的性能管理器來查看CPU的使用率。出現(xiàn)CPU資源不足的情況是很多的:SQL語句的重解析、低效率的SQL語句、鎖沖突都會引起CPU資源不足。2.查看SQL語句的解析情況(1)數(shù)據(jù)庫管理員可以執(zhí)行下述語句來查看SQL語句的解析情況:SELECT*FROMV$SYSSTATWHERElower(NAME)IN('parsetimecpu','parsetimeelapsed','parsecount(hard)');這里:①parse_time_cpu:是系統(tǒng)服務(wù)時間;②parse_time_elapsed:是響應(yīng)時間。而用戶等待時間為:waite_time=parse_time_elapsed–parse_time_cpu,由此可以得到用戶SQL語句平均解析等待時間:用戶SQL語句平均解析等待時間=waite_time/parse_count(2)數(shù)據(jù)庫管理員還可以通過下述語句,查看低效率的SQL語句:SELECTUFFER_GETS,EXECUTIONS,SQL_TEXTFROMV$SQLAREA;優(yōu)化這些低效率的SQL語句也有助于提高CPU的利用率。3.查看Oracle數(shù)據(jù)庫的沖突情況數(shù)據(jù)庫管理員可以通過v$system_event數(shù)據(jù)字典中的“l(fā)atchfree”統(tǒng)計項查看Oracle數(shù)據(jù)庫的沖突情況,如果沒有沖突的話,latchfree查詢出來沒有結(jié)果。如果沖突太大的話,數(shù)據(jù)庫管理員可以降低spin_count參數(shù)值,來消除高的CPU使用率。4.CPU的優(yōu)化調(diào)整方法一些優(yōu)化CPU使用和配置的具體方法有:取消屏幕保護把系統(tǒng)配置為應(yīng)用服務(wù)器監(jiān)視系統(tǒng)中消耗中斷的硬件保持最小的安全審計記錄在專用服務(wù)器上運行Oracle禁止非必須的服務(wù)網(wǎng)絡(luò)配置優(yōu)化網(wǎng)絡(luò)配置是性能調(diào)整的一項很重要的內(nèi)容,而且很容易隱藏性能瓶頸。配置網(wǎng)卡使用最快速度和有效模式刪除不需要的網(wǎng)絡(luò)協(xié)議優(yōu)化網(wǎng)絡(luò)協(xié)議綁定順序為Oracle禁止或優(yōu)化文件共享ORACLE碎片整理1.碎片是如何產(chǎn)生的當生成一個數(shù)據(jù)庫時,它會分成稱為表空間(Tablespace)的多個邏輯段(Segment),如系統(tǒng)(System)表空間,臨時(Temporary)表空間等。一個表空間可以包含多個數(shù)據(jù)范圍(Extent)和一個或多個自由范圍塊,即自由空間(FreeSpace)。表空間、段、范圍、自由空間的邏輯關(guān)系如下:當表空間中生成一個段時,將從表空間有效自由空間中為這個段的初始范圍分配空間。在這些初始范圍充滿數(shù)據(jù)時,段會請求增加另一個范圍。這樣的擴展過程會一直繼續(xù)下去,直到達到最大的范圍值,或者在表空間中已經(jīng)沒有自由空間用于下一個范圍。最理想的狀態(tài)就是一個段的數(shù)據(jù)可被存在單一的一個范圍中。這樣,所有的數(shù)據(jù)存儲時靠近段內(nèi)其它數(shù)據(jù),并且尋找數(shù)據(jù)可少用一些指針。但是一個段包含多個范圍的情況是大量存在的,沒有任何措施可以保證這些范圍是相鄰存儲的,當要滿足一個空間要求時,數(shù)據(jù)庫不再合并相鄰的自由范圍(除非別無選擇),而是尋找表空間中最大的自由范圍來使用。這樣將逐漸形成越來越多的離散的、分隔的、較小的自由空間,即碎片。2.碎片對系統(tǒng)的影響導致系統(tǒng)性能減弱浪費大量的表空間3.自由范圍的碎片計算用fsfi——freespacefragmentationindex(自由空間碎片索引)值來直觀體現(xiàn):fsfi=100*sqrt(max(extent)/sum(extents))*1/sqrt(sqrt(count(extents)))4.自由范圍的碎片整理可以將表空間的缺省存儲參數(shù)pctincrease改為非0。一般將其設(shè)為1,如:altertablespacetempdefaultstorage(pctincrease1);這樣smon便會將自由范圍自動合并,達到碎片整理的目的。也可以采用如下語句,通過手工合并自由范圍來達到碎片整理的目的:altertablespacetempcoalesce;5.段的碎片整理段由范圍組成,在有些情況下,有必要對段的碎片進行整理。要查看段的有關(guān)信息,可查看數(shù)據(jù)字典DBA_segments,范圍的信息可查看數(shù)據(jù)字典DBA_extents。如果段的碎片過多,將其數(shù)據(jù)壓縮到一個范圍的最簡單方法便是用正確的存儲參數(shù)將這個段重建,然后將舊表中的數(shù)據(jù)插入到新表,同時刪除舊表。這個過程可以用import/export(輸入/輸出)工具來完成。export()命令有一個(壓縮)標志,這個標志在讀表時會引發(fā)export確定該表所分配的物理空間量,它會向輸出轉(zhuǎn)儲文件寫入一個新的初始化存儲參數(shù),等于全部所分配空間。若這個表關(guān)閉,則使用import()工具重新生成。這樣,它的數(shù)據(jù)會放入一個新的、較大的初始段中。例如:expuser/passwordfile=exp.dmpcompress=ygrants=yindexes=ytables=(table1,table2);若輸出成功,則從庫中刪除已輸出的表,然后從輸出轉(zhuǎn)儲文件中輸入表:impuser/passwordfile=exp.dmpcommit=ybuffer=64000full=y;這種方法可用于整個數(shù)據(jù)庫。另外,應(yīng)該定期shutdowndatabase,從而清理momery碎片。oracle系統(tǒng)參數(shù)調(diào)整1.SharedPoolandLibraryCachePerformanceTuning(共享池和LibraryCache)共享池調(diào)整的技巧主要有:刷共享池刷(Flush)共享池可以使小塊的內(nèi)存合并為大塊的內(nèi)存。當共享池的碎片過多時,能夠暫時恢復性能。刷共享池可以使用語句:altersystemflushshared_pool;綁定變量2.BufferCachePerformanceTuning(數(shù)據(jù)庫緩存調(diào)整)從緩存調(diào)整的角度看,應(yīng)力求避免以下的問題:“緩存的最近最少使用(LRN)鏈”(cachebuffersLRUchain)的加鎖競爭;“平均寫隊列”(AverageWriteQueue)長度過大;過多時間花在等待“寫完畢等待上”(writecompletewaits);過多時間花在等待“緩沖釋放等待”上(freebufferwaits)。3.LatchContention(加鎖或插銷競爭)插銷加鎖是SGA中保護共享數(shù)據(jù)結(jié)構(gòu)的低層的串行化機制。插銷latch是一類可以非??斓墨@得和釋放的鎖。插銷鎖的實現(xiàn)是依賴于操作系統(tǒng)的,尤其在關(guān)于一個進程是否會等待一個鎖,和等多久方面。有如下的鎖(插銷)需要調(diào)整:RedoCopy/AllocationLatch:重寫日志的復制/分配插銷SharedPoolLatch:共享池的插銷LibraryCacheLatch:LibraryCache插銷4.RedoLogBufferPerformanceTuning(重寫日志緩沖的調(diào)整)LGWR將重寫日志緩沖中的重寫項寫到重寫日志文件中。一旦LGWR將這些項復制到重寫日志文件中,用戶進程就可以重寫這些項。統(tǒng)計項目“redologspacerequests”反映了用戶進程等待重寫日志緩沖中空間的時間的數(shù)字。設(shè)置重寫日志大小的提示:“redologspacerequests”的值應(yīng)該接近0。設(shè)定合適的重寫日志的大小,建議每15-30分鐘進行一次重寫日志的切換。5.QueryPerformanceTuning(查詢效率的調(diào)整),如果查詢運行得很慢,請考慮以下這些方面:希望這個查詢運行的有多快以及有理由這樣要求嗎優(yōu)化模式OPTIMIZER_MODE設(shè)為何值查詢涉及的索引都是有效的嗎在數(shù)據(jù)庫中有沒有其他的長時間運行的查詢(大查詢)表和索引上有統(tǒng)計信息嗎統(tǒng)計信息是被計算出來的還是被估計出來的對于查詢的性能調(diào)整有兩個主要的調(diào)試工具:TKPROF和AUTOTRACE。6.TemporaryTablespacePerformanceTuning(臨時表空間的調(diào)整)臨時表空間的調(diào)整的技巧如下:如果即使在穩(wěn)定的狀態(tài)下也存在很多的排序擴展鎖(SortExtentPoollatch)的競爭,應(yīng)該通過修改臨時表空間的DEFAULTSTORAGE子句的NEXT值來增大擴展塊的大小。如果存在很多的排序擴展鎖(SortExtentPoollatch)的競爭并且這種等待是由于過多的并發(fā)的排序造成的,應(yīng)該增大SORT_AREA_SIZE參數(shù)的大小,以使更多的排序能保存在內(nèi)存中。建議讓擴展塊的大小和SORT_AREA_SIZE參數(shù)相同。查詢中索引無法使用查詢原因步驟:1、確定數(shù)據(jù)庫運行在哪一種優(yōu)化模式下,查看相關(guān)參數(shù)OPTIMIZER_MODE是CHOOSE還是RULE,也可以用相關(guān)的語句查詢:SHOWPARAMETEROPTIMIZER_MODE,同樣看返回的值是CHOOSE還是RULE,如果是CHOOSE則表示對已分析的表選擇CBO,對未分析的表選擇RBO,如果是RULE,不管是對已經(jīng)過分析的表還是對未經(jīng)過分析的表,都選擇RBO,除了使用hint強制。[RBO和CBO功能上差為多,不過目前ORACLE公司已經(jīng)不再發(fā)展該技術(shù),CBO需要對表和相關(guān)索引進行分析才能得到相關(guān)CBO信息,兩者對程序員而言,CBO更適合];2、WHERE子句是否合理不明確正確使用索引列或組合索引首列;3、查看運用了哪一種類型的聯(lián)接方式,ORACLE共有三種表聯(lián)接方式分別是SORTMEGERJOIN(SMJ)、HASHJOIN(HJ)及NESTEDLOOPJOIN(NL),在兩張表聯(lián)接,且內(nèi)表目標列上建有索引時,只有NL才能有效的使用索引,SMJ即使相關(guān)列上建有索引,最多只能因索引的存在,避免數(shù)據(jù)排序過程,HJ必須做HASH運算,索引的存在幾乎對查詢速度沒有影響;4、看連接順序是否允許使用相關(guān)索引。假設(shè)表emp的deptno列上有索引,表dept的列deptno上無索引,WHERE語句有emp.deptno=dept.deptno條件。在做NL連接時,emp做為外表,先被訪問,由于連接機制原因,外表的數(shù)據(jù)訪問方式是全表掃描,emp.deptno上的索引顯然是用不上,最多在其上做索引全掃描或索引快速全掃描。5、是否用到系統(tǒng)數(shù)據(jù)字典表或視圖。由于系統(tǒng)數(shù)據(jù)字典表都未被分析過,可能導致極差的“執(zhí)行計劃”。但是不要擅自對數(shù)據(jù)字典表做分析,否則可能導致死鎖,或系統(tǒng)性能下降;6、索引列是否函數(shù)的參數(shù)。如是,索引在查詢時用不上;7、是否存在潛在的數(shù)據(jù)類型轉(zhuǎn)換。如將字符型數(shù)據(jù)與數(shù)值型數(shù)據(jù)比較,Oracle會自動將字符型用to_number()函數(shù)進行轉(zhuǎn)換,從而導致第六種現(xiàn)象的發(fā)生;8、是否為表和相關(guān)的索引搜集足夠的統(tǒng)計數(shù)據(jù)。對數(shù)據(jù)經(jīng)常有增、刪、改的表最好定期對表和索引進行分析,可用SQL語句“analyzetablexxxxcomputestatisticsforallindexes;"。Oracle掌握了充分反映實際的統(tǒng)計數(shù)據(jù),才有可能做出正確的選擇;9、索引列的選擇性不高,我們假設(shè)典型情況,有表emp,共有一百萬行數(shù)據(jù),但其中的emp.deptno列,數(shù)據(jù)只有4種不同的值,如10、20、30、40。雖然emp數(shù)據(jù)行有很多,ORACLE缺省認定表中列的值是在所有數(shù)據(jù)行均勻分布的,也就是說每種deptno值各有25萬數(shù)據(jù)行與之對應(yīng)。假設(shè)SQL搜索條件DEPTNO=10,利用deptno列上的索引進行數(shù)據(jù)搜索效率,往往不比全表掃描的高,Oracle理所當然對索引“視而不見”,認為該索引的選擇性不高;但我們考慮另一種情況,如果一百萬數(shù)據(jù)行實際不是在4種deptno值間平均分配,其中有99萬行對應(yīng)著值10,5000行對應(yīng)值20,3000行對應(yīng)值30,2000行對應(yīng)值40。在這種數(shù)據(jù)分布圖案中對除值為10外的其它deptno值搜索時,毫無疑問,如果索引能被應(yīng)用,那么效率會高出很多。我們可以采用對該索引列進行單獨分析,或用analyze語句對該列建立直方圖,對該列搜集足夠的統(tǒng)計數(shù)據(jù),使Oracle在搜索選擇性較高的值能用上索引;10、索引列值是否可為空(NULL)。如果索引列值可以是空值,在SQL語句中那些需要返回NULL值的操作,將不會用到索引,如COUNT(*),而是用全表掃描。這是因為索引中存儲值不能為全空;11、看是否有用到并行查詢(PQO)。并行查詢將不會用到索引;12、看PL/SQL語句中是否有用到bind變量。由于數(shù)據(jù)庫不知道bind變量具體是什么值,在做非相等連接時,如“<”,“>”,“l(fā)ike”等。Oracle將引用缺省值,在某些情況下會對執(zhí)行計劃造成影響。實例解析不同實例之間的實例名可以相同,但是實例ID是不相同的,默認情況下,實例名就等于實例ID!實例ID標示進程,而實例名則標示實例,兩者可以設(shè)置成不同的值。具體見附帶文檔。數(shù)據(jù)庫監(jiān)聽操作對數(shù)據(jù)庫所做的dml語句進行監(jiān)聽的方法createorreplacetriggerddl_userbeforecreateoralterordropondatabasedeclarestr_ipvarchar2(300);str_loguservarchar2(20);str_operatevarchar2(50);msg_excexception;obj_msgvarchar2(300);beginstr_loguser:=ora_login_user;--okstr_operate:=ora_sysevent;--okselectsys_context('userenv','ip_address')intostr_ipfromdual;ifstr_operate=upper('drop')theniflower(ora_dict_obj_name)in('t_ddl_user','ddl_user','ddl_user')/*orora_dict_obj_owner||'.'||ora_dict_obj_name='sys.ddl_user'*/theniflower(ora_dict_obj_type)='table'thenobj_msg:='表:';elsiflower(ora_dict_obj_type)='procedure'thenobj_msg:='過程:';elsiflower(ora_dict_obj_type)='function'thenobj_msg:='函數(shù):';elsiflower(ora_dict_obj_type)='view'thenobj_msg:='視圖:';elsiflower(ora_dict_obj_type)='trigger'thenobj_msg:='觸發(fā)器:';endif;raise_application_error('-20001',obj_msg||ora_dict_obj_owner||'.'||ora_dict_obj_name||'不能被刪除'||chr(10)||'此次操作已被記錄!');raisemsg_exc;elseraisemsg_exc;endif;elseraisemsg_exc;endif;exceptionwhenmsg_exctheninsertintot_ddl_user(usermsg,opermsg)values('user'||str_loguser||'loginaddressis'||str_ip,'所做的操作是:'||str_operate||''||ora_dict_obj_owner||'.'||ora_dict_obj_name||chr(10)||'操作時間:'||to_char(sys

溫馨提示

  • 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

提交評論