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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2169 | 回復(fù): 5
打印 上一主題 下一主題

優(yōu)化大型數(shù)據(jù)庫(kù)導(dǎo)入 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2003-11-27 16:09 |只看該作者 |倒序?yàn)g覽
內(nèi)容   
  
簡(jiǎn)介
  
我們碰到的問(wèn)題
  
長(zhǎng)事務(wù)
  
長(zhǎng)編譯時(shí)間
  
解決問(wèn)題
  
系統(tǒng)的描述
  
腳本的邏輯
  
詳細(xì)理解腳本
  
結(jié)束語(yǔ)
  

簡(jiǎn)介


dbexport 和 dbimport 是 IBM Informix& 數(shù)據(jù)移動(dòng)實(shí)用程序,它們將數(shù)據(jù)庫(kù)從一臺(tái)機(jī)器移至另一臺(tái)。整個(gè)過(guò)程十分簡(jiǎn)單明了。dbexport 創(chuàng)建一個(gè)特殊目錄,在該目錄中它創(chuàng)建一個(gè)記錄當(dāng)前數(shù)據(jù)庫(kù)結(jié)構(gòu)的模式文件,然后將數(shù)據(jù)卸裝到每個(gè)數(shù)據(jù)庫(kù)對(duì)象的 ASCII 文件中?梢詫⒛切┠J胶蛿(shù)據(jù)文件保存在磁盤(pán)或磁帶上,然后通過(guò)使用 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ù)庫(kù)。與 dbexport 一樣,dbimport 也在用戶的當(dāng)前目錄中創(chuàng)建消息文件 dbimport.out,以記錄 dbimport 操作期間的錯(cuò)誤和警告。

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

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

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

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

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


我們碰到的問(wèn)題


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

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


長(zhǎng)事務(wù)


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


長(zhǎng)編譯時(shí)間


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


解決問(wèn)題


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


系統(tǒng)的描述


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

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


腳本的邏輯


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

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


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

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

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

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


詳細(xì)理解腳本


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

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

清單 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ì)說(shuō)明了這一邏輯。該函數(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ù)庫(kù)的獨(dú)占訪問(wèn),這樣就可以在不受其它程序干擾的情況下導(dǎo)出它。然后,該函數(shù)導(dǎo)出數(shù)據(jù)庫(kù)。注:在導(dǎo)出數(shù)據(jù)庫(kù)時(shí)它使用安靜方式。由于安靜方式在屏幕上不顯示導(dǎo)出期間的錯(cuò)誤和警告,所以在導(dǎo)出數(shù)據(jù)庫(kù)后檢查一下 dbexport.out 極其重要;否則可能會(huì)遺漏錯(cuò)誤和警告。導(dǎo)出后,函數(shù)立即再次調(diào)用 rename_db 函數(shù)來(lái)重命名剛導(dǎo)出的數(shù)據(jù)庫(kù),以便其它程序能夠訪問(wèn)它。然后,該函數(shù)檢查數(shù)據(jù)庫(kù)名稱參數(shù)或自變量,以判斷它是否是 big_db。如果是 big_db,它將導(dǎo)出模式分成三部分。對(duì)于小型數(shù)據(jù)庫(kù),我們不必分割它們的導(dǎo)出模式。

清單 4. 打開(kāi)或關(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ù)庫(kù)時(shí)關(guān)閉日志記錄,這樣 dbimport 實(shí)用程序使用的邏輯日志數(shù)量最少,從而防止導(dǎo)入操作陷入“長(zhǎng)事務(wù)”狀態(tài)并回滾。然后,在導(dǎo)入之后打開(kāi)日志記錄。

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

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


結(jié)束語(yǔ)


正如您已看到的,腳本的核心是這樣一個(gè)邏輯:將導(dǎo)出模式分成三部分并用不同的 Informix dbimport 和 UNIX cat 實(shí)用程序來(lái)處理每個(gè)部分。對(duì)我們來(lái)說(shuō),這個(gè)方法比只使用 Informix dbimport 實(shí)用程序?qū)氪笮蛿?shù)據(jù)庫(kù)更有效;它大大加速了整個(gè)數(shù)據(jù)庫(kù)導(dǎo)入過(guò)程,而且更好地使用了 Informix 和系統(tǒng)資源(如邏輯日志和內(nèi)存)。由于腳本由許多函數(shù)組成,所以它非常靈活,可以方便地修改它以滿足特定需求。該腳本會(huì)在如何更有效地導(dǎo)入大型數(shù)據(jù)庫(kù)方面為您提供了一些實(shí)用的、有幫助的意見(jiàn)和建議。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2003-11-27 19:15 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2003-11-28 10:38 |只看該作者

優(yōu)化大型數(shù)據(jù)庫(kù)導(dǎo)入

轉(zhuǎn)自哪里的? 我想看一下里面的圖示。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2003-11-28 11:03 |只看該作者

優(yōu)化大型數(shù)據(jù)庫(kù)導(dǎo)入

http://www.douzhe.com/bbsjh/4/12024.html

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2003-11-28 11:04 |只看該作者

優(yōu)化大型數(shù)據(jù)庫(kù)導(dǎo)入

http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0208fan/0208fan_eng.shtml

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2003-11-28 11:07 |只看該作者

優(yōu)化大型數(shù)據(jù)庫(kù)導(dǎo)入

http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0208fan/0208fan_eng.shtml
[/url]
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP