<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-314  評論-209  文章-0  trackbacks-0
     

    sed  -e ‘s/[ ]*$//g’  文件名

    1. Sed簡介   

  • sed 是一種在線編輯器,它一次處理一行內(nèi)容。處理時,把當(dāng)前處理的行存儲在臨時緩沖區(qū)中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反復(fù)操作;編寫轉(zhuǎn)換程序等。以下介紹的是Gnu版本的Sed 3.02。   
  • 2. 定址   
  • 可以通過定址來定位你所希望編輯的行,該地址用數(shù)字構(gòu)成,用逗號分隔的兩個行數(shù)表示以這兩行為起止的行的范圍(包括行數(shù)表示的那兩行)。如1,3表示1,2,3行,美元符號($)表示最后一行。范圍可以通過數(shù)據(jù),正則表達(dá)式或者二者結(jié)合的方式確定 。   
  •   
  • 3. Sed命令   
  • 調(diào)用sed命令有兩種形式:   
  • *   
  • sed [options] ’command’ file(s)   
  • *   
  • sed [options] -f scriptfile file(s)   
  • a\   
  • 在當(dāng)前行后面加入一行文本。   
  • b lable   
  • 分支到腳本中帶有標(biāo)記的地方,如果分支不存在則分支到腳本的末尾。   
  • c\   
  • 用新的文本改變本行的文本。   
  • d   
  • 從模板塊(Pattern space)位置刪除行。   
  • D   
  • 刪除模板塊的第一行。   
  • i\   
  • 在當(dāng)前行上面插入文本。   
  • h   
  • 拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。   
  • H   
  • 追加模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)   
  • g   
  • 獲得內(nèi)存緩沖區(qū)的內(nèi)容,并替代當(dāng)前模板塊中的文本。   
  • G   
  • 獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。   
  • l   
  • 列表不能打印字符的清單。   
  • n   
  • 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令。   
  • N   
  • 追加下一個輸入行到模板塊后面并在二者間嵌入一個新行,改變當(dāng)前行號碼。   
  • p   
  • 打印模板塊的行。   
  • P(大寫)   
  • 打印模板塊的第一行。   
  • q   
  • 退出Sed。   
  • r file   
  • 從file中讀行。   
  • t label   
  • if分支,從最后一行開始,條件一旦滿足或者T,t命令,將導(dǎo)致分支到帶有標(biāo)號的命令處,或者到腳本的末尾。   
  • T label   
  • 錯誤分支,從最后一行開始,一旦發(fā)生錯誤或者T,t命令,將導(dǎo)致分支到帶有標(biāo)號的命令處,或者到腳本的末尾。   
  • w file   
  • 寫并追加模板塊到file末尾。   
  • W file   
  • 寫并追加模板塊的第一行到file末尾。   
  • !   
  • 表示后面的命令對所有沒有被選定的行發(fā)生作用。   
  • s/re/string   
  • 用string替換正則表達(dá)式re。   
  • =   
  • 打印當(dāng)前行號碼。   
  • #   
  • 把注釋擴(kuò)展到下一個換行符以前。   
  • 以下的是替換標(biāo)記   
  • *   
  • g表示行內(nèi)全面替換。   
  • *   
  • p表示打印行。   
  • *   
  • w表示把行寫入一個文件。   
  • *   
  • x表示互換模板塊中的文本和緩沖區(qū)中的文本。   
  • *   
  • y表示把一個字符翻譯為另外的字符(但是不用于正則表達(dá)式)   
  •   
  • 4. 選項   
  • -e command, –expression=command   
  • 允許多臺編輯。   
  • -h, –help   
  • 打印幫助,并顯示bug列表的地址。   
  • -n, –quiet, –silent   
  •   
  • 取消默認(rèn)輸出。   
  • -f, –filer=script-file   
  • 引導(dǎo)sed腳本文件名。   
  • -V, –version   
  • 打印版本和版權(quán)信息。   
  •   
  • 5. 元字符集^   
  • 錨定行的開始 如:/^sed/匹配所有以sed開頭的行。    
  • $   
  • 錨定行的結(jié)束 如:/sed$/匹配所有以sed結(jié)尾的行。    
  • .   
  • 匹配一個非換行符的字符 如:/s.d/匹配s后接一個任意字符,然后是d。    
  • *   
  • 匹配零或多個字符 如:/*sed/匹配所有模板是一個或多個空格后緊跟sed的行。   
  • []  
  • 匹配一個指定范圍內(nèi)的字符,如/[Ss]ed/匹配sed和Sed。   
  • [^]  
  • 匹配一個不在指定范圍內(nèi)的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。   
  • \(..\)  
  • 保存匹配的字符,如s/\(love\)able/\1rs,loveable被替換成lovers。   
  • &  
  • 保存搜索字符用來替換其他字符,如s/love/**&**/,love這成**love**。    
  • \<   
  • 錨定單詞的開始,如:/\<love/匹配包含以love開頭的單詞的行。    
  • \>   
  • 錨定單詞的結(jié)束,如/love\>/匹配包含以love結(jié)尾的單詞的行。    
  • x\{m\}   
  • 重復(fù)字符x,m次,如:/0\{5\}/匹配包含5個o的行。    
  • x\{m,\}   
  • 重復(fù)字符x,至少m次,如:/o\{5,\}/匹配至少有5個o的行。    
  • x\{m,n\}   
  • 重復(fù)字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5–10個o的行。   
  • 6. 實例   
  • 刪除:d命令   
  • *   
  • $ sed ’2d’ example—–刪除example文件的第二行。   
  • *   
  • $ sed ’2,$d’ example—–刪除example文件的第二行到末尾所有行。   
  • *   
  • $ sed ’$d’ example—–刪除example文件的最后一行。   
  • *   
  • $ sed ’/test/’d example—–刪除example文件所有包含test的行。   
  • 替換:s命令   
  • *   
  • $ sed ’s/test/mytest/g’ example—–在整行范圍內(nèi)把test替換為mytest。如果沒有g(shù)標(biāo)記,則只有每行第一個匹配的test被替換成mytest。   
  • *   
  • $ sed -n ’s/^test/mytest/p’ example—–(-n)選項和p標(biāo)志一起使用表示只打印那些發(fā)生替換的行。也就是說,如果某一行開頭的test被替換成mytest,就打印它。   
  • *   
  • $ sed ’s/^192.168.0.1/&localhost/’ example—–&符號表示替換換字符串中被找到的部份。所有以192.168.0.1開頭的行都會被替換成它自已加 localhost,變成192.168.0.1localhost。   
  • *   
  • $ sed -n ’s/\(love\)able/\1rs/p’ example—–love被標(biāo)記為1,所有l(wèi)oveable會被替換成lovers,而且替換的行會被打印出來。   
  • *   
  • $ sed ’s#10#100#g’ example—–不論什么字符,緊跟著s命令的都被認(rèn)為是新的分隔符,所以,“#”在這里是分隔符,代替了默認(rèn)的“/”分隔符。表示把所有10替換成100。   
  • 選定行的范圍:逗號   
  • *   
  • $ sed -n ’/test/,/check/p’ example—–所有在模板test和check所確定的范圍內(nèi)的行都被打印。   
  • *   
  • $ sed -n ’5,/^test/p’ example—–打印從第五行開始到第一個包含以test開始的行之間的所有行。   
  • *   
  • $ sed ’/test/,/check/s/$/sed test/’ example—–對于模板test和west之間的行,每行的末尾用字符串sed test替換。   
  • 多點編輯:e命令   
  • *   
  • $ sed -e ’1,5d’ -e ’s/test/check/’ example—–(-e)選項允許在同一行里執(zhí)行多條命令。如例子所示,第一條命令刪除1至5行,第二條命令用check替換test。命令的執(zhí) 行順序?qū)Y(jié)果有影響。如果兩個命令都是替換命令,那么第一個替換命令將影響第二個替換命令的結(jié)果。   
  • *   
  • $ sed –expression=’s/test/check/’ –expression=’/love/d’ example—–一個比-e更好的命令是–expression。它能給sed表達(dá)式賦值。   
  • 從文件讀入:r命令   
  • *   
  • $ sed ’/test/r file’ example—–file里的內(nèi)容被讀進(jìn)來,顯示在與test匹配的行后面,如果匹配多行,則file的內(nèi)容將顯示在所有匹配行的下面。   
  • 寫入文件:w命令   
  • *   
  • $ sed -n ’/test/w file’ example—–在example中所有包含test的行都被寫入file里。   
  • 追加命令:a命令   
  • *   
  • $ sed ’/^test/a\\—>this is a example’ example<—–’this is a example’被追加到以test開頭的行后面,sed要求命令a后面有一個反斜杠。   
  • 插入:i命令   
  • $ sed ’/test/i\\   
  • new line   
  • ————————-’ example   
  • 如果test被匹配,則把反斜杠后面的文本插入到匹配行的前面。   
  • 下一個:n命令   
  • *   
  • $ sed ’/test/{ n; s/aa/bb/; }’ example—–如果test被匹配,則移動到匹配行的下一行,替換這一行的aa,變?yōu)閎b,并打印該行,然后繼續(xù)。   
  • 變形:y命令   
  • *   
  • $ sed ’1,10y/abcde/ABCDE/’ example—–把1–10行內(nèi)所有abcde轉(zhuǎn)變?yōu)榇髮?,注意,正則表達(dá)式元字符不能使用這個命令。   
  • 退出:q命令   
  • *   
  • $ sed ’10q’ example—–打印完第10行后,退出sed。   
  • 保持和獲?。篽命令和G命令   
  • *   
  • $ sed -e ’/test/h’ -e ’$G example—–在sed處理文件的時候,每一行都被保存在一個叫模式空間的臨時緩沖區(qū)中,除非行被刪除或者輸出被取消,否則所有被處理的行都將 打印在屏幕上。接著模式空間被清空,并存入新的一行等待處理。在這個例子里,匹配test的行被找到后,將存入模式空間,h命令將其復(fù)制并存入一個稱為保 持緩存區(qū)的特殊緩沖區(qū)內(nèi)。第二條語句的意思是,當(dāng)?shù)竭_(dá)最后一行后,G命令取出保持緩沖區(qū)的行,然后把它放回模式空間中,且追加到現(xiàn)在已經(jīng)存在于模式空間中 的行的末尾。在這個例子中就是追加到最后一行。簡單來說,任何包含test的行都被復(fù)制并追加到該文件的末尾。   
  • 保持和互換:h命令和x命令   
  • *   
  • $ sed -e ’/test/h’ -e ’/check/x’ example —–互換模式空間和保持緩沖區(qū)的內(nèi)容。也就是把包含test與check的行互換。   
  • 7. 腳本   
  • Sed腳本是一個sed的命令清單,啟動Sed時以-f選項引導(dǎo)腳本文件名。Sed對于腳本中輸入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多個命令,要用分號分隔。以#開頭的行為注釋行,且不能跨行。  
  • 文章作者:孫劍和
    本文地址:http://www.sunjianhe.com/?p=342
    版權(quán)所有 © 轉(zhuǎn)載時必須以鏈接形式注明作者和原始出處!

    posted @ 2010-12-28 11:55 xzc 閱讀(11311) | 評論 (1)編輯 收藏

    一、ORACLE10g自動收集統(tǒng)計信息--自動analyze

    Oracle Database 10g開始,Oracle在建庫后就默認(rèn)創(chuàng)建了一個名為GATHER_STATS_JOB的定時任務(wù),用于自動收集CBO的統(tǒng)計信息。

    這個自動任務(wù)默認(rèn)情況下在工作日晚上10:00-6:00和周末全天開啟。調(diào)用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集統(tǒng)計信息。該過程首先檢測統(tǒng)計信息缺失和陳舊的對象。然后確定優(yōu)先級,再開始進(jìn)行統(tǒng)計信息。

    可以通過以下查詢這個JOB的運(yùn)行情況:

     

    select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB'

    其實同在10點運(yùn)行的Job還有一個AUTO_SPACE_ADVISOR_JOB:

     

    SQL> select JOB_NAME,LAST_START_DATE from dba_scheduler_jobs;

    JOB_NAME                      LAST_START_DATE

    ------------------------------ --------------------------------------

    AUTO_SPACE_ADVISOR_JOB        04-DEC-07 10.00.00.692269 PM +08:00

    GATHER_STATS_JOB              04-DEC-07 10.00.00.701152 PM +08:00

    FGR$AUTOPURGE_JOB

    PURGE_LOG                      05-DEC-07 03.00.00.169059 AM PRC

    然而這個自動化功能已經(jīng)影響了很多系統(tǒng)的正常運(yùn)行,晚上10點對于大部分生產(chǎn)系統(tǒng)也并非空閑時段。

    而自動分析可能導(dǎo)致極為嚴(yán)重的閂鎖競爭,進(jìn)而可能導(dǎo)致數(shù)據(jù)庫Hang或者Crash。

    所以建議最好關(guān)閉這個自動統(tǒng)計信息收集功能:

     

    exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');

    自動化永遠(yuǎn)而嚴(yán)重的隱患相伴隨!

     

    關(guān)閉及開啟自動搜集功能,有兩種方法,分別如下:

    方法一: 

    exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');

    exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');

    方法二:

    alter system set "_optimizer_autostats_job"=false scope=spfile;

    alter system set "_optimizer_autostats_job"=true scope=spfile;

    Pfile可以直接修改初始化參數(shù)文件,重新啟動數(shù)據(jù)庫。

    二、AWR默認(rèn)通過MMON及MMNL進(jìn)程來每小自動運(yùn)行一次,為了節(jié)省空間,采集的數(shù)據(jù)在 7 天后自動清除。

    快照頻率和保留時間都可以由用戶修改。要查看當(dāng)前的設(shè)置,您可以使用下面的語句:

    select snap_interval, retention

    from dba_hist_wr_control;

    SNAP_INTERVAL       RETENTION

    ------------------- -------------------
      +00000 01:00:00.0   +00007 00:00:00.0

     這些 SQL 語句顯示快照每小時采集一次,采集的數(shù)據(jù)保留 7 天。要修改設(shè)置 例如,快照時間間隔為 20 分鐘,保留時間為兩天 您可以發(fā)出以下命令。參數(shù)以分鐘為單位。

    begin

       dbms_workload_repository.modify_snapshot_settings (

          interval => 20,

          retention => 2*24*60

       );end;

    AWR 使用幾個表來存儲采集的統(tǒng)計數(shù)據(jù),所有的表都存儲在新的名稱為 SYSAUX 的特定表空間中的 SYS 模式下,并且以 WRM$_* 和 WRH$_* 的格式命名。前一種類型存儲元數(shù)據(jù)信息(如檢查的數(shù)據(jù)庫和采集的快照),后一種類型保存實際采集的統(tǒng)計數(shù)據(jù)。(您可能已經(jīng)猜到,H 代表“歷史數(shù)據(jù) (historical)”而 M 代表“元數(shù)據(jù) (metadata)”。)在這些表上構(gòu)建了幾種帶前綴 DBA_HIST_ 的視圖,這些視圖可以用來編寫您自己的性能診斷工具。視圖的名稱直接與表相關(guān);例如,視圖 DBA_HIST_SYSMETRIC_SUMMARY 是在WRH$_SYSMETRIC_SUMMARY 表上構(gòu)建的。

    您的處理計劃一般是有規(guī)律的,并且通常基于您對各種事件的了解和您處理它們的經(jīng)驗。現(xiàn)在設(shè)想相同的事情由一個引擎來完成,這個引擎采集量度并根據(jù)預(yù)先確定的邏輯來推出可能的計劃。您的工作不就變得更輕松了嗎? 現(xiàn)在在 Oracle Database 10g 中推出的這個引擎稱為自動數(shù)據(jù)庫診斷監(jiān)控程序 (ADDM)。為了作出決策,ADDM 使用了由 AWR 采集的數(shù)據(jù)。

    在 AWR 進(jìn)行的每一次快照采集之后,調(diào)用 ADDM 來檢查量度并生成建議。因此,實際上您擁有了一個一天二十四小時工作的自動數(shù)據(jù)庫管理員,它主動地分析數(shù)據(jù)并生成建議,從而把您解放出來,使您能夠關(guān)注更具有戰(zhàn)略意義的問題。

    快照默認(rèn)是自動采集的,但您也可以按需要采集它們。所有的 AWR 功能都在程序包 DBMS_WORKLOAD_REPOSITORY 中實施。要采集一次快照,只需發(fā)出下面的命令:

    execute dbms_workload_repository.create_snapshot它立即采集一次快照,快照被記錄在表 WRM$_SNAPSHOT 中。采集的量度是針對 TYPICAL 級別的。如果您想采集更詳細(xì)的統(tǒng)計數(shù)據(jù),您可以在上面的過程中將參數(shù) FLUSH_LEVEL 設(shè)置為 ALL。統(tǒng)計數(shù)據(jù)自動刪除,但也可以通過調(diào)用過程 drop_snapshot_range() 來手動刪除。

    posted @ 2010-12-15 15:12 xzc 閱讀(2792) | 評論 (0)編輯 收藏
    什么時候使用分區(qū):
      1、 大數(shù)據(jù)量的表,比如大于2GB。一方面2GB文件對于32位os是一個上限,另外備份時間長。
      2、 包括歷史數(shù)據(jù)的表,比如最新的數(shù)據(jù)放入到最新的分區(qū)中。典型的例子:歷史表,只有當(dāng)前月份的數(shù)據(jù)可以被修改,而其他月份只能read-on
    ly
      ORACLE只支持以下分區(qū):tables, indexes on tables, materialized views, and indexes on materialized views
      分區(qū)對SQL和DML是透明的(應(yīng)用程序不必知道已經(jīng)作了分區(qū)),但是DDL可以對不同的分區(qū)進(jìn)行管理。
      不同的分區(qū)之間必須有相同的邏輯屬性,比如共同的表名,列名,數(shù)據(jù)類型,約束;
      但是可以有不同的物理屬性,比如pctfree, pctused, and tablespaces.
      分區(qū)獨立性:即使某些分區(qū)不可用,其他分區(qū)仍然可用。
      最多可以分成64000個分區(qū),但是具有LONG or LONG RAW列的表不可以,但是有CLOB or BLOB列的表可以。
      可以不用to_date函數(shù),比如:
      alter session set nls_date_format='mm/dd/yyyy';
      CREATE TABLE sales_range
      (salesman_id NUMBER(5),
      salesman_name VARCHAR2(30),
      sales_amount NUMBER(10),
      sales_date DATE)
      PARTITION BY RANGE(sales_date)
      (
      PARTITION sales_jan2000 VALUES LESS THAN('02/01/2000'),
      PARTITION sales_feb2000 VALUES LESS THAN('03/01/2000'),
      PARTITION sales_mar2000 VALUES LESS THAN('04/01/2000'),
      PARTITION sales_apr2000 VALUES LESS THAN('05/01/2000')
      );
      Partition Key:最多16個columns,可以是nullable的
      非分區(qū)的表可以有分區(qū)或者非分區(qū)的索引;
      分區(qū)表可以有分區(qū)或者非分區(qū)的索引;
      Partitioning 方法:
      Range Partitioning
      List Partitioning
      Hash Partitioning
      Composite Partitioning
      Composite Partitioning:組合,以及 range-hash and range-list composite partitioning
      Range Partitioning:
      每個分區(qū)都有VALUES LESS THAN子句,表示這個分區(qū)小于(<)某個上限,而大于等于(>=)前一個分區(qū)的VALUES LESS THAN值。
      MAXVALUE定義最高的分區(qū),他表示一個虛擬的無限大的值。這個分區(qū)包括null值。
      CREATE TABLE sales_range
      (salesman_id NUMBER(5),
      salesman_name VARCHAR2(30),
      sales_amount NUMBER(10),
      sales_date DATE)
      PARTITION BY RANGE(sales_date)
      (
      PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('01/02/2000','DD/MM/YYYY')),
      PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('01/03/2000','DD/MM/YYYY')),
      PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('01/04/2000','DD/MM/YYYY')),
      PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('01/05/2000','DD/MM/YYYY')),
      PARTITION sales_2000 VALUES LESS THAN(MAXVALUE)
      );
      插入數(shù)據(jù):
      Insert into sales_range values(1,2,3,to_date('21-04-2000','DD-MM-YYYY'));
      Insert into sales_range values(1,2,3,sysdate);
      選擇數(shù)據(jù):
      select * from sales_range;
      select * from sales_range partition(sales_apr2000);
      select * from sales_range partition(sales_mar2000);
      select * from sales_range partition(sales_2000);
      按照多個列分區(qū):
      CREATE TABLE sales_range1
      (salesman_id NUMBER(5),
      salesman_name VARCHAR2(30),
      sales_amount NUMBER(10),
      sales_date DATE)
      PARTITION BY RANGE(sales_date, sales_amount)
      (
      PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('01/02/2000','DD/MM/YYYY'),1000),
      PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('01/03/2000','DD/MM/YYYY'),2000),
      PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('01/04/2000','DD/MM/YYYY'),3000),
      PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('01/05/2000','DD/MM/YYYY'),4000),
      PARTITION sales_2000 VALUES LESS THAN(MAXVALUE, MAXVALUE)
      )
    Insert into sales_range1 values(1,2,500, TO_DATE('21/01/2000','DD/MM/YYYY'));
      Insert into sales_range1 values(2,3,1500, sysdate);
      如果多個分區(qū)列的值沖突,則按照從左到右的優(yōu)先級。
      List Partitioning:
      可以組織無序的,或者沒有關(guān)系的數(shù)據(jù)在相同的分區(qū)。
      不支持多列的(multicolumn) partition keys,只能是一個列。
      DEFAULT表示不滿足條件的都放在這個分區(qū)。
      CREATE TABLE sales_list
      (salesman_id NUMBER(5),
      salesman_name VARCHAR2(30),
      sales_state VARCHAR2(20),
      sales_amount NUMBER(10),
      sales_date DATE)
      PARTITION BY LIST(sales_state)
      (
      PARTITION sales_west VALUES('California', 'Hawaii'),
      PARTITION sales_east VALUES ('New York', 'Virginia', 'Florida'),
      PARTITION sales_central VALUES('Texas', 'Illinois'),
      PARTITION sales_other VALUES(DEFAULT)
      );
      Hash Partitioning:
      不可以作splitting, dropping or merging操作。但是可以added and coalesced.
      當(dāng)我們無法判斷有多少數(shù)據(jù)映射或者怎樣映射到各個分區(qū)時,可以使用這種方法。分區(qū)數(shù)據(jù)最好是2的冪,這樣可以平均分配數(shù)據(jù)。
      CREATE TABLE sales_hash1
      (salesman_id NUMBER(5),
      salesman_name VARCHAR2(30),
      sales_amount NUMBER(10),
      week_no NUMBER(2))
      PARTITION BY HASH(salesman_id)
      PARTITIONS 4
      STORE IN (users, TOOLS, TEST, TABLESPACE1);  --表空間
      CREATE TABLE sales_hash
      (salesman_id NUMBER(5),
      salesman_name VARCHAR2(30),
      sales_amount NUMBER(10),
      week_no NUMBER(2))
      PARTITION BY HASH(salesman_id)
      (
      PARTITION p1 tablespace users,
      PARTITION p2 tablespace system
      );
      Composite Partitioning:
      先按照range分區(qū),每個子分區(qū)又按照list or hash分區(qū)。
      CREATE TABLE sales_composite
      (salesman_id NUMBER(5),
      salesman_name VARCHAR2(30),
      sales_amount NUMBER(10),
      sales_date DATE)
      PARTITION BY RANGE(sales_date)
      SUBPARTITION BY HASH(salesman_id)  --子分區(qū)
      SUBPARTITION TEMPLATE(
      SUBPARTITION sp1 TABLESPACE data1,
      SUBPARTITION sp2 TABLESPACE data2,
      SUBPARTITION sp3 TABLESPACE data3,
      SUBPARTITION sp4 TABLESPACE data4)
      (PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/YYYY'))
      PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/YYYY'))
      PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','DD/MM/YYYY'))
      PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/YYYY'))
      PARTITION sales_may2000 VALUES LESS THAN(TO_DATE('06/01/2000','DD/MM/YYYY')));
      使用TEMPLATE,oracle會這樣命名子分區(qū):分區(qū)_子分區(qū),比如sales_jan2000_sp1表示將數(shù)據(jù)放在data1表空間
      Range-list:
      CREATE TABLE bimonthly_regional_sales
      (deptno NUMBER,
      item_no VARCHAR2(20),
      txn_date DATE,
      txn_amount NUMBER,
      state VARCHAR2(2))
      PARTITION BY RANGE (txn_date)
      SUBPARTITION BY LIST (state)
      SUBPARTITION TEMPLATE(
      SUBPARTITION east VALUES('NY', 'VA', 'FL') TABLESPACE system,
      SUBPARTITION west VALUES('CA', 'OR', 'HI') TABLESPACE users,
      SUBPARTITION central VALUES('IL', 'TX', 'MO') TABLESPACE tools)
      ( PARTITION janfeb_2000 VALUES LESS THAN (TO_DATE('1-03-2000','DD-Mm-YYYY')), PARTITION marapr_2000 VALUES LESS THAN (TO_DATE('1-05-2000','DD-Mm-YYYY')), PARTITION mayjun_2000 VALUES LESS THAN (TO_DATE('1-07-2000','DD-Mm-YYYY')) )
    posted @ 2010-12-13 15:19 xzc 閱讀(303) | 評論 (0)編輯 收藏
    因為Xmanager使用的是自己的字體,HP_unix在登陸的時候默認(rèn)使用的字體是zh_CN.hp15CN,所以在登陸的時候會產(chǎn)生亂碼。解決方法有兩個:
    第一、使用en_GB.roman8。因為xmanager這個字體與hpux的字體相同,所以使用en_GB.roman8就不會產(chǎn)生亂碼。
    在/etc/dt/config/Xconfig中Dtlogin*language: en_GB.roman8即可;
    第二、使用HP_UNIX的zh_CN.hp15CN字體。
    1.在你的裝有Xmanager的微機(jī)中新建文件夾:
    mkdir c:\program fils/Xmanager1.3.8/font/hpux,
    2.拷貝/usr/lib/X11/fonts/hp_chinese_s/75dpi/*pcf至此目錄。
    3.用Xmanager的mkfntdir生成font.dir文件。
    cd c:\program files\Xmanager1.3.8/font/hpux
    c:\profram files\Xmanager1.3.8\Mkfntdir
    4.將此字體目錄添加到Xmanager的字體目錄中去。(在Xconfig中的font directory中添加新生成的目錄,并刪除其他目錄,但是要留下hp目錄)。
    posted @ 2010-12-13 14:33 xzc 閱讀(1249) | 評論 (0)編輯 收藏
    alter table test nologging
    insert /*+ append */ into test select
     
     
    ask tom上有過一篇文章,是說Oracle實際上需要滿足表是nologging和insert /*+append*/兩個條件才真正實現(xiàn)nologging的
     
     
    在insert數(shù)據(jù)量很大的時候(千萬級),減少redo的產(chǎn)生對性能應(yīng)該有很大的提高。
    這是一個使用append和nologging對redo產(chǎn)生情況的實驗。
    結(jié)論:
    -------------------------------
    一、非歸檔模式下:
    沒有優(yōu)化前    (1281372  redo size)
    1、單一的使用nologging參數(shù),對redo的產(chǎn)生沒有什么影響。  (1214836  redo size)
    2、單一的使用append提示,redo的減少很顯著              (43872  redo size)
    3、nologging+append,更顯著                             (1108  redo size)
    二、歸檔模式下:
    沒有優(yōu)化前:           
    1、單獨使用nologging參數(shù),(1231904  redo size)
    2、單獨使用append提示,  (1245804  redo size)
    3、nologging + append,     (3748  redo size)

    a、使用nologging參數(shù)并不代表在dml操作中,oracle不產(chǎn)生redo,只是對于指定表的更新數(shù)據(jù)不產(chǎn)生redo,但是oracle還是要記錄這些操作,所以無論怎么優(yōu)化,dml操作肯定要產(chǎn)生redo,但是使用這些參數(shù)對redo size的影響還是非??捎^的。
    b、單獨使用nologging參數(shù),對redo size沒有多少影響,只有和append配合時,才能產(chǎn)生效果。
    c、單獨使用append提示,對redo的產(chǎn)生影響很大,這是我到現(xiàn)在都不明白的道理,按說append是繞過freelists,直接去尋找新塊,能減少對freelists的爭用,為什么會少這么多redo呢?
    d、歸檔模式和非歸檔模式下,參數(shù)影響不一樣,尤其是單獨使用append參數(shù)時,看來oracle對歸檔模式下出于安全考慮還是要多一些。
    文章出處:http://www.diybl.com/course/7_databases/oracle/Oracleshl/2008810/135707.html
     
     
    1.Nologging的設(shè)置跟數(shù)據(jù)庫的運(yùn)行模式有關(guān)

    a.數(shù)據(jù)庫運(yùn)行在非歸檔模式下:

    SQL> archive log list;

    Database log mode              No Archive Mode
    Automatic archival             Enabled
    Archive destination            /opt/oracle/oradata/hsjf/archive
    Oldest online log sequence     155
    Current log sequence           157

    SQL> @redo

    SQL> create table test as select * from dba_objects where 1=0;

    Table created.

    SQL> select * from redo_size;

         VALUE
    ----------
         63392

    SQL>

    SQL> insert into test select * from dba_objects;

    10470 rows created.

    SQL> select * from redo_size;

         VALUE
    ----------
       1150988

    SQL>

    SQL> insert into test select * from dba_objects;

    10470 rows created.

    SQL> select * from redo_size;

         VALUE
    ----------
       1152368

    SQL> select (1152368 -1150988) redo_append,(1150988 -63392) redo from dual;

    REDO_APPEND       REDO
    ----------- ----------
           1380    1087596

    SQL> drop table test;

    Table dropped. 

    我們看到在Noarchivelog模式下,對于常規(guī)表的insert append只產(chǎn)生少量redo

    b.在歸檔模式下

    SQL> shutdown immediate

    Database closed.
    Database dismounted.
    ORACLE instance shut down.

    SQL> startup mount

    ORACLE instance started.

    Total System Global Area  235999908 bytes

    Fixed Size                   451236 bytes
    Variable Size             201326592 bytes
    Database Buffers           33554432 bytes
    Redo Buffers                 667648 bytes
    Database mounted.

    SQL> alter database archivelog;

    Database altered.

    SQL> alter database open;

    Database altered.

    SQL> @redo

    SQL> create table test as select * from dba_objects where 1=0;

    Table created.

    SQL> select * from redo_size;

         VALUE
    ----------
         56288

    SQL>

    SQL> insert into test select * from dba_objects;

    10470 rows created.

    SQL> select * from redo_size;

         VALUE
    ----------
       1143948

    SQL>

    SQL> insert into test select * from dba_objects;

    10470 rows created.

    SQL> select * from redo_size;

         VALUE
    ----------
       2227712

    SQL> select (2227712 -1143948) redo_append,(1143948 -56288) redo from dual;

    REDO_APPEND       REDO
    ----------- ----------
        1083764    1087660

    SQL> drop table test;

    Table dropped. 

    我們看到在歸檔模式下,對于常規(guī)表的insert append產(chǎn)生和insert同樣的redo
    此時的insert append實際上并不會有性能提高.
    但是此時的append是生效了的

    通過Logmnr分析日志得到以下結(jié)果:

    SQL> select operation,count(*)
      from v$logmnr_contents
      group by operation;

    OPERATION                          COUNT(*)
    -------------------------------- ----------
    COMMIT                                   17
    DIRECT INSERT                         10470 
    INTERNAL                                 49
    START                                    17

    我們注意到這里是DIRECT INSERT,而且是10470條記錄,也就是每條記錄都記錄了redo.

    2.對于Nologging的table的處理

    a. 在歸檔模式下:

    SQL> create table test nologging as select * from dba_objects where 1=0;

    Table created.

    SQL> select * from redo_size;

         VALUE
    ----------
       2270284

    SQL>

    SQL> insert into test select * from dba_objects;

    10470 rows created.

    SQL> select * from redo_size;

         VALUE
    ----------
       3357644

    SQL>

    SQL> insert into test select * from dba_objects;

    10470 rows created.

    SQL> select * from redo_size;

         VALUE
    ----------
       3359024

    SQL> select (3359024 -3357644) redo_append,(3357644 - 2270284) redo from dual;

    REDO_APPEND       REDO
    ----------- ----------
           1380    1087360

    SQL> drop table test;

    Table dropped.  

    我們注意到,只有append才能減少redo

    b.在非歸檔模式下:

    SQL> shutdown immediate

    Database closed.
    Database dismounted.
    ORACLE instance shut down.

    SQL> startup mount

    ORACLE instance started.

    Total System Global Area  235999908 bytes
    Fixed Size                   451236 bytes
    Variable Size             201326592 bytes
    Database Buffers           33554432 bytes
    Redo Buffers                 667648 bytes
    Database mounted.

    SQL> alter database noarchivelog;

    Database altered.

    SQL> alter database open;

    Database altered.

    SQL> @redo

    SQL> create table test nologging as select * from dba_objects where 1=0;

    Table created.

    SQL> select * from redo_size;

         VALUE
    ----------
         56580

    SQL>

    SQL> insert into test select * from dba_objects;

    10470 rows created.

    SQL> select * from redo_size;

         VALUE
    ----------
       1144148

    SQL>

    SQL> insert into test select * from dba_objects;

    10470 rows created.

    SQL> select * from redo_size;

         VALUE
    ----------
       1145528

    SQL> select (1145528 -1144148) redo_append,(1144148 -56580) redo from dual;

    REDO_APPEND       REDO
    ----------- ----------
           1380    1087568

    SQL>

    posted @ 2010-12-07 17:24 xzc 閱讀(1896) | 評論 (0)編輯 收藏

    oracle 10g for hp HP-UX Itanium 11.31 installation
    標(biāo)簽:hp-ux上安裝oracle10g   

    1,硬件信息檢驗:
    /usr/sbin/dmesg | grep "Physical:" 確定物理RAM高于1000M
    /usr/sbin/swapinfo -a   確定交換分區(qū)有沒有空間
    bdf /tmp                確定tmp的空閑空間,要保障在400M以上
    (擴(kuò)展/tmp要到init 1但用戶狀態(tài)去umount掉,
    lvextend -L 800 /dev/vg00/lvol5(/tmp所在的lv) /dev/dsk/盤號)
    extendfs -F vxfs /dev/vg00/lvol5)
    bdf                     確定磁盤大小,需要2個大于4.7G的磁盤系統(tǒng)
    # /bin/getconf KERNEL_BITS   確定系統(tǒng)是否64位

    2,檢查軟件需求:
    uname -a 檢查操作系統(tǒng)版本:必須是hp-ux 11i v3
       show_patches|grep PHKL_40240
       show_patches|grep PHKL_39624
       show_patches|grep PHKL_39625
    注:hp Unix patch 每個季度都會有更新

    確定hp 系統(tǒng)patch已經(jīng)打上,如果沒有,到itrc找到patch打上。
    (swinstall -s 完全路徑。先解析,再install)
    3,java -version        查看java版本。必須安裝Java版本SDK1.4.2。
    (如果不能直接打出,把/opt/java1.4/bin/:加入 /.profile的PATH=中,再加入
    export JAVA_HOME=/opt/java1.4)


    4,創(chuàng)建需要的UNIX組和用戶


    #/usr/sbin/groupadd oinstall
    #/usr/sbin/groupadd dba

    創(chuàng)建oracle用戶:
    #/usr/sbin/useradd -g oinstall -G dba –m oracle
    passwd oracle



    5,創(chuàng)建必需目錄:
    mkdir /orabin
    mkdir -p /orabin/oracle

    mkdir /archive         
    chmod -R 775 /orabin /archive
    chown oracle:dba /orabin
    chown oracle:dba /archive

    6,配置內(nèi)核參數(shù):
    6.1 Kernel需求表:
    Parameter Recommended Formula or Value
    ksi_alloc_max (nproc*8) --32768
    max_thread_proc 256
    maxdsiz 1073741824 (1 GB)
    maxdsiz_64bit 2147483648 (2 GB)
    Oracle Database 21
    maxssiz 134217728 (128 MB)
    maxssiz_64bit 1073741824 (1 GB)
    maxswapchunks 16384    --
    maxuprc ((nproc*9)/10) --3687
    msgmap (2+msgmni)
    msgmni 4096
    msgseg 32767
    msgtql 4096
    ncsize (ninode+vx_ncsize) 34816
    nfile (15*nproc+2048) 61664
    nflocks 4096
    ninode (8*nproc+2048) 34816
    nkthread (((nproc*7)/4)+16) 7184
    nproc 4096
    semmap (semmni+2)
    semmni 4096
    semmns (semmni*2)
    semmnu (nproc-4)
    semvmx 32767
    shmmax The size of physical memory (0X40000000) or
    1073741824, whichever is greater.
    shmmni 512
    shmseg 120
    vps_ceiling 64
    (參數(shù)含義請看參數(shù)說明)
    #調(diào)整內(nèi)核參數(shù)
    6.2 #kctune 查內(nèi)核參數(shù)
    kctune -h -B nproc="4200"
    kctune -h -B ksi_alloc_max="33600"
    kctune -h -B max_thread_proc="1100"
    kctune -h -B maxdsiz="1073741824"
    kctune -h -B maxdsiz_64bit="4294967296"
    kctune -h -B maxssiz="134217728"
    kctune -h -B maxssiz_64bit="1073741824"
    kctune -h -B maxuprc="3688"
    kctune -h -B msgmni="4096"
    kctune -h -B msgtql="4096"
    kctune -h -B ncsize="35840"
    kctune -h -B nflocks="4096"
    kctune -h -B ninode="34816"
    kctune -h -B nkthread="8416"
    kctune -h -B semmni="8192"
    kctune -h -B semmns="16384"
    kctune -h -B semmnu="4092"
    kctune -h -B semvmx="32767"
    kctune -h -B shmmax="34359738368"
    kctune -h -B shmmni="512"
    kctune -h -B shmseg="300"
    kctune -h -B vps_ceiling="64"


    如果更改了制定的static參數(shù)。需重建kernel和重起系統(tǒng)。
    重起系統(tǒng),用root登錄

     


    7,把安裝盤mount上(把安裝介質(zhì)傳上去)

    用oracle用戶登錄,并修改oracle用戶的環(huán)境(shell)
    7.1、打開另一個會話終端
    7.2、輸入命令并確定是否可以用在終端輸出圖形化界面:
    $ xhost +
    7.3、完成一下步驟:
       在這里安裝oracle,切換到oracle用戶。$ su - oracle
    7.4、輸入命令確定oracle的默認(rèn)SHELL
    #echo $SHELL
    /sbin/sh(每個用戶所使用的sh都不一樣)

    8,更改環(huán)境變量:
    $ vi .profile
    加入以下行:
    export ORACLE_BASE=/orabin/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/10.2.0.1/db_1
    export PATH=:$ORACLE_HOME/bin:$PATH:$ORACLE_HOME/OPatch
    export NLS_LANG=american_america.zhs16gbk
    export ORACLE_SID=oracle


    9,編輯好之后logout再 su – oracle
    $echo $ORACLE_HOME
    輸出ORACLE_HOME的路徑

    安裝ORACLE軟件:
    拷貝文件到一個文件系統(tǒng)下,例如:/file/database

    注意到用戶和組為oracle:dba
    如果不是執(zhí)行:
    chown –R oracle:dba database 把他所屬用戶為oracle所屬組為dba
    chmod –R 775 databse      更改他的執(zhí)行權(quán)限為755
    export DISPLAY= 192.168.61.222:0.0
    xhost +
    su – oracle 切換到oracle用戶
    echo $DISPLAY 查看輸出目錄

    如果不是本機(jī)的IP地址,執(zhí)行:
    export DISPLAY=LOCALHOST_IP:0.0
    然后進(jìn)入oracle_databse所在目錄,進(jìn)行安裝oracle
    cd /file/databse
    ./ runInstaller -ignoreSysPreReqs

    10,如果提示swap分區(qū)不夠大,做如下操作:
    vgdisplay –v 看看哪個disk上還有空余的空間。(free要*pe值)
    lvcreate –L xxx(需要臨時swap分區(qū)的大小) –n myswap(lv名字) vg00(所在的vg名)

    newfs -F vxfs -o largefiles /dev/vg01/rmyswap(注意lv名前有r)
    swapon /dev/vg00 /myswap

    11,安裝完成之后,需要用root用戶run兩個腳本
    再打開一個會話窗口,執(zhí)行:
    /orabin/oracle/oraInventory/orainstRoot.sh
    /orabin/oracle/product/10.2.0.1/root.sh


    12,上傳 oracle 10.2.0.4補(bǔ)丁
    以同樣的方法安裝oracle 10.2.0.4 補(bǔ)丁

     


    13,配置監(jiān)聽:
    netca


    14, 建庫
    dbca

    使用裸設(shè)備
    14.1 先創(chuàng)建裸設(shè)備
    lvcreate -L 6000 -n system01.dbf vg00
    lvcreate -L 5000 -n users01.dbf vg00
    lvcreate -L 5000 -n temp01.dbf vg00
    lvcreate -L 2000 -n undotbs01.dbf vg00
    lvcreate -L 2000 -n undotbs02.dbf vg00
    lvcreate -L 50 -n control01.ctl vg00
    lvcreate -L 50 -n control02.ctl vg00
    lvcreate -L50 -n control03.ctl vg00
    lvcreate -L 500 -n redo01.log vg00
    lvcreate -L 500 -n redo02.log vg00
    lvcreate -L 500 -n redo03.log vg00
    lvcreate -L 5000 -n sysaux01.dbf vg00
    lvcreate -L 50 -n spfileoracle.ora vg00


    14.2 改變裸設(shè)備的權(quán)限為oracle:dba
    chown oracle:dba /dev/vg00/rsystem01.dbf
    chown oracle:dba /dev/vg00/rusers01.dbf
    chown oracle:dba /dev/vg00/rtemp01.dbf
    chown oracle:dba /dev/vg00/rundotbs01.dbf
    chown oracle:dba /dev/vg00/rcontrol01.ctl
    chown oracle:dba /dev/vg00/rcontrol02.ctl
    chown oracle:dba /dev/vg00/rcontrol03.ctl
    chown oracle:dba /dev/vg00/rredo01.log
    chown oracle:dba /dev/vg00/rredo02.log
    chown oracle:dba /dev/vg00/rredo03.log
    chown oracle:dba /dev/vg00/rsysaux01.dbf
    chown oracle:dba /dev/vg00/rspfileoracle.ora

    14.3 創(chuàng)建軟連接
    ln -s /dev/vg00/rspfileoracle.ora /orabin/product/10.2.0.1/db_1/dbs/spfileoracle .ora
    ln -s /dev/vg00/rsystem01.dbf /orabin/oradata/oracle/system01.dbf
    ln -s /dev/vg00/rusers01.dbf /orabin/oradata/oracle/users01.dbf
    ln -s /dev/vg00/rtemp01.dbf /orabin/oradata/oracle/temp01.dbf
    ln -s /dev/vg00/rundotbs01.dbf /orabin/oradata/oracle/undotbs01.dbf
    ln -s /dev/vg00/rundotbs02.dbf /orabin/oradata/oracle/undotbs02.dbf
    ln -s /dev/vg00/rcontrol01.ctl /orabin/oradata/oracle/control01.ctl
    ln -s /dev/vg00/rcontrol02.ctl /orabin/oradata/oracle/control02.ctl
    ln -s /dev/vg00/rcontrol03.ctl /orabin/oradata/oracle/control03.ctl
    ln -s /dev/vg00/rredo01.log /orabin/oradata/oracle/redo01.log
    ln -s /dev/vg00/rredo02.log /orabin/oradata/oracle/redo02.log
    ln -s /dev/vg00/rredo03.log /orabin/oradata/oracle/redo03.log
    ln -s /dev/vg00/rsysaux01.dbf /orabin/oradata/oracle/sysaux01.dbf

     

    14.4 查看裸設(shè)備的權(quán)限和屬組
    # ll /dev/vg00/r*
    crw-r-----   1 root       sys         64 0x000017 Dec 3 15:26 /dev/vg00/rarchive
    crw-r-----   1 oracle     dba         64 0x00000f Dec 3 15:10 /dev/vg00/rcontrol01.ctl
    crw-r-----   1 oracle     dba         64 0x000010 Dec 3 15:10 /dev/vg00/rcontrol02.ctl
    crw-r-----   1 oracle     dba         64 0x000011 Dec 3 15:10 /dev/vg00/rcontrol03.ctl
    brw-r-----   1 oracle     dba         64 0x000012 Dec 3 15:10 /dev/vg00/redo01.log
    brw-r-----   1 oracle     dba         64 0x000013 Dec 3 15:10 /dev/vg00/redo02.log
    brw-r-----   1 oracle     dba         64 0x000014 Dec 3 15:10 /dev/vg00/redo03.log
    crw-r-----   1 root       sys         64 0x000001 Dec 3 11:44 /dev/vg00/rlvol1
    crw-r-----   1 root       sys         64 0x000002 Dec 3 11:44 /dev/vg00/rlvol2
    crw-r-----   1 root       sys         64 0x000003 Dec 3 11:44 /dev/vg00/rlvol3
    crw-r-----   1 root       sys         64 0x000004 Dec 3 11:44 /dev/vg00/rlvol4
    crw-r-----   1 root       sys         64 0x000005 Dec 3 11:44 /dev/vg00/rlvol5
    crw-r-----   1 root       sys         64 0x000006 Dec 3 11:44 /dev/vg00/rlvol6
    crw-r-----   1 root       sys         64 0x000007 Dec 3 11:44 /dev/vg00/rlvol7
    crw-r-----   1 root       sys         64 0x000008 Dec 3 11:44 /dev/vg00/rlvol8
    crw-r-----   1 root       sys         64 0x000009 Dec 3 15:10 /dev/vg00/roraclebin
    crw-r-----   1 oracle     dba         64 0x000012 Dec 3 15:10 /dev/vg00/rredo01.log
    crw-r-----   1 oracle     dba         64 0x000013 Dec 3 15:10 /dev/vg00/rredo02.log
    crw-r-----   1 oracle     dba         64 0x000014 Dec 3 15:10 /dev/vg00/rredo03.log
    crw-r-----   1 oracle     dba         64 0x000016 Dec 3 15:10 /dev/vg00/rspfileoracle.ora
    crw-r-----   1 oracle     dba         64 0x000015 Dec 3 15:10 /dev/vg00/rsysaux01.dbf
    crw-r-----   1 oracle     dba         64 0x00000a Dec 3 15:10 /dev/vg00/rsystem01.dbf
    crw-r-----   1 oracle     dba         64 0x00000c Dec 3 15:10 /dev/vg00/rtemp01.dbf
    crw-r-----   1 oracle     dba         64 0x00000d Dec 3 15:10 /dev/vg00/rundotbs01.dbf
    crw-r-----   1 oracle     dba         64 0x00000e Dec 3 15:10 /dev/vg00/rundotbs02.dbf
    crw-r-----   1 oracle     dba         64 0x00000b Dec 3 15:10 /dev/vg00/rusers01.dbf
    14.5 查看鏈接文件的權(quán)限和屬組
    /orabin/oradata/oracle
    # ll
    total 0
    lrwxrwxrwx   1 oracle     oinstall        24 Dec 4 11:09 control01.ctl -> /dev/vg00/rcontrol01.ctl
    lrwxrwxrwx   1 oracle     oinstall        24 Dec 4 11:09 control02.ctl -> /dev/vg00/rcontrol02.ctl
    lrwxrwxrwx   1 oracle     oinstall        24 Dec 4 11:09 control03.ctl -> /dev/vg00/rcontrol03.ctl
    lrwxrwxrwx   1 oracle     oinstall        21 Dec 4 11:09 redo01.log -> /dev/vg00/rredo01.log
    lrwxrwxrwx   1 oracle     oinstall        21 Dec 4 11:09 redo02.log -> /dev/vg00/rredo02.log
    lrwxrwxrwx   1 oracle     oinstall        21 Dec 4 11:09 redo03.log -> /dev/vg00/rredo03.log
    lrwxrwxrwx   1 oracle     oinstall        23 Dec 4 11:09 sysaux01.dbf -> /dev/vg00/rsysaux01.dbf
    lrwxrwxrwx   1 oracle     oinstall        23 Dec 4 11:09 system01.dbf -> /dev/vg00/rsystem01.dbf
    lrwxrwxrwx   1 oracle     oinstall        21 Dec 4 11:09 temp01.dbf -> /dev/vg00/rtemp01.dbf
    lrwxrwxrwx   1 oracle     oinstall        24 Dec 4 11:09 undotbs01.dbf -> /dev/vg00/rundotbs01.dbf
    lrwxrwxrwx   1 oracle     oinstall        24 Dec 4 11:09 undotbs02.dbf -> /dev/vg00/rundotbs02.dbf
    lrwxrwxrwx   1 oracle     oinstall        22 Dec 4 11:09 users01.dbf -> /dev/vg00/rusers01.dbf

    根據(jù)提示選擇數(shù)據(jù)庫名(oracle),sys密碼(和主機(jī)名一樣),選擇control,datafile,redofile以及spfile的路徑


    15 把數(shù)據(jù)庫變?yōu)闅w檔模式

    sqlplus 下執(zhí)行:
    alter system set log_archive_start= TRUE scope=spfile;
    alter system set log_archive_dest_1="LOCATION=/archive" scope=spfile;
    shutdown immediate;
    alter database archivelog;
    alter database open ;

    show parameter archive;


    測試:
    alter system switch logfile;
    /
    /
    /
    到/archive 目錄下查看是否已經(jīng)歸檔


    16 用客戶端和網(wǎng)頁或者第三方軟件連接oracle
    測試成功!
    finish!
    archive log list;
    shutdown immediate;
    startup mount;
    alter database archivelog;
    alter database open
    alter system set LOG_ARCHIVE_DEST_1='LOCATION=/oracle/oradata/express/archive';
    shutdown immediate;
    startup
    如果是oracle9i,還需要更改如下參數(shù):
    alter system set log_archive_start=true scope=spfile;
    但是如果在10g中也更改這些參數(shù),數(shù)據(jù)庫重啟時會有如下提示:
    ORA-32004: obsolete and/or deprecated parameter(s) specified
    alter system set log_archive_format='%t_%s.dbf' scope=spfile;
    但是如果在10g中也更改這些參數(shù),數(shù)據(jù)庫會不能啟動,如下提示:
    ORA-32004: obsolete and/or deprecated parameter(s) specified
    ORA-19905: log_archive_format must contain %s, %t and %r

    posted @ 2010-12-03 20:45 xzc 閱讀(1120) | 評論 (0)編輯 收藏

    HP--UX查看內(nèi)存、CPU的使用率

    1、運(yùn)行/usr/contrib/bin/crashinfo(根據(jù)第二步實際情況) | more,信息中注意類似如下內(nèi)容:
    ==================
    = Memory Globals =
    ==================

    Note: "freemem" was resynced with freemem caches: was 169536, now 168628

    Physical Memory = 2096640 pages (8.00 GB) //物理內(nèi)存總量
    Free Memory = 168628 pages (658.70 MB)//空閑內(nèi)存
    Average Free Memory = 169403 pages (661.73 MB)//平均空閑內(nèi)存
    gpgslim = 7168 pages (28.00 MB)
    lotsfree = 32768 pages (128.00 MB)
    desfree = 7168 pages (28.00 MB)
    minfree = 3328 pages (13.00 MB)
    **************物理內(nèi)存使用率=(物理內(nèi)存總量-空閑內(nèi)存)/物理內(nèi)存總量***************
    ========================
    = Buffer Cache Globals =
    ========================

    dbc_max_pct = 50 %
    dbc_min_pct = 5 %
    dbc current pct = 50.0 %
    bufpages = 1048320 pages (4.00 GB)
    Number of buf headers = 557940

    fixed_size_cache = 0
    dbc_parolemem = 0
    dbc_stealavg = 0
    dbc_ceiling = 1048320 pages (4.00 GB)
    dbc_nbuf = 52416
    dbc_bufpages = 104832 pages (409.50 MB)
    dbc_vhandcredit = 11403
    orignbuf = 0
    origbufpages = 0 pages

    ====================
    = Swap Information =
    ====================

    swapinfo -mt emulation
    ======================

    Mb Mb Mb PCT START/ Mb
    TYPE AVAIL USED FREE USED LIMIT RESERVE PRI NAME
    dev 16384 0 16098 0% 0 - 1 LVM vg00/lv2
    reserve - 2141 -2141
    memory 6460 4928 1532 76%
    total 22844 7069 15489 31% - 0 -
    *****************SWAP內(nèi)存使用率就是total的PCT值:31%*************************
    2、CPU的使用率可以從top參數(shù)得出:
    System: JXCNMD1 Fri Aug 17 10:25:02 2007
    Load averages: 0.35, 0.41, 0.44
    311 processes: 257 sleeping, 53 running, 1 zombie
    Cpu states:
    CPU LOAD USER NICE SYS IDLE BLOCK SWAIT INTR SSYS
    0 0.74 8.8% 3.8% 2.0% 85.5% 0.0% 0.0% 0.0% 0.0%
    1 0.17 4.4% 6.2% 10.2% 79.3% 0.0% 0.0% 0.0% 0.0%
    2 0.12 3.8% 1.0% 1.0% 94.2% 0.0% 0.0% 0.0% 0.0%
    3 0.36 0.0% 70.9% 28.1% 1.0% 0.0% 0.0% 0.0% 0.0%
    --- ---- ----- ----- ----- ----- ----- ----- ----- -----
    avg 0.35 4.2% 20.6% 10.2% 65.1% 0.0% 0.0% 0.0% 0.0%
    *****************系統(tǒng)一共4個CPU,每個CPU的使用率=100%-IDLE值*******************
    3、top命令的一些解釋
    問:
    top中的幾個參數(shù)的意義能幫忙解釋一下嗎?
    主要是對 free的計算方法不太理解,機(jī)器的物理內(nèi)存有256M,free中的33M是怎么計算出來
    的呢?

    Memory: 92764K (15880K) real, 65796K (13316K) virtual, 33684K free Page# 1/5

    另外,SAM中有如下有關(guān)信息

    xx x Processor xx Memory xx Operating System xx Network xx Dynamic x x
    xx lqqqqqqqqqqqq/ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
    xx xlqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx x
    xx xxPhysical Memory: 256.2 MB xx x
    xx xxReal Memory: xx x
    xx xx Active: 21113.5 KB xx x
    xx xx Total: 97083.5 KB xx x
    xx xxVirtual Memory: xx x
    xx xx Active: 16247.3 KB xx x
    xx xx Total: 68390.7 KB xx x
    xx xxFree Memory Pages: 6738 at 4 KB/page xx x
    xx xxSwap Space: xx x
    xx xx Avail: 1024 MB xx x
    xx xx Used: 231 MB xxvx
    xmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjx

    其中的Virtual Memory和 Swap Space是什么關(guān)系呢?我想計算虛擬內(nèi)存的利用率該如何計算呢?


    答:
    top 只能看到進(jìn)程所使用的內(nèi)存量,所以你看到的 92764K (15880K) real 就是所有進(jìn)程所使用的內(nèi)存總和,這個內(nèi)存是指物理內(nèi)存,括號前那個值是Total Real Memory,括號內(nèi)是Active Real Memory, 這兩者的區(qū)別就在于Active Real Memory的值只是分配給那些已經(jīng)在run queue或者正在運(yùn)行的進(jìn)程的Real Memory,而Total Real Memory 包括所有的進(jìn)程。
    對于后一項值 65796K (13316K) virtual 的解釋也是同樣的,不過這個值代表了Virtual Memory(一般為建在Disk上的Swap空間,當(dāng)然你要問了,我的Swap空間可不止這么些啊 by executing ‘swapinfo‘, 沒錯,Swap空間是大于這里的Total Vitual Memory的,但我前面說了,這里的值只是計算的分配給進(jìn)程的),最后一項33684K free 到確確實實是Free 的Memory,它等于Physical Mem - kernel used - user used - buffer cache。


    下面是對SAM->;Performance Monitor ->; System Property ->; Memory的顯示結(jié)果的解釋

    Physical Memory 256.2 MB 實際物理內(nèi)存大小
    Real Memory
    Active: 21113.5 KB 同 top (當(dāng)然這里舉的例子由于有時間差,所以看上去不大一致)
    Total: 97083.5 KB 同 top
    Virtual Memory:
    Active: 16247.3 KB 同 top
    Total: 68390.7 KB 同 top
    Free Memory Pages: 6738 at 4 KB/page 6738 * 4 就是 top 顯示出來的結(jié)果
    Swap Space:
    Avail: 1024 MB 同Swapinfo中 dev filesystem 總和(一般不會用到Pseudo Memory),為實際Swap Space 的大小。
    Used: 231 MB 同Swapinfo中的Reserve, 為系統(tǒng)在創(chuàng)建進(jìn)程時為該進(jìn)程預(yù)留的Swap 空間總和)
    posted @ 2010-12-03 20:43 xzc 閱讀(6614) | 評論 (1)編輯 收藏

    1. 以root用戶修改/etc/lvmrc文件
    對應(yīng)需要做成共享的VG,先要求關(guān)閉其開機(jī)自動active的設(shè)置。
    你必須保證這些VG在SG啟動的時候激活。
    備份/etc/lvmrc文件
    # cp /etc/lvmrc /etc/lvmrc_orig
    修改/etc/lvmrc文件
    From:
    AUTO_VG_ACTIVATE=1
    To:
    AUTO_VG_ACTIVATE=0


    在文件/etc/lvmrc 中添加custom_vg_activation功能模塊,
    此處為非shared的VG設(shè)置。(也可以不做)
    custom_vg_activation()
    {
    # e.g. /sbin/vgchange -a y -s
    # parallel_vg_sync "/dev/vg00 /dev/vg01"
    # parallel_vg_sync "/dev/vg02 /dev/vg03"
    /sbin/vgchange -a y vg00
    /sbin/vgchange -a y vg01
    /sbin/vgchange -a y vg02
    /sbin/vgchange -a y vg03
    return 0
    }

    2.創(chuàng)建共享邏輯卷組
    主節(jié)點上:
    # 初始化PV
    pvcreate -f /dev/rdsk/c0t12d0
    # 在/dev目錄添加用于VG的目錄
    mkdir /dev/vg_ops
    # Major number必須為64,minor number是2為16進(jìn)制數(shù)字,作為唯一標(biāo)識
    mknod /dev/vg_ops/group c 64 0x060000
    # 創(chuàng)建VG
    vgcreate /dev/vg_ops /dev/dsk/c0t12d0
    # 激活VG
    vgchange -a y vg_ops
    # 創(chuàng)建LV
    lvcreate -n P901_control_01.ctl -L 110 /dev/vg_ops
    lvcreate -n P901_control_02.ctl -L 110 /dev/vg_ops
    lvcreate -n P901_control_03.ctl -L 110 /dev/vg_ops
    lvcreate -n P901_system_01.dbf -L 400 /dev/vg_ops
    lvcreate -n P901_log1_01.log -L 120 /dev/vg_ops
    lvcreate -n P901_log1_02.log -L 120 /dev/vg_ops
    lvcreate -n P901_log1_03.log -L 120 /dev/vg_ops
    lvcreate -n P901_log2_01.log -L 120 /dev/vg_ops
    lvcreate -n P901_log2_02.log -L 120 /dev/vg_ops
    lvcreate -n P901_log2_03.log -L 120 /dev/vg_ops
    lvcreate -n P901_spfile1.dbf -L 5 /dev/vg_ops
    lvcreate -n P901_users_01.dbf -L 120 /dev/vg_ops
    lvcreate -n P901_temp_01.dbf -L 100 /dev/vg_ops
    lvcreate -n P901_undotbs_01.dbf -L 312 /dev/vg_ops
    lvcreate -n P901_undotbs_02.dbf -L 312 /dev/vg_ops
    lvcreate -n P901_example_01.dbf -L 160 /dev/vg_ops
    lvcreate -n P901_cwmlite_01.dbf -L 100 /dev/vg_ops
    lvcreate -n P901_indx_01.dbf -L 70 /dev/vg_ops
    lvcreate -n P901_tools_01.dbf -L 20 /dev/vg_ops
    lvcreate -n P901_drsys_01.dbf -L 90 /dev/vg_ops

    # 解除VG的active狀態(tài)
    vgchange -a n vg_ops
    # 創(chuàng)建LV的map文件
    vgexport -v -s -p -m /tmp/vg_ops.map /dev/vg_ops
    # 復(fù)制map文件到其它節(jié)點
    rcp /tmp/vg_ops.map opcbhp2:/tmp/vg_ops.mapOn the other nodes:
    mkdir /dev/vg_ops
    mknod /dev/vg_ops/group c 64 0x060000
    # 在其它節(jié)點創(chuàng)建VG和LV
    vgimport -v -s -m /tmp/vg_ops.map /dev/vg_ops
    # 在所有節(jié)點配置相應(yīng)VG和LV的權(quán)限和屬主
    # chown oracle:dba /dev/vg_ops/r*
    # remsh nodehp2 chown oracle:dba /dev/vg_ops/r*
    # chmod 777 /dev/vg_ops
    # remsh nodehp2 chmod 777 /dev/vg_ops
    # chmod 660 /dev/vg_ops/r*
    # remsh nodehp2 chmod 660 /dev/vg_ops/r*
    Note: 在創(chuàng)建VG的時候,要注意minor number的唯一性,常用以下命令:
    # find /dev -name group -exec ls -l {} ;
    crw------- 1 root sys 64 0x060000 May 6 07:52 /dev/vg_ops/group
    在該例子中"vg_ops"為"0x060000",所以"0x060000"不能用于創(chuàng)建其它VG,合法的minor numbers的范圍是從"0x010000"到"0xFF0000"。

    3.集群軟件ServiceGuard的安裝
    由供應(yīng)商安裝,Oracle 10gR2的RAC要求Serviceguard Extension for RAC的版本必須A.11.16.00以上,也包含A.11.16.00版本。
    4.規(guī)劃集群環(huán)境
    1)配置集群:
    使用cmquerycl去創(chuàng)建一個集群配置文件
    Cmquerycl命令必須在主節(jié)點上進(jìn)行
    # cmquerycl -v -C /etc/cmcluster/cmclconf.ascii -n nodehp1 -n nodehp2
    2)修改集群配置文件
    CLUSTER_NAME # example nodehp
    FIRST_CLUSTER_LOCK # /dev/vg_ops
    FIRST_CLUSTER_PV # /dev/dsk/c0t12d0
    OPS_VOLUME_GROUP # /dev/vg_ops
    DLM_ENABLED # NO
    GMS_ENABLED # NO
    FIRST_CLUSTER_LOCK, FIRST_CLUSTER_PV = 集群lock卷組和磁盤作為表決用途。表決VG和磁盤必須能被所有節(jié)點訪問(用共享VG就可以)。一個節(jié)點倒掉,會要求表決VG的處理。
    OPS_VOLUME_GROUP = 所有共享VG
    DLM_ENABLED and GMS_ENABLED = NO (8.1.7版本以后均設(shè)為NO)
    3)使用cmcheckconf命令驗證集群配置文件
    # cmcheckconf -v -C /etc/cmcluster/cmclconf.ascii
    4)使用vgchange來激活lock卷組
    # vgchange -a y vg_ops
    5)使用cmapplyconf復(fù)制集群配置文件到所有節(jié)點
    # cmapplyconf -v -C /etc/cmcluster/cmclconf.ascii
    6)使用vgchange解除lock卷組的激活狀態(tài)
    # vgchange -a n vg_ops

    5.基本集群管理
    1)啟動集群:
    # cmruncl
    2)使用vgchange在主節(jié)點設(shè)置共享VG
    # vgchange -S y -c y vg_ops
    3)使用vgchange在每個節(jié)點激活共享VG
    # vgchange -a s vg_ops
    # remsh nodehp2 /usr/sbin/vgchange -a s vg_ops
    4)使用cmhaltcl關(guān)閉集群或者使用cmhaltnode從集群移除節(jié)點
    # cmhaltnode
    5)使用cmrunnode添加節(jié)點到集群
    # cmrunnode
    6)使用cmhaltpkg,cmrunpkg及cmmodpkg管理集群的pkg,也可用于集群節(jié)點的恢復(fù),可參照在線手冊使用。

    6.Log Files for Cluster
    /var/adm/syslog/syslog.log包含HP Serviceguard Extension for RAC的系統(tǒng)信息

    posted @ 2010-12-01 20:22 xzc 閱讀(417) | 評論 (0)編輯 收藏

    “SQL TRACE”是Oracle提供的用于進(jìn)行SQL跟蹤的手段,是強(qiáng)有力的輔助診斷工具。在日常的數(shù)據(jù)庫問題診斷和解決中,“SQL TRACE”是非常常用的方法。

    一般,一次跟蹤可以分為以下幾步:

    1、界定需要跟蹤的目標(biāo)范圍,并使用適當(dāng)?shù)拿顔⒂盟韪櫋?/p>

     

    2、經(jīng)過一段時間后,停止跟蹤。此時應(yīng)該產(chǎn)生了一個跟蹤結(jié)果文件。

     

    3、找到跟蹤文件,并對其進(jìn)行格式化,然后閱讀或分析。

     

    本文就“SQL TRACE”的這些使用作簡單探討,并通過具體案例對SQL_TRACE的使用進(jìn)行說明。

     

    一、“SQL TRACE”的啟用。

    (A)SQL_TRACE說明

    SQL_TRACE可以作為初始化參數(shù)在全局啟用,也可以通過命令行方式在具體session啟用。

     

    1在全局啟用

    在參數(shù)文件(pfile/spfile)中指定: SQL_TRACE = true

       在全局啟用SQL_TRACE會導(dǎo)致所有進(jìn)程的活動被跟蹤,包括后臺進(jìn)程及所有用戶進(jìn)程,這通常會導(dǎo)致比較嚴(yán)重的性能問題,所以在生產(chǎn)環(huán)境中要謹(jǐn)慎使用。

    提示: 通過在全局啟用SQL_TRACE,我們可以跟蹤到所有后臺進(jìn)程的活動,很多在文檔中的抽象說明,通過跟蹤文件的實時變化,我們可以清晰的看到各個進(jìn)程之間的緊密協(xié)調(diào)。

     

    2在當(dāng)前session級設(shè)置

    大多數(shù)時候我們使用SQL_TRACE跟蹤當(dāng)前會話的進(jìn)程。通過跟蹤當(dāng)前進(jìn)程可以發(fā)現(xiàn)當(dāng)前操作的后臺數(shù)據(jù)庫遞歸活動(這在研究數(shù)據(jù)庫新特性時尤其有效),研究SQL執(zhí)行,發(fā)現(xiàn)后臺錯誤等。

    在session級啟用和停止SQL_TRACE方式如下:

    啟用當(dāng)前session的跟蹤:

    SQL> alter session set SQL_TRACE=true;

    Session altered.

     

    此時的SQL操作將被跟蹤:

     

    SQL> select count(*) from dba_users;

     

     COUNT(*)

    ----------

           34

     

    結(jié)束跟蹤:

    SQL> alter session set SQL_TRACE=false;

    Session altered.

     

    3跟蹤其它用戶進(jìn)程

       在很多時候我們需要跟蹤其他用戶的進(jìn)程,而不是當(dāng)前用戶,這可以通過Oracle提供的系統(tǒng)包DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION來完成

    通過v$session我們可以獲得sid、serial#等信息:

    獲得進(jìn)程信息,選擇需要跟蹤的進(jìn)程:

    SQL> select sid,serial#,username from v$session where username =’***’

     

          SID   SERIAL# USERNAME

    ---------- ---------- ------------------------------

                 2041 SYS

                  437 EYGLE

    設(shè)置跟蹤:

    SQL> exec dbms_system.set_SQL_TRACE_in_session(9,437,true)

    PL/SQL procedure successfully completed.

    ….

    可以等候片刻,跟蹤session執(zhí)行任務(wù),捕獲sql操作…

    ….

    停止跟蹤:

    SQL> exec dbms_system.set_SQL_TRACE_in_session(9,437,false)

    PL/SQL procedure successfully completed.

     

    (B) 10046事件說明

    10046事件是Oracle提供的內(nèi)部事件,是對SQL_TRACE的增強(qiáng).

    10046事件可以設(shè)置以下四個級別:

    1 - 啟用標(biāo)準(zhǔn)的SQL_TRACE功能,等價于SQL_TRACE。

    4 - Level 1 加上綁定值(bind values)

    8 - Level 1 + 等待事件跟蹤

    12 - Level 1 + Level 4 + Level 8

     

    類似SQL_TRACE方法,10046事件可以在全局設(shè)置,也可以在session級設(shè)置。

    對于10046事件的設(shè)置,涉及到了oracle的“診斷事件”的概念。

     

    可以參考以下鏈接了解詳情。http://www.itpub.net/323537,1.html 

    1. 在全局設(shè)置

    在參數(shù)文件中增加:

    EVENT="10046 trace name context forever,level 12"

    此設(shè)置對所有用戶的所有進(jìn)程生效、包括后臺進(jìn)程.

     

    2. 對當(dāng)前session設(shè)置

    通過alter session的方式修改,需要alter session的系統(tǒng)權(quán)限:

    SQL> alter session set events '10046 trace name context forever';

    Session altered.

     

    SQL> alter session set events '10046 trace name context forever, level 8';

    Session altered.

     

    SQL> alter session set events '10046 trace name context off';

    Session altered.

     

    3. 對其他用戶session設(shè)置

    通過DBMS_SYSTEM.SET_EV系統(tǒng)包來實現(xiàn):

     

    SQL> desc DBMS_SYSTEM.SET_EV;

     

    Parameter Type          Mode Default?

    --------- -------------- ---- --------

    SI       BINARY_INTEGER IN           

    SE       BINARY_INTEGER IN           

    EV       BINARY_INTEGER IN           

    LE       BINARY_INTEGER IN           

    NM       VARCHAR2      IN  

    其中的參數(shù)SI、SE來自v$session視圖:

    查詢獲得需要跟蹤的session信息:

    SQL> select sid,serial#,username from v$session where username is not null;

    SID SERIAL# USERNAME

    ---------- ---------- ------------------------------

    8 2041 SYS

    9 437 EYGLE

     

    執(zhí)行跟蹤:

    SQL> exec dbms_system.set_ev(9,437,10046,8,'eygle');

    PL/SQL procedure successfully completed.

     

    結(jié)束跟蹤:

    SQL> exec dbms_system.set_ev(9,437,10046,0,'eygle');

    PL/SQL procedure successfully completed.

     

    (C)對啟用方法的一些總結(jié)。

    因為trace的目標(biāo)范圍不同,導(dǎo)致必須使用不同的方法。

    ?nbsp;       作用于數(shù)據(jù)庫全局的,就改初始化參數(shù)。

    ?nbsp;       只作用于本session的,就用alter session 命令。

    ?nbsp;       作用于其它session的,就用DBMS_SYSTEM包。

     

    再加上10046診斷事件,是SQL_TRACE的增強(qiáng),又多了一套方法。

     

    二、獲取跟蹤文件

    以上生成的跟蹤文件位于“user_dump_dest”參數(shù)所指定的目錄中,位置及文件名可以通過以下SQL查詢獲得:

    1.如果是查詢當(dāng)前session的跟蹤文件,使用如下查詢:

    SELECT d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name 

    from 

       ( select p.spid from v$mystat m,v$session s, v$process p 

         where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p, 

       ( select t.instance from v$thread t,v$parameter 

         where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, 

       ( select value from v$parameter where name = 'user_dump_dest') d

     

    TRACE_FILE_NAME

    -------------------------------------------------------------------------------

    D:\ORACLE\PRODUCT\10.2.0\ADMIN\MYORACLE\UDUMP\hsjf_ora_1026.trc

     

    2.如果是查詢其他用戶session的跟蹤文件,則根據(jù)用戶的sid和#serial使用如下查詢:

    SELECT d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name 

    from 

       ( select p.spid from v$session s, v$process p 

         where s.sid=’’ and s. SERIAL#='' and p.addr = s.paddr) p, 

       ( select t.instance from v$thread t,v$parameter 

         where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, 

       ( select value from v$parameter where name = 'user_dump_dest') d

     

    TRACE_FILE_NAME

    -------------------------------------------------------------------------------

    D:\ORACLE\PRODUCT\10.2.0\ADMIN\MYORACLE\UDUMP\hsjf_ora_1026.trc

     

    三、格式化跟蹤文件。

    原始的跟蹤文件是很難讀懂的。需要使用oracle自帶的tkprof命令行工具格式化一下。

    SQL>$tkprof D:\ORACLE\PRODUCT\10.2.0\ADMIN\MYORACLE\UDUMP\hsjf_ora_1026.trc D:\ORACLE\PRODUCT\10.2.0\ADMIN\MYORACLE\UDUMP\hsjf_ora_1026.txt

    這個就可以方便的閱讀了。可以在hsjf_ora_1026.txt文件中看到所有的sql語句執(zhí)行次數(shù),CPU使用時間等數(shù)據(jù)。

     

    備注:可以通過以下方法讀取當(dāng)前已經(jīng)設(shè)置的參數(shù)

    對于全局的SQL_TRACE參數(shù)的設(shè)置,可以通過show parameter命令獲得。

     

    當(dāng)我們通過alter session的方式設(shè)置了SQL_TRACE,這個設(shè)置是不能通過show parameter的方式得到的,我們需要通過dbms_system.read_ev來獲?。?/p>

    SQL> set feedback off

    SQL> set serveroutput on

    SQL> declare

    2 event_level number;

    3 begin

    4 for event_number in 10000..10999 loop

    5 sys.dbms_system.read_ev(event_number, event_level);

    6 if (event_level > 0) then

    7 sys.dbms_output.put_line(

    8 'Event ' ||

    9 to_char(event_number) ||

    10 ' is set at level ' ||

    11 to_char(event_level)

    12 );

    13 end if;

    14 end loop;

    15 end;

    16 /

    Event 10046 is set at level 1

    引用:http://blog.sina.com.cn/s/blog_4cae4a25010008do.html

    posted @ 2010-11-13 14:31 xzc 閱讀(8633) | 評論 (2)編輯 收藏

    寫HINT目的

      手工指定SQL語句的執(zhí)行計劃

      hints是oracle提供的一種機(jī)制,用來告訴優(yōu)化器按照我們的告訴它的方式生成執(zhí)行計劃。我們可以用hints來實現(xiàn):

      1) 使用的優(yōu)化器的類型

      2) 基于代價的優(yōu)化器的優(yōu)化目標(biāo),是all_rows還是first_rows。

      3) 表的訪問路徑,是全表掃描,還是索引掃描,還是直接利用rowid。

      4) 表之間的連接類型

      5) 表之間的連接順序

      6) 語句的并行程度

      2、HINT可以基于以下規(guī)則產(chǎn)生作用

      表連接的順序、表連接的方法、訪問路徑、并行度

      3、HINT應(yīng)用范圍

      dml語句

      查詢語句

      4、語法

      {DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */

      or

      {DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]...

      如果語(句)法不對,則ORACLE會自動忽略所寫的HINT,不報錯

      1. /*+ALL_ROWS*/

      表明對語句塊選擇基于開銷的優(yōu)化方法,并獲得最佳吞吐量,使資源消耗最小化.

      例如:

      SELECT /*+ALL_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

      2. /*+FIRST_ROWS*/

      表明對語句塊選擇基于開銷的優(yōu)化方法,并獲得最佳響應(yīng)時間,使資源消耗最小化.

      例如:

      SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

      3. /*+CHOOSE*/

      表明如果數(shù)據(jù)字典中有訪問表的統(tǒng)計信息,將基于開銷的優(yōu)化方法,并獲得最佳的吞吐量;

      表明如果數(shù)據(jù)字典中沒有訪問表的統(tǒng)計信息,將基于規(guī)則開銷的優(yōu)化方法;

      例如:

      SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

      4. /*+RULE*/

      表明對語句塊選擇基于規(guī)則的優(yōu)化方法.

      例如:

      SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

      5. /*+FULL(TABLE)*/

      表明對表選擇全局掃描的方法.

      例如:

      SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='SCOTT';

      6. /*+ROWID(TABLE)*/

      提示明確表明對指定表根據(jù)ROWID進(jìn)行訪問.

      例如:

      SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'

      AND EMP_NO='SCOTT';

      7. /*+CLUSTER(TABLE)*/

      提示明確表明對指定表選擇簇掃描的訪問方法,它只對簇對象有效.

      例如:

      SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS

      WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

      8. /*+INDEX(TABLE INDEX_NAME)*/

      表明對表選擇索引的掃描方法.

      例如:

      SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M';

      9. /*+INDEX_ASC(TABLE INDEX_NAME)*/

      表明對表選擇索引升序的掃描方法.

      例如:

      SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';

      10. /*+INDEX_COMBINE*/

      為指定表選擇位圖訪問路經(jīng),如果INDEX_COMBINE中沒有提供作為參數(shù)的索引,將選擇出位圖索引的布爾組合方式.

      例如:

      SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMS

      WHERE SAL<5000000 AND HIREDATE

      11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/

      提示明確命令優(yōu)化器使用索引作為訪問路徑.

      例如:

      SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE

      FROM BSEMPMS WHERE SAL<60000;

      12. /*+INDEX_DESC(TABLE INDEX_NAME)*/

      表明對表選擇索引降序的掃描方法.

      例如:

      SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';

      13. /*+INDEX_FFS(TABLE INDEX_NAME)*/

      對指定的表執(zhí)行快速全索引掃描,而不是全表掃描的辦法.

      例如:

      SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305';

      14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/

      提示明確進(jìn)行執(zhí)行規(guī)劃的選擇,將幾個單列索引的掃描合起來.

      例如:

      SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306';

      15. /*+USE_CONCAT*/

      對查詢中的WHERE后面的OR條件進(jìn)行轉(zhuǎn)換為UNION ALL的組合查詢.

      例如:

      SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

      16. /*+NO_EXPAND*/

      對于WHERE后面的OR 或者IN-LIST的查詢語句,NO_EXPAND將阻止其基于優(yōu)化器對其進(jìn)行擴(kuò)展.

      例如:

      SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

      17. /*+NOWRITE*/

      禁止對查詢塊的查詢重寫操作.

      18. /*+REWRITE*/

      可以將視圖作為參數(shù).

      19. /*+MERGE(TABLE)*/

      能夠?qū)σ晥D的各個查詢進(jìn)行相應(yīng)的合并.

      例如:

      SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO

      ,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO

      AND A.SAL>V.AVG_SAL;

      20. /*+NO_MERGE(TABLE)*/

      對于有可合并的視圖不再合并.

      例如:

      SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELECT DPT_NO,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO AND A.SAL>V.AVG_SAL;

      21. /*+ORDERED*/

      根據(jù)表出現(xiàn)在FROM中的順序,ORDERED使ORACLE依此順序?qū)ζ溥B接.

      例如:

      SELECT /*+ORDERED*/ A.COL1,B.COL2,C.COL3 FROM TABLE1 A,TABLE2 B,TABLE3 C WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;

      22. /*+USE_NL(TABLE)*/

      將指定表與嵌套的連接的行源進(jìn)行連接,并把指定表作為內(nèi)部表.

      例如:

      SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

      23. /*+USE_MERGE(TABLE)*/

      將指定的表與其他行源通過合并排序連接方式連接起來.

      例如:

      SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

      24. /*+USE_HASH(TABLE)*/

      將指定的表與其他行源通過哈希連接方式連接起來.

      例如:

      SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

      25. /*+DRIVING_SITE(TABLE)*/

      強(qiáng)制與ORACLE所選擇的位置不同的表進(jìn)行查詢執(zhí)行.

      例如:

      SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;

      26. /*+LEADING(TABLE)*/

      將指定的表作為連接次序中的首表.

      27. /*+CACHE(TABLE)*/

      當(dāng)進(jìn)行全表掃描時,CACHE提示能夠?qū)⒈淼臋z索塊放置在緩沖區(qū)緩存中最近最少列表LRU的最近使用端

      例如:

      SELECT /*+FULL(BSEMPMS) CAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

      28. /*+NOCACHE(TABLE)*/

      當(dāng)進(jìn)行全表掃描時,CACHE提示能夠?qū)⒈淼臋z索塊放置在緩沖區(qū)緩存中最近最少列表LRU的最近使用端

      例如:

      SELECT /*+FULL(BSEMPMS) NOCAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

      29. /*+APPEND*/

      直接插入到表的最后,可以提高速度.

      insert /*+append*/ into test1 select * from test4 ;

      30. /*+NOAPPEND*/

      通過在插入語句生存期內(nèi)停止并行模式來啟動常規(guī)插入.

      insert /*+noappend*/ into test1 select * from test4 ;

      31. NO_INDEX: 指定不使用哪些索引

      /*+ NO_INDEX ( table [index [index]...] ) */

      select /*+ no_index(emp ind_emp_sal ind_emp_deptno)*/ * from emp where deptno=200 and sal>300;

      32. parallel

      select /*+ parallel(emp,4)*/ * from emp where deptno=200 and sal>300;

      另:每個SELECT/INSERT/UPDATE/DELETE命令后只能有一個/*+ */,但提示內(nèi)容可以有多個,可以用逗號分開,空格也可以。

      如:/*+ ordered index() use_nl() */

    ---------
    類似如下的一條語句:insert into xxxx select /*+parallel(a) */ * from xxx a;數(shù)據(jù)量大約在75G左右,這位兄弟從上午跑到下午還沒跑完,過來問我咋回事,說平常2hrs能跑完的東西跑了好幾個小時還撒動靜。查看系統(tǒng)性能也比較 正常,cpu,io都不繁忙,平均READ速度在80M/s左右(勉強(qiáng)湊合),但平均寫速度只有10M不到。等待事件里面大量的‘ ‘PX Deq Credit: send blkd’,這里能看出并行出了問題,從而最后得知是并行用法有問題,修改之后20分鐘完成了該操作。正確的做法應(yīng)該是:
    alter session enable dml parallel;

    insert /*+parallel(xxxx,4) */ into xxxx select /*+parallel(a) */ * from xxx a;

    因為oracle默認(rèn)并不會打開PDML,對DML語句必須手工啟用。 另外不得不說的是,并行不是一個可擴(kuò)展的特性,只有在數(shù)據(jù)倉庫或作為DBA等少數(shù)人的工具在批量數(shù)據(jù)操作時利于充分利用資源,而在OLTP環(huán)境下使用并行 需要非常謹(jǐn)慎。事實上PDML還是有比較多的限制的,例如不支持觸發(fā)器,引用約束,高級復(fù)制和分布式事務(wù)等特性,同時也會帶來額外的空間占用,PDDL同 樣是如此。有關(guān)Parallel excution可參考官方文檔,在Thomas Kyte的新書《Expert Oracle Database architecture》也有精辟的講述。
    ---------
    select count(*)
      From wid_serv_prod_mon_1100 a
     where a.acct_month = 201010
       and a.partition_id = 10
       and serv_state not in ('2HB', '2HL', '2HJ', '2HP', '2HF')
       and online_flag in (0)
       and incr_product_id in (2000020)
       and product_id in (2020966, 2020972, 2100297, 2021116)
       and billing_mode_id = 1
       and exp_date > to_date('201010', 'yyyymm')
       and not exists (select /*+no_index (b IDX_W_CDR_MON_SERV_ID_1100)*/
             1
              from wid_cdr_mon_1100 b
             where b.acct_month = 201010
               and b.ANA_EVENT_TYPE_4 in
                   ('10201010201', '10202010201', '10203010201', '10203010202', '10203030201', '10203030202', '10204010201', '10204010202', '10204030201')
               and a.serv_id = b.serv_id)

    posted @ 2010-11-05 18:02 xzc 閱讀(756) | 評論 (0)編輯 收藏
    僅列出標(biāo)題
    共32頁: First 上一頁 10 11 12 13 14 15 16 17 18 下一頁 Last 
    主站蜘蛛池模板: 在线观看日本免费a∨视频| 免费人成大片在线观看播放电影| 国色精品va在线观看免费视频| 无码欧精品亚洲日韩一区夜夜嗨| 亚洲日韩一区精品射精| A在线观看免费网站大全| 亚洲youjizz| 好爽…又高潮了毛片免费看| 激情综合亚洲色婷婷五月APP| 无人在线观看完整免费版视频| 亚洲jjzzjjzz在线观看| 可以免费看黄视频的网站| 亚洲一区精品视频在线| 亚洲欧洲免费无码| 亚洲av无码一区二区三区人妖| 国产免费久久精品久久久| 男人免费视频一区二区在线观看| 一区国严二区亚洲三区| 国产日韩AV免费无码一区二区三区| 亚洲精品美女久久久久99| 亚洲精品免费在线观看| 亚洲伊人色一综合网| 免费无码成人AV片在线在线播放| 中文字幕免费在线视频| 久久亚洲国产精品| 99久久久精品免费观看国产| 亚洲一线产区二线产区区| 亚洲成AV人网址| 一级毛片免费毛片一级毛片免费| 亚洲国产成AV人天堂无码| 国产免费黄色大片| 久久国产免费观看精品| 亚洲一区二区三区播放在线| 国产一区二区三区无码免费| 鲁丝片一区二区三区免费 | a级午夜毛片免费一区二区| 亚洲高清日韩精品第一区| 日本一道本高清免费| 国产成人无码区免费内射一片色欲| 亚洲熟妇av一区| 日韩人妻无码精品久久免费一|