sql >> データベース >  >> RDS >> Oracle

管理および監視用のOracleDatabase用の27個のoracledbaスクリプト

    多くの場合、パフォーマンス上の理由からOracleデータベースセッションを監視し、ロックを確認し、データファイルの場所を取得し、ファイルをやり直し、db_linksに関する情報を取得する必要があります。ここでは、管理および監視を目的としたOracleデータベースの上位のOracleデータベーススクリプトを示します。

    ログインしているセッションのsidを見つけるためのスクリプト

     v $ mystatからdistinct(sid)を選択します; 

    すべてのアクティブなセッションを表示するスクリプト

     select username、osuser、sid、serial#、program、sql_hash_value、module from v $ session where username is not nulland status ='ACTIVE' and module null not null; 

    ウェイターを見るためのスクリプト

     set linesize1000columnwaiting_session見出し「WAITING|SESSION」列holding_session見出し「HOLDING|SESSION」columnlock_typeformat a15column mode_held format a15column mode_requested format a15selectwaiting_session、holding_session、lock_type、mode_held、mode_requested、lock_id1、lock_id2fromdba 

    データベース内のアクティブなトランザクションのスクリプト

    colRBS形式a15trunccolSID形式9999colUSER形式a15trunccolコマンド形式a60trunccolステータス形式a8truncselectr.name "RBS"、s.sid、s.serial#、s.username "USER"、t.status、 t.cr_get、t.phy_io、t.used_ublk、t.noundo、substr(s.program、1、78) "COMMAND" from v $ session s、v $ transaction t、v $ rollname rwhere t.addr=s。 taddrand t.xidusn =r.usnorder by t.cr_get、t.phy_io / 

    長時間実行されるクエリを監視するためのスクリプト

     set linesize 1000selectOPNAME、sid、SOFAR / TOTALWORK * 100、to_char(start_time、'dd-mon-yy hh:mi')started、elapsed_seconds / 60、time_remaining / 60fromv $ session_longopswheresid =&sid 

    すべてのロックオブジェクトを表示するスクリプト

     set term on; set lines 130; column sid_ser format a12 heading'session、| serial#'; column username format a12 heading'os user / | db user'; column process format a9 heading'os | process'; column spid format a7 heading'trace | number'; column owner_object format a35 heading'owner.object'; columnlocked_mode format a13 heading'locked | mode'; column status format a8 heading'status'; selectsubstr(to_char(l.session_id)| |'、' || to_char(s.serial#)、1,12)sid_ser、substr(l.os_user_name ||'/' || l.oracle_username、1,12)username、l.process、p.spid、 substr(o.owner||'。'||o.object_name、1,35)owner_object、decode(l.locked_mode、1、'No Lock'、2、'Row Share'、3、'Row Exclusive'、4 、'Share'、5、'Share Row Excl'、6、'Exclusive'、null)locked_mode、substr(s.status、1,8)statusfromv $ locked_object l、all_objects o、v $ session s、v $ process pwherel .object_id =o.object_idand l.session_id =s.sidand s.paddr =p.addrand s.status!='KILLED' / 

    待機イベントを確認するためのスクリプト

     set linesize 1000column sid format 999column username format a15wrappedcolumn spid format a8column event format a30wrappedcolumn osuser format a12wrappedcolumn machine format a25wrappedcolumn program format a30wrappedselect sw.sid sid、p.spid spid、s.username username、s.osuser osuser、sw.event event、s.machine machine、s.program programfrom v $ session_wait sw、v $ session s、v $ process pwhere s.paddr =p.addrand event not in('pipe get'、'client message' )およびsw.sid =s.sid / 

    特定のセッション待機を確認するためのスクリプト

     select sid、seq#、wait_time、event、seconds_in_wait、state from v $ session_wait where sid in(&sid); 

    そのオブジェクトにアクセスするすべてのユーザーを確認するためのスクリプト

     column object format a30column owner format a10select * from v $ access where object ='&object_name' / 

    スクリプトは、特定のオブジェクトをロックしているユーザーセッションに関する情報を提供します

     set linesize 1000column program format a15column object format a15select substr(username ||'(' || se0.sid ||')'、1,5) "User Session"、substr(owner、1,5) "Object所有者"、substr(object、1,15)" Object "、se0.sid、substr(serial#、1,6)" Serial# "、substr(program、1,15)" Program "、logon_time"ログオン時間 " 、process "Unix Process" from v $ access ac、v $ session se0where ac.sid =se0.sidand Object ='&PACKAGE' order by login_time、 "Object Owner"、 "Object" / 

    ライブラリキャッシュ内のステートメントのOracleでのExplainPlanを確認するためのスクリプト

     set linesize 9999column QUERY format a999set pages 250set head offset verify offselect id、lpad(''、2 *(depth-1))||深さ||'。' || nvl(position、0)|| '' ||操作|| '' ||オプション|| '' || object_name || ' '||'コスト='|| to_char(コスト)|| ' '||オプティマイザ"QUERY"from v $ sql_planwhere hash_value =&sql_hash_valueorder by child_number、id / 

    サーバーの場所を見つけるためのスクリプト

     select nvl(username、'ORACLE SHADOW PROCESS')、machine fromv $ session where username is nulland rownum <2 / 

    上位の並べ替えセグメントの使用状況を確認するためのスクリプト

     col sid format 999999col spid format a6coltablespace format a10col username format a25col noexts format 9999 head EXTScol proginfo format a25 trunccol mbused format 999,999.90col status format a1 truncset verify offselect * from(select s.sid、s.status、b.spid 、s.sql_hash_value sesshash、u.SQLHASH sorthash、s.username、u.tablespace、sum(u.blocks * p.value / 1024/1024)mbused、sum(u.extents)noexts、u.segtype、s.module ||'-' || s.program proginfofrom v $ sort_usage u、v $ session s、v $ parameter p、v $ process bwhere u.session_addr =s.saddrand p.name ='db_block_size' and b.addr =s .paddrgroup by s.sid、s.status、b.spid、s.sql_hash_value、u.sqlhash、s.username、u.tablespace、u.segtype、s.module ||'-' || s.programorder by 8 desc、4)where rownum <11; 

    SQLステートメントのテーブルについて最後に分析されたものをチェックするスクリプト

     set lin 1000set verify offcol owner format a15col object_name format a25col object_type format a12col "LAST ANALYZED" format a13 select do.OWNER、do.OBJECT_NAME、OBJECT_TYPE、decode(OBJECT_TYPE、'TABLE'、(Select LAST_ANALYZED from dba_tables where owner =do.owner and TABLE_NAME =do.object_name)、'INDEX'、(dba_indexesからLAST_ANALYZEDを選択します。owner=do.ownerおよびINDEX_NAME=do.object_name)、'UNKNOWN') "LAST ANALYZED"、STATUSfrom DBA_OBJECTS dowhere OBJECT_TYPE in( ' TABLE'、' INDEX')and(OWNER、OBJECT_NAME)in(select OBJECT_OWNER、OBJECT_NAME from V $ SQL_PLAN where HASH_VALUE =&1)/ 

    ライブラリキャッシュのロックと固定を確認するには

     select / * + all_rows * / w1.sid waiting_session、h1.sid hold_session、w.kgllktype lock_or_pin、w.kgllkhdl address、decode(h.kgllkmod、0、'None'、1、'Null'、2 'Share'、3、'Exclusive'、'Unknown')mode_held、decode(w.kgllkreq、0、'None'、1、'Null'、2、'Share'、3、'Exclusive'、'Unknown') mode_requestedfrom dba_kgllock w、dba_kgllock h、v $ session w1、v $ session h1where(((h.kgllkmod!=0)and(h.kgllkmod!=1)and((h.kgllkreq =0)or(h.kgllkreq =1)))and(((w.kgllkmod =0)or(w.kgllkmod =1))and((w.kgllkreq!=0)and(w.kgllkreq!=1))))and w.kgllktype =h.kgllktypeand w.kgllkhdl =h.kgllkhdland w.kgllkuse =w1.saddrand h.kgllkuse =h1.saddr / 

    制御ファイルの場所を確認するには

     col name format a60 heading "Control Files" select name from sys.v_ $ controlfile / 

    REDOログの場所を確認するには

     col Grp format 9999col member format a50 heading "Online REDO Logs" col File#format 9999col name format a50 heading "Online REDO Logs" break on Grpselect group#、memberfrom sys.v_ $ logfile / 

    データファイルの場所を確認するには

     col Tspace format a25col status format a3 heading Stacol Id format 9999col Mbyte format 999999999col name format a50 heading "Database Data Files" col Reads format 99,999,999col Writes format 99,999,999break on reportcompute sum label'Total(MB)' of Mbyte on reportselect F.file_id Id、F.file_name name、F.bytes /(1024 * 1024)Mbyte、decode(F.status、'AVAILABLE'、'OK'、F.status)status、F.tablespace_name Tspacefrom sys.dba_data_files Forder by Tablet_name; 

    表スペースの自動拡張のオン/オフの確認:

     select substr(file_name、1,50)、AUTOEXTENSIBLE from dba_data_files(OR)SQL> select Tablespace_name、AUTOEXTENSIBLE from dba_data_files; 

    アンダースコアパラメータを確認する方法

     SELECT X.KSPPINM NAME、DECODE(BITAND(KSPPIFLG / 256、1)、1、'TRUE'、'FALSE')SESMOD、DECODE(BITAND(KSPPIFLG / 65536、3)、1、'IMMEDIATE'、2 、'DEFERRED'、3、'IMMEDIATE'、'FALSE')SYSMOD、KSPPDESCDESCRIPTIONFROM SYS.X_ $ KSPPI X WHERE X.INST_ID =USERENV('INSTANCE')ANDTRANSLATE(KSPPINM、'_'、'#')LIKE ' #%'ORDER BY 1; 

    DBAリンクを表示する方法

     set linesize 128 pages 1000col owner format a15col db_link format a15col username format a20col host format a15col name format a30Prompt Database Links:select owner、db_link、username、host from dba_db_links order by owner、db_link、username / Prompt Synonym Links:select Distinct所有者、db_linkがnullではないdba_synonymsからのdb_link /プロンプトスナップショットリンク:selectowner、name、replace(master_link、'@'、'')db_link from dba_snapshots where master_link is not null / 

    file-idとblockを使用したDBA_extentsによるセグメントの識別

     SELECT segment_name、segment_typeFROM dba_extentsWHERE file_id = AND  BETWEEN block_id and block_id +blocks-1; 

    DBMS_SCHEDULERから実行されているジョブの一覧表示

     SET HEADING ONSET LINESIZE 300SET PAGESIZE 60COLUMN owner FORMAT A20SELECT owner、job_name、running_instance、elapsed_timeFROM dba_scheduler_running_jobsORDER BY owner、job_name / 

    DBMS_SCHEDULERジョブ情報の一覧表示

     SET HEADING ONSET LINESIZE 300SET PAGESIZE 60COLUMN owner FORMAT A20COLUMN next_run_date FORMAT A35SELECT owner、job_name、enabled、job_class、next_run_dateFROM dba_scheduler_jobsORDER BY owner、job_name / 

    AWRからSQL_IDの履歴プランを取得する方法

     SET PAGESIZE 60SET LINESIZE 300SELECT * FROM TABLE(dbms_xplan.display_awr('&SQL_ID'))/ 

    データベースの待機分析を行う方法

     select event、state、count(*)from v $ session_wait group by event、state order by 3 desc; 

    高バッファを見つける方法はSQLを取得します

     select * from(SELECT address、hash_value、buffer_gets、executions、buffer_gets / executes "Gets / Exec"、sql_textFROM v $ sqlareaWHERE buffer_gets> 500000 andexecutions> 0ORDER BY 3 desc)where rownum <20; 

    監視目的のOracleデータベース用のOracleDBAスクリプトのこのリストは完全ではありません。監視用のスクリプトは他にもたくさんあります。今後の投稿で紹介します

    また読む
    Oracleでのハッシュ結合:Oracleでのハッシュ結合の詳細については、この投稿を確認してください。Oracleでのネストされたループ結合との違い
    Oracleテーブルロック:Oracle Enqueue、行レベルとDDL、テーブルロック、オラクルのロックのしくみ、オラクルのウェイターとブロッカーを見つけるための便利なクエリ
    v $ active_session_history:アクティブセッション履歴、構成方法、ASHを使用したパフォーマンスのボトルネックの見つけ方、ASHレポートの生成、 ASHクエリ
    https://en.wikipedia.org/wiki/Oracle_Database


    1. JavaScriptはMySQLと接続できますか?

    2. MariaDBでのMAKEDATE()のしくみ

    3. アイドル状態のPostgreSQL接続のタイムアウトはありますか?

    4. csvをoracleでテーブルに変換する方法