乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      DBA常用腳本

       168一路發(fā) 2011-03-22

      DBA常用的腳本很多。每個(gè)人使用的可能不盡相同。下面提供一些供大家使用
      DBA常用SQL語句系列,歡迎補(bǔ)充,在不斷更新中

      一、數(shù)據(jù)庫構(gòu)架體系
       
      1、表空間的監(jiān)控是一個(gè)重要的任務(wù),我們必須時(shí)刻關(guān)心表空間的設(shè)置,是否滿足現(xiàn)在應(yīng)用的需求,以下的語句可以查詢到表空間的詳細(xì)信息


      SELECT TABLESPACE_NAME,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,
                MAX_EXTENTS,PCT_INCREASE,MIN_EXTLEN,STATUS,
                CONTENTS,LOGGING,
                EXTENT_MANAGEMENT,  -- Columns not available in v8.0.x
                ALLOCATION_TYPE,    -- Remove these columns if running 
                PLUGGED_IN,          -- against a v8.0.x database
                SEGMENT_SPACE_MANAGEMENT --use only in v9.2.x or later
      FROM     DBA_TABLESPACES
      ORDER BY TABLESPACE_NAME;

       


      2、對(duì)于某些數(shù)據(jù)文件沒有設(shè)置為自動(dòng)擴(kuò)展的表空間來說,如果表空間滿了,就將意味著數(shù)據(jù)庫可能會(huì)因?yàn)闆]有空間而停止下來。監(jiān)控表空間,最主要的就是監(jiān)控剩余空間的大小或者是使用率。以下是監(jiān)控表空間使用率與剩余空間大小的語句


      SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,SPACE-NVL(FREE_SPACE,0) "USED_SPACE(M)",
      ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)",FREE_SPACE "FREE_SPACE(M)"
      FROM 
      (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
      FROM DBA_DATA_FILES
      GROUP BY TABLESPACE_NAME) D,
      (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE
      FROM DBA_FREE_SPACE
      GROUP BY TABLESPACE_NAME) F
      WHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
      UNION ALL  --if have tempfile 
      SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS, 
      USED_SPACE "USED_SPACE(M)",ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",
      NVL(FREE_SPACE,0) "FREE_SPACE(M)"
      FROM 
      (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
      FROM DBA_TEMP_FILES
      GROUP BY TABLESPACE_NAME) D,
      (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE,
      ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE
      FROM V$TEMP_SPACE_HEADER
      GROUP BY TABLESPACE_NAME) F
      WHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)

       

      3、除了監(jiān)控表空間的剩余空間,有時(shí)候我們也有必要了解一下該表空間是否具有自動(dòng)擴(kuò)展空間的能力,雖然我們建議在生產(chǎn)系統(tǒng)中預(yù)先分配空間。以下語句將完成這一功能


      SELECT T.TABLESPACE_NAME,D.FILE_NAME,
              D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS
      FROM DBA_TABLESPACES T,
            DBA_DATA_FILES  D
      WHERE T. TABLESPACE_NAME =D. TABLESPACE_NAME
      ORDER BY TABLESPACE_NAME,FILE_NAME

       

      4、我相信使用字典管理的表空間的也不少吧,因?yàn)樽值涔芾淼谋砜臻g中,每個(gè)表的下一個(gè)區(qū)間的大小是不可以預(yù)料的,所以我們必須監(jiān)控那些表在字典管理的表空間中的下一個(gè)區(qū)間的分配將會(huì)引起性能問題或由于是非擴(kuò)展的表空間而導(dǎo)致系統(tǒng)停止。以下語句檢查那些表的擴(kuò)展將引起表空間的擴(kuò)展。


      SELECT A.OWNER,A.TABLE_NAME,A.NEXT_EXTENT,A.TABLESPACE_NAME
      FROM ALL_TABLES A,
      (SELECT TABLESPACE_NAME, MAX(BYTES) BIG_CHUNK
      FROM DBA_FREE_SPACE
      GROUP BY TABLESPACE_NAME) F
      WHERE F.TABLESPACE_NAME = A.TABLESPACE_NAME
      AND A.NEXT_EXTENT > F.BIG_CHUNK

       

      5、段的占用空間與區(qū)間數(shù)也是很需要注意的一個(gè)問題,如果一個(gè)段的占用空間太大,或者跨越太多的區(qū)間(在字典管理的表空間中,將有嚴(yán)重的性能影響),如果段沒有可以再分配的區(qū)間,將導(dǎo)致數(shù)據(jù)庫錯(cuò)誤。所以,段的大小與區(qū)間監(jiān)控也是一個(gè)很重要的工作


      SELECT S.OWNER,S.SEGMENT_NAME,S.SEGMENT_TYPE,S.PARTITION_NAME,
      ROUND(BYTES/(1024*1024),2) "USED_SPACE(M)",
      EXTENTS USED_EXTENTS,S.MAX_EXTENTS,S.BLOCKS ALLOCATED_BLOCKS,
      S.BLOCKS USED_BOLCKS,S.PCT_INCREASE,S.NEXT_EXTENT/1024 "NEXT_EXTENT(K)"
      FROM DBA_SEGMENTS S
      WHERE S.OWNER NOT IN ('SYS','SYSTEM')
      ORDER BY Used_Extents DESC

      6、對(duì)象的空間分配與空間利用情況,除了從各個(gè)方面的分析,如分析表,查詢r(jià)owid等方法外,其實(shí)oracle提供了一個(gè)查詢空間的包dbms_space,如果我們稍封裝一下,將是非常好用的一個(gè)東西。


      CREATE OR REPLACE PROCEDURE show_space
              (p_segname in varchar2,
               p_type in varchar2 default 'TABLE' ,
               p_owner in varchar2 default user)
      AS
           v_segname varchar2(100);
           v_type varchar2(10);
           l_free_blks number;
           l_total_blocks number;
           l_total_bytes number;
           l_unused_blocks number;
           l_unused_bytes number;
           l_LastUsedExtFileId number;
           l_LastUsedExtBlockId number;
           l_LAST_USED_BLOCK number;
           PROCEDURE  p( p_label in varchar2, p_num in number )
           IS
           BEGIN
           dbms_output.put_line( rpad(p_label,40,'.')|| p_num );
           END;
      BEGIN
           v_segname := upper(p_segname);
           v_type := p_type;
           if (p_type = 'i' or p_type = 'I') then
             v_type := 'INDEX';
           end if;
           if (p_type = 't' or p_type = 'T') then
             v_type := 'TABLE';
           end if;
           if (p_type = 'c' or p_type = 'C') then
             v_type := 'CLUSTER';
           end if;
           --以下部分不能用于ASSM
           dbms_space.free_blocks
           ( segment_owner => p_owner,
           segment_name => v_segname,
           segment_type => v_type,
           freelist_group_id => 0,
           free_blks => l_free_blks );
           --以上部分不能用于ASSM
           dbms_space.unused_space
           ( segment_owner => p_owner,
           segment_name => v_segname,
           segment_type => v_type,
           total_blocks => l_total_blocks,
           total_bytes => l_total_bytes,
           unused_blocks => l_unused_blocks,
           unused_bytes => l_unused_bytes,
           LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId,
           LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId,
           LAST_USED_BLOCK => l_LAST_USED_BLOCK );
           --顯示結(jié)果
           p( 'Free Blocks', l_free_blks );
           p( 'Total Blocks', l_total_blocks );
           p( 'Total Bytes', l_total_bytes );
           p( 'Unused Blocks', l_unused_blocks );
           p( 'Unused Bytes', l_unused_bytes );
           p( 'Last Used Ext FileId', l_LastUsedExtFileId );
           p( 'Last Used Ext BlockId', l_LastUsedExtBlockId );
           p( 'Last Used Block', l_LAST_USED_BLOCK );
      END;


      執(zhí)行結(jié)果將如下所示


      SQL> set serveroutput on;
      SQL> exec show_space('test');
      Free Blocks.............................1
      Total Blocks............................8
      Total Bytes.............................65536
      Unused Blocks...........................6
      Unused Bytes............................49152
      Last Used Ext FileId....................1
      Last Used Ext BlockId...................48521
      Last Used Block.........................2
      PL/SQL procedure successfully completed


      8、數(shù)據(jù)庫的索引如果有比較頻繁的Delete操作,將可能導(dǎo)致索引產(chǎn)生很多碎片,所以,在有的時(shí)候,需要對(duì)所有的索引重新REBUILD,以便合并索引塊,減少碎片,提高查詢速度。

       

      SQL> set heading off
      SQL> set feedback off
      SQL> spool d:\index.sql
      SQL> SELECT 'alter index ' || index_name || ' rebuild '
      ||'tablespace INDEXES storage(initial 256K next 256K pctincrease 0);'
      FROM all_indexes
      WHERE ( tablespace_name != 'INDEXES'
      OR next_extent != ( 256 * 1024 )
      )
      AND owner = USER
      SQL>spool off


      這個(gè)時(shí)候,我們打開spool出來的文件,就可以直接運(yùn)行了。
       
      9、表的主鍵是必要的,沒有主鍵的表可以說是不符合設(shè)計(jì)規(guī)范的,所以我們需要監(jiān)控表是否有主鍵


        SELECT table_name
      FROM all_tables
      WHERE owner = USER
      MINUS
      SELECT table_name
      FROM all_constraints
      WHERE owner = USER
      AND constraint_type = 'P'
      二、性能監(jiān)控
       
      1、數(shù)據(jù)緩沖區(qū)的命中率已經(jīng)不是性能調(diào)整中的主要問題了,但是,過低的命中率肯定是不可以的,在任何情況下,我們必須保證有一個(gè)大的data buffer和一個(gè)高的命中率。
      這個(gè)語句可以獲得整體的數(shù)據(jù)緩沖命中率,越高越好
       
      SELECT a.VALUE + b.VALUE logical_reads,
      c.VALUE phys_reads,
      round(100*(1-c.value/(a.value+b.value)),4) hit_ratio
      FROM v$sysstat a,v$sysstat b,v$sysstat c
      WHERE a.NAME='db block gets'
      AND b.NAME='consistent gets'
      AND c.NAME='physical reads'
      2、庫緩沖說明了SQL語句的重載率,當(dāng)然,一個(gè)SQL語句應(yīng)當(dāng)被執(zhí)行的越多越好,如果重載率比較高,就考慮增加共享池大小或者是提高Bind變量的使用
      以下語句查詢了Sql語句的重載率,越低越好
      SELECT SUM(pins) total_pins,SUM(reloads) total_reloads,
      SUM(reloads)/SUM(pins)*100 libcache_reload_ratio
      FROM  v$librarycache
      3、用戶鎖,數(shù)據(jù)庫的鎖有的時(shí)候是比較耗費(fèi)資源的,特別是發(fā)生鎖等待的時(shí)候,我們必須找到發(fā)生等待的鎖,有可能的話,殺掉該進(jìn)程。
      這個(gè)語句將查找到數(shù)據(jù)庫中所有的DML語句產(chǎn)生的鎖,還可以發(fā)現(xiàn),任何DML語句其實(shí)產(chǎn)生了兩個(gè)鎖,一個(gè)是表鎖,一個(gè)是行鎖。
      可以通過alter system kill session ‘sid,serial#’來殺掉會(huì)話
      SELECT /*+ rule */ s.username,
      decode(l.type,'TM','TABLE LOCK',
                     'TX','ROW LOCK',
                     NULL) LOCK_LEVEL,
      o.owner,o.object_name,o.object_type,
      s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
      FROM v$session s,v$lock l,dba_objects o
      WHERE l.sid = s.sid
      AND l.id1 = o.object_id(+)
      AND s.username is NOT NULL
      4、鎖與等待,如果發(fā)生了鎖等待,我們可能更想知道是誰鎖了表而引起誰的等待
      以下的語句可以查詢到誰鎖了表,而誰在等待。
      SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name,
              o.owner,o.object_name,o.object_type,s.sid,s.serial#
      FROM v$locked_object l,dba_objects o,v$session s
      WHERE l.object_id=o.object_id
      AND l.session_id=s.sid
      ORDER BY o.object_id,xidusn DESC
      以上查詢結(jié)果是一個(gè)樹狀結(jié)構(gòu),如果有子節(jié)點(diǎn),則表示有等待發(fā)生。如果想知道鎖用了哪個(gè)回滾段,還可以關(guān)聯(lián)到V$rollname,其中xidusn就是回滾段的USN
       
      5、如果發(fā)生了事務(wù)或鎖,想知道哪些回滾段正在被使用嗎?其實(shí)通過事務(wù)表,我們可以詳細(xì)的查詢到事務(wù)與回滾段之間的關(guān)系。同時(shí),如果關(guān)聯(lián)會(huì)話表,我們則可以知道是哪個(gè)會(huì)話發(fā)動(dòng)了這個(gè)事務(wù)。
      SELECT s.USERNAME,s.SID,s.SERIAL#,t.UBAFIL "UBA filenum",
      t.UBABLK "UBA Block number",t.USED_UBLK "Number os undo Blocks Used",
      t.START_TIME,t.STATUS,t.START_SCNB,t.XIDUSN RollID,r.NAME RollName
      FROM v$session s,v$transaction t,v$rollname r
      WHERE s.SADDR=t.SES_ADDR
      AND t.XIDUSN=r.usn
      7、如果利用會(huì)話跟蹤或者是想查看某個(gè)會(huì)話的跟蹤文件,那么查詢到OS上的進(jìn)程或線程號(hào)是非常重要的,因?yàn)槲募牧蠲?,就包含這個(gè)信息,以下的語句可以查詢到進(jìn)程或線程號(hào),由此就可以找到對(duì)應(yīng)的文件。

      SELECT p1.value||'\'||p2.value||'_ora_'||p.spid filename
           FROM
               v$process p,
               v$session s,
               v$parameter p1,
               v$parameter p2
           WHERE p1.name = 'user_dump_dest'
           AND p2.name = 'db_name'
           AND p.addr = s.paddr
           AND s.audsid = USERENV ('SESSIONID');
      8、在ORACLE 9i中,可以監(jiān)控索引的使用,如果沒有使用到的索引,完全可以刪除掉,減少DML操作時(shí)的操作。
      以下就是開始索引監(jiān)控與停止索引監(jiān)控的腳本
      set heading off
      set echo off
      set feedback off
      set pages 10000
      spool start_index_monitor.sql
       
      SELECT 'alter index '||owner||'.'||index_name||' monitoring usage;'
      FROM dba_indexes
      WHERE owner = USER; 
       
      spool off 
      set heading on
      set echo on
      set feedback on
      ------------------------------------------------
      set heading off
      set echo off
      set feedback off
      set pages 10000
      spool stop_index_monitor.sql
       
      SELECT 'alter index '||owner||'.'||index_name||' nomonitoring usage;'
      FROM dba_indexes
      WHERE owner = USER; 
       
      spool off 
      set heading on
      set echo on
      set feedback on 
      如果需要監(jiān)控更多的用戶,可以將owner=User改寫成別的
      監(jiān)控結(jié)果在視圖v$object_usage中查詢
      感謝fenng,他提供了一個(gè)更新版的show_space腳本

      CREATE OR REPLACE PROCEDURE show_space
                               ( p_segname IN VARCHAR2,
                                 p_owner   IN VARCHAR2 DEFAULT USER,
                                 p_type    IN VARCHAR2 DEFAULT 'TABLE',
                                 p_partition IN VARCHAR2 DEFAULT NULL )
      -- This procedure uses AUTHID CURRENT USER so it can query DBA_*
      -- views using privileges from a ROLE and so it can be installed
      -- once per database, instead of once per user who wanted to use it.
      AUTHID CURRENT_USER
      as
           l_free_blks                 number;
           l_total_blocks              number;
           l_total_bytes               number;
           l_unused_blocks             number;
           l_unused_bytes              number;
           l_LastUsedExtFileId         number;
           l_LastUsedExtBlockId        number;
           l_LAST_USED_BLOCK           number;
           l_segment_space_mgmt        varchar2(255);
           l_unformatted_blocks number;
           l_unformatted_bytes number;
           l_fs1_blocks number; l_fs1_bytes number;
           l_fs2_blocks number; l_fs2_bytes number;
           l_fs3_blocks number; l_fs3_bytes number;
           l_fs4_blocks number; l_fs4_bytes number;
           l_full_blocks number; l_full_bytes number;
       
           -- Inline procedure to print out numbers nicely formatted
           -- with a simple label.
           PROCEDURE p( p_label in varchar2, p_num in number )
           IS
           BEGIN
               dbms_output.put_line( rpad(p_label,40,'.') ||
                                     to_char(p_num,'999,999,999,999') );
           END;
      BEGIN
          -- This query is executed dynamically in order to allow this procedure
          -- to be created by a user who has access to DBA_SEGMENTS/TABLESPACES
          -- via a role as is customary.
          -- NOTE: at runtime, the invoker MUST have access to these two
          -- views!
          -- This query determines if the object is an ASSM object or not.
          BEGIN
             EXECUTE IMMEDIATE
                 'select ts.segment_space_management
                    FROM dba_segments seg, dba_tablespaces ts
                   WHERE seg.segment_name      = :p_segname
                     AND (:p_partition is null or
                         seg.partition_name = :p_partition)
                     AND seg.owner = :p_owner
                     AND seg.tablespace_name = ts.tablespace_name'
                    INTO l_segment_space_mgmt
                   USING p_segname, p_partition, p_partition, p_owner;
          EXCEPTION
              WHEN too_many_rows THEN
                 dbms_output.put_line
                 ( 'This must be a partitioned table, use p_partition => ');
                 RETURN;
          END;
       
          -- If the object is in an ASSM tablespace, we must use this API
          -- call to get space information; else we use the FREE_BLOCKS
          -- API for the user managed segments.
          IF l_segment_space_mgmt = 'AUTO'
          THEN
            dbms_space.space_usage
            ( p_owner, p_segname, p_type, l_unformatted_blocks,
              l_unformatted_bytes, l_fs1_blocks, l_fs1_bytes,
              l_fs2_blocks, l_fs2_bytes, l_fs3_blocks, l_fs3_bytes,
              l_fs4_blocks, l_fs4_bytes, l_full_blocks, l_full_bytes, p_partition);
       
            p( 'Unformatted Blocks ', l_unformatted_blocks );
            p( 'FS1 Blocks (0-25)  ', l_fs1_blocks );
            p( 'FS2 Blocks (25-50) ', l_fs2_blocks );
            p( 'FS3 Blocks (50-75) ', l_fs3_blocks );
            p( 'FS4 Blocks (75-100)', l_fs4_blocks );
            p( 'Full Blocks        ', l_full_blocks );
         ELSE
            dbms_space.free_blocks(
              segment_owner     => p_owner,
              segment_name      => p_segname,
              segment_type      => p_type,
              freelist_group_id => 0,
              free_blks         => l_free_blks);
       
            p( 'Free Blocks', l_free_blks );
         END IF;
       
         -- And then the unused space API call to get the rest of the
         -- information.
         dbms_space.unused_space
         ( segment_owner     => p_owner,
           segment_name      => p_segname,
           segment_type      => p_type,
           partition_name    => p_partition,
           total_blocks      => l_total_blocks,
           total_bytes       => l_total_bytes,
           unused_blocks     => l_unused_blocks,
           unused_bytes      => l_unused_bytes,
           LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId,
           LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId,
           LAST_USED_BLOCK => l_LAST_USED_BLOCK );
       
           p( 'Total Blocks', l_total_blocks );
           p( 'Total Bytes', l_total_bytes );
           p( 'Total MBytes', trunc(l_total_bytes/1024/1024) );
           p( 'Unused Blocks', l_unused_blocks );
           p( 'Unused Bytes', l_unused_bytes );
           p( 'Last Used Ext FileId', l_LastUsedExtFileId );
           p( 'Last Used Ext BlockId', l_LastUsedExtBlockId );
           p( 'Last Used Block', l_LAST_USED_BLOCK );
      END;
      隱含參數(shù):
      select a.ksppinm "parameter ", a.ksppdesc "descriptoin " 
      from x$ksppi a,x$ksppcv b,x$ksppsv c 
      where a.indx=b.indx and a.indx=c.indx and a.ksppinm like '/_%' escape '/';
      回復(fù): DBA常用SQL語句系列,歡迎補(bǔ)充,在不斷更新中
      Check OS process id from Oracle sid
       
      select spid from v$process 
      where addr in ( select paddr from v$session where sid=[$sid) ] 
       

      Check Oracle sid from OS process id

      select sid from v$session 
      where paddr in ( select addr from v$process where spid=[$pid) ] 
      Check current SQL in a session
      select SQL_TEXT       from  V$SQLTEXT
      where HASH_VALUE     =
      ( select SQL_HASH_VALUE  from v$session
      where sid = &sid)
      order by PIECE

      Checking v$session_wait

      select * from v$session_wait 
      where event not like 'rdbms%'
      and  event not like 'SQL*N%'
      and  event not like '%timer';
      Dictionary Cache Hits
         SELECT sum(getmisses)/sum(gets) FROM  v$rowcache;
      /*It should be < 15%, otherwise Add share_pool_size*/

      Check DB object name from file id and block#
      select owner,segment_name,segment_type 
      from dba_extents
      where file_id = [$fno and &dno between block_id and block_id + blocks – 1 ]

      回復(fù): DBA常用SQL語句系列,歡迎補(bǔ)充,在不斷更新中
      #尋找hot block
      select /*+ ordered */
      e.owner ||'.'|| e.segment_name segment_name,
      e.extent_id extent#,
      x.dbablk - e.block_id + 1 block#,
      x.tch,
      l.child#
      from
      sys.v$latch_children l,
      sys.x$bh x,
      sys.dba_extents e
      where
      l.name = 'cache buffers chains' and
      l.sleeps > &sleep_count and
      x.hladdr = l.addr and
      e.file_id = x.file# and
      x.dbablk between e.block_id and e.block_id + e.blocks - 1;
       
      #找出每個(gè)文件上的等待事件
      select df.name,kf.count from v$datafile df,x$kcbfwait kf where (kf.indx+1)=df.file#;
       
      #找出引起等待事件的SQL語句.
      select sql_text from v$sqlarea a,v$session b,v$session_wait c where a.address=b.sql_address and b.sid=c.sid and c.event=[$ll]
       
      #監(jiān)控共享池中哪個(gè)對(duì)象引起了大的內(nèi)存分配
      SELECT * FROM X$KSMLRU WHERE ksmlrsiz > 0;
      判斷你是從pfile啟動(dòng)還是spfile啟動(dòng)的簡單方法?。?!
      判斷你是從pfile啟動(dòng)還是spfile啟動(dòng)的簡單方法?。。?
       
      select decode(count(*), 1, 'spfile', 'pfile' ) 
      from v$spparameter 
      where rownum=1 
      and isspecified='TRUE' 
        / 
       
      DECODE 
      ------ 
      spfile
      ORACLE常用技巧和腳本
      ORACLE常用技巧和腳本
      1.如何查看ORACLE的隱含參數(shù)?
           ORACLE的顯式參數(shù),除了在INIT.ORA文件中定義的外,在svrmgrl中用"show parameter *",可以顯示。但ORACLE還有一些參數(shù)是以“_”,開頭的。如我們非常熟悉的“_offline_rollback_segments”等。
      這些參數(shù)可在sys.x$ksppi表中查出。
      語句:“select ksppinm from x$ksppi where substr(ksppinm,1,1)='_'; ”
      2.如何查看安裝了哪些ORACLE組件?
           進(jìn)入${ORACLE_HOME}/orainst/,運(yùn)行./inspdver,顯示安裝組件和版本號(hào)。
       
      3.如何查看ORACLE所占用共享內(nèi)存的大???
          可用UNIX命令“ipcs”查看共享內(nèi)存的起始地址、信號(hào)量、消息隊(duì)列。
          在svrmgrl下,用“oradebug ipc”,可看出ORACLE占用共享內(nèi)存的分段和大小。
              example:
          SVRMGR> oradebug ipc
          -------------- Shared memory --------------
          Seg Id Address Size
          1153 7fe000 784
          1154 800000 419430400
          1155 19800000 67108864
           
      4.如何查看當(dāng)前SQL*PLUS用戶的sid和serial#?
            在SQL*PLUS下,運(yùn)行:
              “select sid, serial#, status from v$session
                  where audsid=userenv('sessionid');”
       
      5.如何查看當(dāng)前數(shù)據(jù)庫的字符集?
            在SQL*PLUS下,運(yùn)行:
            “select userenv('language') from dual;”
             或:“select userenv('lang') from dual; ”
       
      6.如何查看數(shù)據(jù)庫中某用戶,正在運(yùn)行什么SQL語句?
      根據(jù)MACHINE、USERNAME或SID、SERIAL#,連接表V$SESSION和V$SQLTEXT,可查出。
         SQL*PLUS語句:
      “SELECT SQL_TEXT FROM V$SQL_TEXT T, V$SESSION S WHERE T.ADDRESS=S.SQL_ADDRESS
         AND T.HASH_VALUE=S.SQL_HASH_VALUE
         AND S.MACHINE='XXXXX' OR USERNAME='XXXXX' -- 查看某主機(jī)名,或用戶名
              /” 
      7.如何刪除表中的重復(fù)記錄?     
            例句:
            DELETE
              FROM table_name a
             WHERE rowid > ( SELECT min(rowid)
                               FROM table_name b
                              WHERE b.pk_column_1 = a.pk_column_1
                                and b.pk_column_2 = a.pk_column_2 );
      8.手工臨時(shí)強(qiáng)制改變服務(wù)器字符集
          以sys或system登錄系統(tǒng),sql*plus運(yùn)行:“create database character set us7ascii;".
          有以下錯(cuò)誤提示:
            * create database character set US7ASCII
            ERROR at line 1:
            ORA-01031: insufficient privileges
          實(shí)際上,看v$nls_parameters,字符集已更改成功。但重啟數(shù)據(jù)庫后,數(shù)據(jù)庫字符集又變回原來的了。
          該命令可用于臨時(shí)的不同字符集服務(wù)器之間數(shù)據(jù)倒換之用。
      9.怎樣查詢每個(gè)instance分配的PCM鎖的數(shù)目
          用以下命令:
          select count(*) "Number of hashed PCM locks" from v$lock_element where bitand(flags,4)<>0
          /
          select count(*) "Number of fine grain PCM locks" from v$lock_element
          where bitand(flags,4)=0
          /
      10. 怎么判斷當(dāng)前正在使用何種SQL優(yōu)化方式?
          用explain plan產(chǎn)生EXPLAIN PLAN,檢查PLAN_TABLE中ID=0的POSITION列的值。
          e.g.
          select decode(nvl(position,-1),-1,'RBO',1,'CBO') from plan_table where id=0
          /
      11. 做EXPORT時(shí),能否將DUMP文件分成多個(gè)?
          ORACLE8I中EXP增加了一個(gè)參數(shù)FILESIZE,可將一個(gè)文件分成多個(gè):
          EXP SCOTT/TIGER FILE=(ORDER_1.DMP,ORDER_2.DMP,ORDER_3.DMP) FILESIZE=1G TABLES=ORDER;
       
          其他版本的ORACLE在UNIX下可利用管道和split分割:
          mknod pipe p
          split -b 2048m pipe order &        #將文件分割成,每個(gè)2GB大小的,以order為前綴的文件:
                                              #orderaa,orderab,orderac,...    并將該進(jìn)程放在后臺(tái)。
          EXP SCOTT/TIGER FILE=pipe tables=order
      戶如何有效地利用數(shù)據(jù)字典
      用戶如何有效地利用數(shù)據(jù)字典
      ORACLE的數(shù)據(jù)字典是數(shù)據(jù)庫的重要組成部分之一,它隨著數(shù)據(jù)庫的產(chǎn)生而產(chǎn)生, 隨著數(shù)據(jù)庫的變化而變化,
      體現(xiàn)為sys用戶下的一些表和視圖。數(shù)據(jù)字典名稱是大寫的英文字符。
          數(shù)據(jù)字典里存有用戶信息、用戶的權(quán)限信息、所有數(shù)據(jù)對(duì)象信息、表的約束條件、統(tǒng)計(jì)分析數(shù)據(jù)庫的視圖等。
      我們不能手工修改數(shù)據(jù)字典里的信息。
        很多時(shí)候,一般的ORACLE用戶不知道如何有效地利用它。
        dictionary   全部數(shù)據(jù)字典表的名稱和解釋,它有一個(gè)同義詞dict
          dict_column   全部數(shù)據(jù)字典表里字段名稱和解釋
        
          如果我們想查詢跟索引有關(guān)的數(shù)據(jù)字典時(shí),可以用下面這條SQL語句:
         
          SQL>select * from dictionary where instr(comments,'index')>0;
         
          如果我們想知道user_indexes表各字段名稱的詳細(xì)含義,可以用下面這條SQL語句:
         
          SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES';
         
          依此類推,就可以輕松知道數(shù)據(jù)字典的詳細(xì)名稱和解釋,不用查看ORACLE的其它文檔資料了。
         
          下面按類別列出一些ORACLE用戶常用數(shù)據(jù)字典的查詢使用方法。
         
          一、用戶
           查看當(dāng)前用戶的缺省表空間
           SQL>select username,default_tablespace from user_users;
      查看當(dāng)前用戶的角色
      SQL>select * from user_role_privs;
      查看當(dāng)前用戶的系統(tǒng)權(quán)限和表級(jí)權(quán)限
      SQL>select * from user_sys_privs;
      SQL>select * from user_tab_privs;
       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多