亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 優(yōu)化大型數(shù)據(jù)庫導(dǎo)入 [打印本頁]

作者: lxbcd    時(shí)間: 2003-11-27 16:09
標(biāo)題: 優(yōu)化大型數(shù)據(jù)庫導(dǎo)入
內(nèi)容   
  
簡介
  
我們碰到的問題
  
長事務(wù)
  
長編譯時(shí)間
  
解決問題
  
系統(tǒng)的描述
  
腳本的邏輯
  
詳細(xì)理解腳本
  
結(jié)束語
  

簡介


dbexport 和 dbimport 是 IBM Informix& 數(shù)據(jù)移動(dòng)實(shí)用程序,它們將數(shù)據(jù)庫從一臺(tái)機(jī)器移至另一臺(tái)。整個(gè)過程十分簡單明了。dbexport 創(chuàng)建一個(gè)特殊目錄,在該目錄中它創(chuàng)建一個(gè)記錄當(dāng)前數(shù)據(jù)庫結(jié)構(gòu)的模式文件,然后將數(shù)據(jù)卸裝到每個(gè)數(shù)據(jù)庫對(duì)象的 ASCII 文件中?梢詫⒛切┠J胶蛿(shù)據(jù)文件保存在磁盤或磁帶上,然后通過使用 UNIX& tar 或其它實(shí)用程序方便地將它們轉(zhuǎn)移到另一臺(tái)機(jī)器。同時(shí),dbexport 在用戶的當(dāng)前目錄中創(chuàng)建一個(gè)消息文件,以記錄 dbexport 操作期間發(fā)生的任何錯(cuò)誤和警告。消息文件的名稱是 dbexport.out。

dbimport 實(shí)用程序使用由 dbexport 創(chuàng)建的模式和數(shù)據(jù)文件,并在另一臺(tái)機(jī)器上創(chuàng)建完全相同的數(shù)據(jù)庫。與 dbexport 一樣,dbimport 也在用戶的當(dāng)前目錄中創(chuàng)建消息文件 dbimport.out,以記錄 dbimport 操作期間的錯(cuò)誤和警告。

這些實(shí)用程序用于邏輯備份。邏輯備份是指備份數(shù)據(jù)庫結(jié)構(gòu)或模式及邏輯數(shù)據(jù)庫對(duì)象(如表、索引、視圖、觸發(fā)器和存儲(chǔ)過程)。邏輯備份與用諸如 ontape、on-archive 或 on-bar 之類的實(shí)用程序產(chǎn)生的物理備份完全不同,后者備份整個(gè) Informix 實(shí)例和原始磁盤空間。

邏輯備份的一大好處是它的靈活性。dbexport 創(chuàng)建的模式文件是一個(gè) ASCII 文件,在導(dǎo)入數(shù)據(jù)庫前可以隨時(shí)對(duì)其進(jìn)行編輯。您可以修改幾個(gè)方面:

表的數(shù)據(jù)塊大小?梢詳U(kuò)大第一個(gè)和第二個(gè)表數(shù)據(jù)塊大小,以使表有較少的但更大的數(shù)據(jù)塊。這可以提高總體性能。
表或索引的物理位置。根據(jù)您對(duì)操作系統(tǒng)的磁盤 I/O 的研究,您可能想將一些表和索引移至另一個(gè)位置來減少 I/O 負(fù)載。
索引和約束的名稱。您可能想用更有意義的名稱自動(dòng)替換生成的索引和約束名稱。
數(shù)據(jù)庫對(duì)象的結(jié)構(gòu)。通過編輯模式文件,可以將另一種分段策略應(yīng)用于表和索引,以便在導(dǎo)入數(shù)據(jù)庫時(shí),表和索引在不同的磁盤中分段以達(dá)到更好的性能。
此外,可以更改導(dǎo)出數(shù)據(jù)庫的名稱,這樣就可以將同一數(shù)據(jù)庫的多個(gè)副本保存在同一 Informix 實(shí)例中。對(duì)于那些總是喜歡為進(jìn)行比較而保存原始數(shù)據(jù)庫的開發(fā)人員和測試人員來說,這真的很有用。

邏輯備份的另一個(gè)好處是其更細(xì)的顆粒度。在恢復(fù)時(shí),您無需關(guān)閉整個(gè) Informix 實(shí)例;而只要在數(shù)據(jù)庫級(jí)別上就可以恢復(fù)它。這樣,可以避免妨礙其他正在操作其它數(shù)據(jù)庫的人。

由于這些好處,我們?cè)谶M(jìn)行開發(fā)、單元測試、黑盒或白盒測試以及集成測試時(shí)常常使用 dbexport 和 dbimport 實(shí)用程序。


我們碰到的問題


大多數(shù)數(shù)據(jù)庫都十分小,大小只有幾百兆字節(jié)。但少數(shù)數(shù)據(jù)庫相當(dāng)大 — 不僅因?yàn)閿?shù)據(jù)的大小而巨大,而且在觸發(fā)器和存儲(chǔ)過程的數(shù)量上也很大。其中的一個(gè)數(shù)據(jù)庫超過二吉字節(jié),包含四百多個(gè)存儲(chǔ)過程和約一千個(gè)觸發(fā)器。

因?yàn)?IBM Informix 存儲(chǔ)過程語言(SPL)是一個(gè)方便的中間層 API,所以許多開發(fā)人員和程序員都喜歡用它來實(shí)現(xiàn)業(yè)務(wù)規(guī)則,并將其用作前端應(yīng)用程序和數(shù)據(jù)庫服務(wù)器之間的鏈接。我們認(rèn)為存儲(chǔ)過程和觸發(fā)器的數(shù)量會(huì)隨發(fā)行版的更迭而增長。在導(dǎo)出和導(dǎo)入小型數(shù)據(jù)庫(幾百 MB 的數(shù)據(jù)庫)時(shí),我們沒有任何問題,但在導(dǎo)入大型數(shù)據(jù)庫(有大量數(shù)據(jù)及眾多觸發(fā)器和存儲(chǔ)過程的數(shù)據(jù)庫)時(shí),我們?cè)陂L事務(wù)和長編譯時(shí)間上遇到問題。


長事務(wù)


IBM Informix 將導(dǎo)入數(shù)據(jù)庫的整個(gè)過程當(dāng)作單個(gè)事務(wù)。當(dāng)數(shù)據(jù)很大,而且有許多觸發(fā)器和存儲(chǔ)過程時(shí),很容易陷入“長事務(wù)”狀態(tài)。Informix 將長事務(wù)定義為這樣一個(gè)事務(wù):它在一個(gè)邏輯日志文件中啟動(dòng),并在數(shù)據(jù)庫服務(wù)器需要重用同一個(gè)邏輯日志文件時(shí)不被提交。當(dāng)長事務(wù)達(dá)到長事務(wù)高水位標(biāo)記時(shí),它開始回滾;當(dāng)長事務(wù)獨(dú)占地訪問高水位標(biāo)記時(shí),在回滾長事務(wù)時(shí) Informix 服務(wù)器就被阻塞了。換句話說,將掛起該服務(wù)器上的其它數(shù)據(jù)庫操作(如 SELECT、INSERT、DELETE 或 UPDATE),直到長事務(wù)完成回滾為止。避免這一情況的常用方法是:關(guān)閉數(shù)據(jù)庫日志記錄,或增加邏輯日志以允許較長的事務(wù)通過。


長編譯時(shí)間


當(dāng)導(dǎo)入大型數(shù)據(jù)庫時(shí),大多數(shù)的時(shí)間都花在編譯存儲(chǔ)過程上,尤其是當(dāng)存儲(chǔ)過程又長又復(fù)雜時(shí)。這一時(shí)間特別長,而且在編譯期間會(huì)發(fā)生內(nèi)存核心轉(zhuǎn)儲(chǔ)。這常會(huì)使我們刪除了導(dǎo)入了一半的數(shù)據(jù)庫,而得從頭重新啟動(dòng)整個(gè)導(dǎo)入過程。這是一個(gè)相當(dāng)耗時(shí)的過程。


解決問題


為解決這些問題,我們編寫了一個(gè) UNIX shell 腳本以使數(shù)據(jù)庫導(dǎo)入過程更容易。該腳本使得導(dǎo)入大型數(shù)據(jù)庫的過程更加容易且平穩(wěn),而且最重要的是,它極大地提高了速度;它使整個(gè)導(dǎo)入過程至少快了四到五倍。在有這個(gè)腳本之前,我們需要花四五個(gè)小時(shí)導(dǎo)入大型數(shù)據(jù)庫;有了它,我們花費(fèi)的時(shí)間減少到一個(gè)小時(shí),而且避免了前面所描述的錯(cuò)誤。


系統(tǒng)的描述


要理解腳本的邏輯,需要對(duì)系統(tǒng)配置有些了解。我們有兩個(gè)系統(tǒng)類型:主系統(tǒng)和輔助系統(tǒng)。在主系統(tǒng)上,有四個(gè)數(shù)據(jù)庫:big_db、small_db1、small_db2 和 small_db3。在這四個(gè)數(shù)據(jù)庫中,big_db 是最大的;它大約有 2 GB 的數(shù)據(jù),并有五百多個(gè)存儲(chǔ)過程和上千個(gè)觸發(fā)器。這個(gè)數(shù)據(jù)庫會(huì)在導(dǎo)入和導(dǎo)出時(shí)給我們?cè)斐勺畲蟮膯栴}。其它數(shù)據(jù)庫都非常小,大小只有幾兆字節(jié),而且?guī)缀鯖]有存儲(chǔ)過程或觸發(fā)器。

在輔助系統(tǒng)上,只有三個(gè)小型數(shù)據(jù)庫:small_db1、small_db2 和 small_db3。


腳本的邏輯


腳本由許多函數(shù)組成,每個(gè)函數(shù)都致力于使數(shù)據(jù)庫的導(dǎo)出和導(dǎo)入操作平穩(wěn)。圖 1 顯示了這些函數(shù)間的關(guān)系:

圖 1. 導(dǎo)出和導(dǎo)入操作


注:P 表示主系統(tǒng),S 表示輔助系統(tǒng)。

正如您在流程圖中所見的,該腳本的核心由兩個(gè)函數(shù)組成:export_db 和 import_db。這里的基本邏輯是分而治之。在 export_db 中,我們利用 dbexport/dbimport 實(shí)用程序,使我們能夠編輯已導(dǎo)出的模式。在導(dǎo)出 big_db 后,我們將其已導(dǎo)出模式分成如下三部分:

表 — 僅包含所有表結(jié)構(gòu)和數(shù)據(jù)
過程 — 包含全部存儲(chǔ)過程
其余 — 包含所有視圖、索引、約束和觸發(fā)器
import_db 函數(shù)使用不同的方法處理每個(gè)部分:

對(duì)于表,使用 dbimport 實(shí)用程序來創(chuàng)建數(shù)據(jù)庫,然后只導(dǎo)入具有數(shù)據(jù)的表。這個(gè)部分執(zhí)行非常迅速,因?yàn)闆]有表的索引和約束。
第二部分(存儲(chǔ)過程)常常是瓶頸,因?yàn)?dbimport 實(shí)用程序會(huì)逐行編譯存儲(chǔ)過程。由于 dbimport 已創(chuàng)建了數(shù)據(jù)庫,所以現(xiàn)在可以將 UNIX pipe 實(shí)用程序用于這一部分。這會(huì)極大地提高速度,因?yàn)?UNIX pipe 實(shí)用程序可以執(zhí)行批處理來編譯存儲(chǔ)過程。
將同樣的方法用于第三部分來創(chuàng)建所有視圖、索引、約束和觸發(fā)器。
稍后,我將更詳細(xì)地研究它。


詳細(xì)理解腳本


讓我們仔細(xì)研究清單 1 中的腳本,并了解如何實(shí)現(xiàn)“分而治之”的邏輯。記住,代碼是“按現(xiàn)狀”提供給您的,沒有任何形式的保證。

清單 1. stop_start 和 rename_db 函數(shù)


#!/bin/ksh

. /usr/informix/.profile

DBACCESS=${INFORMIXDIR}/bin/dbaccess
DBEXPORT=${INFORMIXDIR}/bin/dbexport
DBIMPORT=${INFORMIXDIR}/bin/dbimport
EXPORT_PATH="/usr/gsm/db"
STAT_DB=stat_db
WEN_DB=wen_db
CONFIG_BIN=/SYS_SETUP/SYSCONFIG
LOGFILE="/usr/gsm/logs/cutover/db_exim.$$"

#######################
# stop_start_informix #
#######################
stop_start_informix() {

   echo ""
   echo "Stopping/Starting Informix."
   echo "This may take up to 200 seconds. Please Wait..."
   /usr/bin/su - informix -c "onmode -ky"     >;/dev/null 2>;&1
   #Wait for 50 seconds then start the informix engine backup
   sleep 50
   /usr/bin/su - informix -c "oninit; exit 0" >;/dev/null 2>;&1
   rc=1
   while [ $rc -ne 5 ]
   do
      echo "Informix oninit return code is $rc"
      echo "Waiting for 50 seconds..."
      sleep 50
      echo "Checking if the Informix Engine is Online..."
      /usr/bin/su - informix -c "onstat -" >;/dev/null 2>;&1
      rc=$?
      #
      # onstat return codes:
      #    0 = Initialization
      #    1 = Quiescent
      #    2 = Fast Recovery
      #    3 = Archive Backup
      #    4 = Shutting Down
      #    5 = Online
      #    6 = System Aborting
      #
   done
   echo "The Informix Engine is Online."
   echo ""


}


#############
# rename_db #
#############
rename_db() {

   rc=1
   while [ $rc -ne 0 ]
   do
      echo "Trying to rename the database $1 to $2"
      echo "rename database $1 to $2" | $DBACCESS
      rc=$?
      if [ $rc -ne 0 ]
      then
         echo "WARNING: Failed to rename the database $1 to $2."
         echo "Retrying. Please wait..."
         #
         # bounce the Informix engine
         #
         stop_start_informix

      fi
   done
   #
   # bounce the Informix engine
   #
   stop_start_informix

}



清單 1 中的兩個(gè)函數(shù)的目的是:確保在導(dǎo)出數(shù)據(jù)庫前先“殺死”所有數(shù)據(jù)庫連接。在導(dǎo)出數(shù)據(jù)庫時(shí),需要對(duì)數(shù)據(jù)庫的獨(dú)占訪問;否則會(huì)得到一條來自 Informix 的錯(cuò)誤,并且無法導(dǎo)出。這里的邏輯是強(qiáng)制 Informix 除去所有數(shù)據(jù)庫連接,然后在 Informix 引擎恢復(fù)時(shí)立即重命名數(shù)據(jù)庫,以便其它應(yīng)用程序不能訪問我們要導(dǎo)出的數(shù)據(jù)庫。然后,就可以在沒有任何干擾的情況下導(dǎo)出數(shù)據(jù)庫了。

清單 2 顯示了該腳本中最重要的函數(shù),split_schema 函數(shù)。

清單 2. split_schema 函數(shù)



###########################
# split schema            #
###########################
split_schema() {

#define file seperator
file_seperator0="^CREATE PROCEDURE"
file_seperator1="^{ TABLE"
file_seperator2="^create view"

TABLE_SQL=table.sql
PROC_SQL=proc.sql
REST_SQL=rest.sql

#copy old schema file

echo "Copying $EXPORTED_SQL ..."

cp ${EXPORTED_SQL} ${EXPORTRED_SQL}.orig

if [ "$?" -ne 0 ]
   then
     echo "error with creating files.please check directory permission"
     exit 1
fi

echo "arsing ${EXPORTED_SQL}..."

#parse into three parts

position0=$(( $(cat ${EXPORTED_SQL} | grep -n -i "$file_seperator0"  | head -1 |cut -f1 -d - 1 ))

position1=$(( $(cat ${EXPORTED_SQL} | grep -n -i "$file_seperator1"  | head -1 |cut -f1 -d - 1 ))

position2=$(( $(cat ${EXPORTED_SQL} | grep -n -i "$file_seperator2" | head -1 |cut -f1 -d - 1 ))

if [ $position0 -lt 0 ]
   then
     echo "First seperator $file_seperator0 is not found in file. "
     exit 1
elif [ $position1 -lt 0 ]
   then
     echo "Second seperator $file_seperator1 is not found in file."
     exit 1
elif [ $position2 -lt 0 ]
   then
     echo "Second seperator $file_seperator2 is not found in file."
     exit 1
fi

echo "$position0 $position1 $position2"

diff_12=`expr $position2 - $position1`


head -${position0} ${EXPORTED_SQL}>; ${EXPORTED_DIR}/${TABLE_SQL}

head -${position1} ${EXPORTED_SQL} | tail +${position0}  >; ${EXPORTED_DIR}/${PROC_SQL}

tail +${position1} ${EXPORTED_SQL} | head -${diff_12}  >;>;${EXPORTED_DIR}/${TABLE_SQL}

tail +${position2} ${EXPORTED_SQL} >; ${EXPORTED_DIR}/${REST_SQL}

mv ${EXPORTED_DIR}/${TABLE_SQL} ${EXPORTED_SQL}

}



這是腳本的核心,腳本的邏輯中詳細(xì)說明了這一邏輯。該函數(shù)在用清單 3 中所示的 export_db 函數(shù)導(dǎo)出了 big_db 之后,立即調(diào)用。

清單 3. export_db 函數(shù)


#############
# export_db #
#############
export_db() {

   date

   DB=$1
   lockedDB=$2
   EXPORTED_SQL="$EXPORT_PATH/$lockedDB.exp/$lockedDB.sql"
   EXPORTED_DIR="$EXPORT_PATH/$lockedDB.exp"

   if [ -d "$EXPORT_PATH/$lockedDB.exp" ]; then
      echo "Moving $EXPORT_PATH/$lockedDB.exp to another directory."
      mv $EXPORT_PATH/$lockedDB.exp $EXPORT_PATH/$lockedDB.exp.old
   fi

   if [ "$DB" = "small_db2" ]
   then
      su - informix -c "echo 'grant dba to root' | $DBACCESS $DB; exit 0"
   fi

   rename_db $DB $lockedDB

   echo "Exporting the $lockedDB database. Please Wait..."
   
   $DBEXPORT -q $lockedDB -o $EXPORT_PATH -ss
   
   ok=`grep "dbexport comleted" dbexport.out`

   if [ "$ok" = "dbexport completed" ]
   then
      echo "dbexport completed with no error."
   else
      echo "Check dbexport.out file; your export has problems!"
      tail dbexport.out
      exit 1;
   fi

   rename_db $lockedDB $DB

   if [ "$DB" = "big_db" ]
   then
      split_schema
   fi

}



正如前面我們提到的,export_db 是腳本的主要函數(shù)之一,所以讓我們?cè)俣嘌芯垦芯俊?br />
首先,該函數(shù)調(diào)用 rename_db 函數(shù)。目的是獲取對(duì)要導(dǎo)出的數(shù)據(jù)庫的獨(dú)占訪問,這樣就可以在不受其它程序干擾的情況下導(dǎo)出它。然后,該函數(shù)導(dǎo)出數(shù)據(jù)庫。注:在導(dǎo)出數(shù)據(jù)庫時(shí)它使用安靜方式。由于安靜方式在屏幕上不顯示導(dǎo)出期間的錯(cuò)誤和警告,所以在導(dǎo)出數(shù)據(jù)庫后檢查一下 dbexport.out 極其重要;否則可能會(huì)遺漏錯(cuò)誤和警告。導(dǎo)出后,函數(shù)立即再次調(diào)用 rename_db 函數(shù)來重命名剛導(dǎo)出的數(shù)據(jù)庫,以便其它程序能夠訪問它。然后,該函數(shù)檢查數(shù)據(jù)庫名稱參數(shù)或自變量,以判斷它是否是 big_db。如果是 big_db,它將導(dǎo)出模式分成三部分。對(duì)于小型數(shù)據(jù)庫,我們不必分割它們的導(dǎo)出模式。

清單 4. 打開或關(guān)閉日志記錄的函數(shù)


                                       
###################
# turn on logging #
###################
turnonlogging() {

infxcon="/usr/informix/etc/onconfig"

cp ${infxcon} ${infxcon}.ori

cat $infxcon.ori |sed 's/^TAPEDEV.*$/TAPEDEV  \/dev\/null/' >; $infxcon

/usr/bin/su informix -c "ontape -s -U $1;exit 0"

cp ${infxcon}.ori ${infxcon}


}



清單 4 中函數(shù)的目的是:在導(dǎo)入大型數(shù)據(jù)庫時(shí)關(guān)閉日志記錄,這樣 dbimport 實(shí)用程序使用的邏輯日志數(shù)量最少,從而防止導(dǎo)入操作陷入“長事務(wù)”狀態(tài)并回滾。然后,在導(dǎo)入之后打開日志記錄。

清單 5 顯示如何調(diào)用該函數(shù)。

清單 5. import_db


                                       
#############
# import_db #
#############
import_db() {

   date

   DB=$1
   lockedDB=$2
   DBSPACE=$3
   EXPORTED_SQL="$EXPORT_PATH/$lockedDB.exp/$lockedDB.sql"
   EXPORTED_DIR="$EXPORT_PATH/$lockedDB.exp"

   echo "Importing the $lockedDB database. Please Wait..."

   if [ "$DB" = "big_db" ]
   then
       $DBIMPORT -q $lockedDB -d $DBSPACE -i $EXPORT_PATH  >;$TEMP3 2>;&1
       /usr/bin/su - informix -c "cat ${EXPORTED_DIR}/proc.sql | $DBACCESS $DB; exit 0"
       /usr/bin/su - informix -c "cat ${EXPORTED_DIR}/rest.sql | $DBACCESS $DB; exit 0"
       turnonlogging $DB
   else
            $DBIMPORT -q $lockedDB -d $DBSPACE -l -i $EXPORT_PATH  >;$TEMP3 2>;&1
   fi
   
   ok=`grep "dbimport completed" dbimport.out`

   if [ "$ok" = "dbimport completed" ]
   then
      echo "dbimport completed with no errors."
   else
      echo "Check dbimport.out; problems in dbimport."
      tail dbimport.out
      exit 1;
   fi

   rename_db $lockedDB $DB
   
}



import_db(清單 5)是腳本的另一個(gè)主要函數(shù)。它首先檢查傳入的數(shù)據(jù)庫名稱參數(shù)或自變量。如果是 big_db,它就使用 dbimport 實(shí)用程序處理導(dǎo)出模式的表部分,然后使用 UNIX pipe 實(shí)用程序編譯存儲(chǔ)過程、索引和觸發(fā)器。目的是:加速整個(gè)過程,并且(正如我前面提到的)通過以這種方法進(jìn)行,用于導(dǎo)入 big_db 的時(shí)間至少減少了 50-60%。對(duì)于 big_db,我們還要在導(dǎo)入前關(guān)閉日志記錄,并在導(dǎo)入后打開日志記錄,以避免“長事務(wù)”。我們只對(duì) big_db 這樣做;對(duì)于其它數(shù)據(jù)庫,我們相信有很多邏輯日志,而且根本不會(huì)陷入“長事務(wù)”。

腳本中的其余部分是創(chuàng)建一個(gè)用戶友好的且易于使用的菜單,我在本文中不作描述,但您可以自己在可下載的腳本中查看它。


結(jié)束語


正如您已看到的,腳本的核心是這樣一個(gè)邏輯:將導(dǎo)出模式分成三部分并用不同的 Informix dbimport 和 UNIX cat 實(shí)用程序來處理每個(gè)部分。對(duì)我們來說,這個(gè)方法比只使用 Informix dbimport 實(shí)用程序?qū)氪笮蛿?shù)據(jù)庫更有效;它大大加速了整個(gè)數(shù)據(jù)庫導(dǎo)入過程,而且更好地使用了 Informix 和系統(tǒng)資源(如邏輯日志和內(nèi)存)。由于腳本由許多函數(shù)組成,所以它非常靈活,可以方便地修改它以滿足特定需求。該腳本會(huì)在如何更有效地導(dǎo)入大型數(shù)據(jù)庫方面為您提供了一些實(shí)用的、有幫助的意見和建議。
作者: czw1413_cn    時(shí)間: 2003-11-27 19:15
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: xixihaha009    時(shí)間: 2003-11-28 10:38
標(biāo)題: 優(yōu)化大型數(shù)據(jù)庫導(dǎo)入
轉(zhuǎn)自哪里的? 我想看一下里面的圖示。
作者: lxbcd    時(shí)間: 2003-11-28 11:03
標(biāo)題: 優(yōu)化大型數(shù)據(jù)庫導(dǎo)入
http://www.douzhe.com/bbsjh/4/12024.html
作者: lxbcd    時(shí)間: 2003-11-28 11:04
標(biāo)題: 優(yōu)化大型數(shù)據(jù)庫導(dǎo)入
http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0208fan/0208fan_eng.shtml
作者: lxbcd    時(shí)間: 2003-11-28 11:07
標(biāo)題: 優(yōu)化大型數(shù)據(jù)庫導(dǎo)入
http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0208fan/0208fan_eng.shtml
[/url]




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2