午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

常用的Oracle知識點(diǎn)匯總

 昵稱1268175 2011-07-08
是時(shí)候該總結(jié)一下這2年的工作了, 這篇是我常用的Oracle知識點(diǎn)匯總, 很多都是從網(wǎng)上收集的.


---====================================
--sqlplus 的使用
---====================================
--當(dāng)用sqlplus執(zhí)行大量的insert語句是,如果sqlplus回寫的話, 速度會很慢, 關(guān)閉回寫,速度會快很多
set feed off
set echo off


--當(dāng)用sqlplus的spool命令, 輸出csv格式的報(bào)告, 需要配置sqlplus的設(shè)置項(xiàng), 否則格式會很難看的.
set pages 0;
set head off;
set echo off;
set feedback off;
set term off;
set linesize 8;

--在linux上使用sqlplus, 不能像windows下通過上下鍵來調(diào)出前面的命令, 可以使用rlwrap給sqlplus裝個(gè)套, 這樣就支持了. 步驟如下,
首先安裝rlwrap包:apt-get install rlwrap
然后在profile中增加一個(gè)alias
alias sqlplus2=’rlwrap sqlplus’


--以下是shell中如何使用sqlplus調(diào)用sp, 并獲取sqlplus返回值的示例
${ORACLE_HOME}/bin/sqlplus -S $USER/$PWD@$ORA_SID<<!
whenever sqlerror exit sql.sqlcode rollback
exec PKG1.SP1;
exit success commit
!

rc
=$?
if [ "$rc" -eq "0" ]
then
MESSAGE
="PKG1.SP1 finished successfully"
else
MESSAGE
="PKG1.SP1 finished with errors, please check"
fi




---====================================
--程序影響性分析
---====================================
維護(hù)數(shù)據(jù)倉庫, 經(jīng)常會碰到前端業(yè)務(wù)系統(tǒng)變表結(jié)構(gòu), 或者干脆棄用了某些表, 這時(shí)候, 我們要分析數(shù)據(jù)倉庫中是否有程序/視圖用到該表.
/*
 檢查有沒有view用到某個(gè)表
*/
select * from dba_views dv
where 1=1
and (dv.owner, dv.view_name ) in
(
select dd.owner,dd.name from dba_dependencies dd
where  1=1
and dd.type='VIEW'
and dd.referenced_name='YOUR_TABLE_NAME'
and dd.referenced_type='TABLE'
)
;


--檢查程序(如procedure/package, 但不包括view)使用到某個(gè)table的某個(gè)字段
/*
'PROCEDURE'
'FUNCTION',
'PACKAGE',
'PACKAGE BODY',
'TRIGGER',
'TYPE',
'TYPE BODY',
'UNDEFINED'
--但不包括view
*/
  
select *
  from dba_source ck_field
 where 1 = 1
   
   --check field name
   and upper(ck_field.text) like upper('%FIELD_NAME%')
       
   and (ck_field.owner, ck_field.name, ck_field.name, ck_field.type) in
       (select ck_table.owner, ck_table.name, ck_table.name, ck_table.type
          from dba_source ck_table
         where 1 = 1
  --check table name
           and  upper(ck_table.text) like upper('%TABLE_NAME%')
        )
;

 

---====================================
--oracle字符集
---====================================
http://blog.csdn.net/HPSG/archive/2009/02/18/3907418.aspx



---====================================
--oracle DB Link
---====================================
有兩種方式可以創(chuàng)建dblink, 一種方式是通過預(yù)定義好的tns name指定remote server, 另一種是在dblink DDL語句中使用service name來指定remote server.
--通過預(yù)定好的tns name方式創(chuàng)建public dblink
create public database link LINK_SERVER_A
  connect to user_a1 identified by user_a1_PWD
  using 'Server_A_TNS';


--通過SERVICE_NAME方式創(chuàng)建public dblink 
create public database link LINK_SERVER_A
  connect to user_a1 identified by user_a1_PWD
  using '(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora9)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = Server_A)
    )
  )';

 
關(guān)于Oracle DB Link的授權(quán):
在Server B上創(chuàng)建了一個(gè)public型的DBLink后, Server B上所有的account都可以使用這個(gè)dblink訪問 server A, 而且都是假借server A上user_a1賬號來訪問server A. 所以除非必要, 最好不要創(chuàng)建public dblink, 盡量創(chuàng)建private dblink.
 

---====================================
--oracle pl sql 編程
---==================================== 
Oracle cursor
http://www./articles/misc/UsingRefCursorsToReturnRecordsets.php

 
PL SQL沒有break,continue, 該如何辦?
--1. break可用exit代替。  
  loop  
      ...  
      exit   when   ...;  
      ...  
  end   loop; 
 
--2. continue和用自定義異常代替。  
  loop  
      begin  
          ...  
          raise   my_ex;  
          ...  
      exception  
          when   others   then   null;  
      end;  
  end   loop;  
 
 

 

---====================================
--監(jiān)控oracle
---==================================== 
--訪問Oracle enterprise manager, 可以獲取到很多有價(jià)值的信息
https://oracle_server_ip:5500/em

--查看Oracle資源的鎖定情況
SELECT  distinct  A.OWNER,        
    A.OBJECT_NAME,        
    B.SESSION_ID,        
    B.ORACLE_USERNAME,        
    B.OS_USER_NAME,        
    B.PROCESS,        
    B.LOCKED_MODE,          
    C.SID,        
    C.SERIAL#,        
    C.PROGRAM,
    C.SQL_ID,
       A.OBJECT_NAME,
    C.LOGON_TIME ,
       sysdate current_date                
           FROM    ALL_OBJECTS    A,        
                     V$LOCKED_OBJECT    B,        
                     SYS.GV_$SESSION    C    
         WHERE    (    A.OBJECT_ID    =    B.OBJECT_ID    )    
             AND    (B.PROCESS    =    C.PROCESS    )
            -- AND    A.OBJECT_NAME='YOUR_TABLE_OR_MV'
      order by a.object_name
      ;

 
--上面的語句確定了session的sid和serial#, 如要kill session, 可用如下語句
alter system kill session 'sid,serial#' 
--比如 alter system kill session '11,314'

 
關(guān)于oracle lock的各種mode, 可以看下面博客 
  http://www./stomic/archive/2011/05/26/74079.html


--通過V$SQLAREA查找有問題的查詢
--V$SQLAREA視圖記錄著sql語句的磁盤讀數(shù)據(jù), 所以可以通過它來識別哪些SQL需要優(yōu)化。
select b.username username,
       a.disk_reads reads,
       a.executions exec,
       a.disk_reads / decode(a.executions, 0, 1, a.executions) rds_exec_ratio,
       a.command_type,
       a.sql_text Statement
  from v$sqlarea a, dba_users b
 where 1=1
   and a.parsing_user_id = b.user_id
   and a.disk_reads > 100000 --you can change this threshold value based on your situation
 order by a.disk_reads desc;

 
 
---====================================
--oracle的資源管理
---==================================== 

--查詢TABLE或MV的占用空間
SELECT *
  FROM (Select Segment_Name, Sum(bytes) / 1024 / 1024 SIZE_M
          From dba_extents de
         where 1 = 1
           and de.segment_type = 'TABLE'
           --AND DE.tablespace_name='YOUR_TABLE_SPACE'
           --AND DE.owner = 'YOUR_ACCOUNT'
         Group By Segment_Name)
 order by SIZE_M desc
 


---oracle表空間的事情狀況要經(jīng)常查看,一般空閑比例過低的時(shí)候就應(yīng)該考慮增大表看空間了。查看方法如下SQL:

--方法1(速度很快)
select dbf.tablespace_name,
dbf.totalspace "總量(M)",
dbf.totalblocks as 總塊數(shù),
dfs.freespace "剩余總量(M)",
dfs.freeblocks "剩余塊數(shù)",
(dfs.freespace / dbf.totalspace) * 100 "空閑比例"
from (select t.tablespace_name,
sum(t.bytes) / 1024 / 1024 totalspace,
sum(t.blocks) totalblocks
from dba_data_files t
group by t.tablespace_name) dbf,
(select tt.tablespace_name,
sum(tt.bytes) / 1024 / 1024 freespace,
sum(tt.blocks) freeblocks
from dba_free_space tt
group by tt.tablespace_name) dfs
where trim(dbf.tablespace_name) = trim(dfs.tablespace_name)
order by dbf.tablespace_name
;


--或者, 方法2(速度很快)
SELECT a.tablespace_name,
       SUM(a.bytes) / 1024 / 1024 "ALLOCATED/MB",
       SUM(DECODE(a.autoextensible, 'YES', a.maxbytes, a.bytes)) / 1024 / 1024 "MAXSPACE/MB",
       SUM(b.free) / 1024 / 1024 "FREE/MB",
       SUM(b.free +
           DECODE(a.autoextensible, 'YES', (a.maxbytes - a.bytes), 0)) / 1024 / 1024 "UNUSED/MB",
       SUM(b.free +
           DECODE(a.autoextensible, 'YES', (a.maxbytes - a.bytes), 0)) /
       SUM(DECODE(a.autoextensible, 'YES', a.maxbytes, a.bytes)) * 100 "UNUSED%"
  FROM (SELECT file_id, tablespace_name, autoextensible, maxbytes, bytes
          FROM dba_data_files) a,
       (SELECT file_id, tablespace_name, SUM(bytes) free
          FROM dba_free_space
         GROUP BY file_id, tablespace_name) b
 WHERE a.file_id = b.file_id
 GROUP BY a.tablespace_name;


 
--查看temp tablespace.
 
select db.name,
       s.tablespace_name,
       s.user_bytes/1024/1024  total_size_M,
       s.t_used_blocks,
       s.total_blocks,      
       round(100 - (s.t_used_blocks / s.total_blocks) * 100, 3) idle_ratio,
       sysdate
  from (select d.tablespace_name tablespace_name, sum(d.user_bytes ) user_bytes ,
               nvl(sum(used_blocks), 0) t_used_blocks,
               sum(blocks) total_blocks
          from v$sort_segment v, dba_temp_files d
         where d.tablespace_name = v.tablespace_name(+)
         group by d.tablespace_name) s,
       v$database db;

      
 

--當(dāng)發(fā)現(xiàn)有的表空間不夠的錯(cuò)誤時(shí),處理如下:
--1:找出該表空間對應(yīng)的數(shù)據(jù)文件及路徑
select * from dba_data_files t
where t.tablespace_name = 'ARD'

--2:增大數(shù)據(jù)文件
alter database datafile '全路徑的數(shù)據(jù)文件名稱' resize ***M

--3:增加數(shù)據(jù)文件
alter tablespace 表空間名稱
add datafile '全路徑的數(shù)據(jù)文件名稱' ***M
--注解:表空間盡量讓free百分比保持在10%以上,如果低于10%就增加datafile或者resize datafile,一般當(dāng)個(gè)數(shù)據(jù)文件不要超過2G

 
---====================================
--查看oracle服務(wù)器的一些基本信息
---====================================
--版本信息:
select * from v$version;

--查看數(shù)據(jù)庫信息
select name, created, log_mode from v$database;

--檢查數(shù)據(jù)庫中已安裝的產(chǎn)品項(xiàng), 即option, 比如olap option, rac option等
--查詢V$OPTION視圖,可以獲取您已安裝的Oracle產(chǎn)品項(xiàng)。V$VERSION視圖給出已安裝的基本產(chǎn)品項(xiàng)的版本。
select * from v$option;

更多V$ 視圖查詢, 見下面博客
http://www.cnblogs.com/jasoname/archive/2011/03/15/1985309.html


 
---====================================
--執(zhí)行計(jì)劃和分析統(tǒng)計(jì)
---====================================
查看執(zhí)行計(jì)劃的方法
1. 首先將執(zhí)行計(jì)劃寫到系統(tǒng)表中,
  Explain plan for select * from view_a;
  并commit這個(gè)命令
2. 顯示執(zhí)行計(jì)劃
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());



--分析統(tǒng)計(jì)
  analyze table  compute statistics 等同
 于 analyze table compute statistics for table for all indexes for all columns;
 比 analyze table compute statistics for table for all indexes for all indexed columns 分析了更多的信息 
 對于分區(qū)表,建議使用DBMS_STATS,而不是使用Analyze語句。
 更多信息見博客 http://bianxq./blog/464679  
 

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多