gbase8s之邏輯導出導入腳本(完美版本)

該腳本dbexport.sh用于快速導出庫和導入庫(使用多并發unload,和多并發dbload的方式)?

#!/bin/sh
#腳本功能:將數據導出成文本,遷移至其他實例
#最后更新時間:2023-12-19
#使用方法:
#1.執行該腳本
#2.輸入要導出的數據庫名稱后回車
#3.導出程序在后臺執行,可執行 ps -ef|grep dbaccess 監控是否所有表都導出完畢
#4.導出過程中,會在數據文件夾內自動生成數據導入 importdb.sh,執行該腳本可將數據導入至其他實例
#5.修正三個問題,第一個是外鍵的自動處理;第二個用dbload替換load解決了長事務的問題;第三實現了并行的dbload
#6.注意aix平臺沒有sed -i參數,可能會有問題,需要單獨處理
#7.通過dbload后臺執行的方式,并行加載數據,不建議同時使用dbaccess dbname idx.sql。這樣可能會帶來先創建索引,后倒入數據的現象checkRunDba(){RUNDBA=$(ps -ef | grep dbaccess | grep -v grep | wc -l)if [ ${RUNDBA} -ge 20 ]; thenreturn 1elsereturn 0fi
}if [ $# -lt 1 ]; thenread -p "Please input database name: " DBNAME
elseDBNAME=$1
fiBACKDIR=BAK-${DBNAME}-$(date +%Y%m%d%H%M)
mkdir -p $BACKDIR/ctl
mkdir -p $BACKDIR/log
cd $BACKDIRexport DBDATE=Y4MD-
# env file
env | egrep '(DB_LOCALE|CLIENT_LOCALE|GL_|DBDATE)' | awk -F'=' '{if($0~/ /){print "export "$1"=\047"$2"\047"}else{print "export "$1"="$2}}' > ${DBNAME}_env_filedbschema -d ${DBNAME} -q -ss ${DBNAME}.sql
if [ ! $? -eq 0 ]; thenecho "Dbschema out error."exit 1
fidbaccess ${DBNAME} - << EOF >/dev/null 2>&1unload to BAK_tabname.unl delimiter ' 'SELECT t.tabname,t.ncols, p.nrows::int8 nrowsFROM systables t, sysmaster:sysptnhdr pWHERE t.tabid > 99AND t.tabtype = 'T'AND t.partnum = p.partnumUNIONSELECT t.tabname,t.ncols,sum(p.nrows)::int8 nrowsFROM systables t, sysfragments f, sysmaster:sysptnhdr pWHERE t.tabid > 99AND t.tabtype = 'T'AND t.tabid = f.tabidAND f.fragtype = 'T'AND f.partn = p.partnumGROUP BY 1,2;
EOFwhile read TAB NCOL NROWS
do
{dbaccess ${DBNAME} - << EOF >/dev/null 2>&1set isolation to dirty read;unload to ${TAB}.unl select * from ${TAB};
EOF
}&while truedocheckRunDbaif [ $? -eq 0 ]; thenbreakelsesleep 5fidone
done < BAK_tabname.unl# 建表語句和建索引語句分離,允許去除主鍵、約束名稱
echo "set pdqpriority 96;" > IDX_${DBNAME}.sql
sed -n '/revoke usage /,$p' ${DBNAME}.sql >> IDX_${DBNAME}.sql
sed -i '/revoke usage /,$d' ${DBNAME}.sql
#sed 's/check \(.*\) constraint .*,/check \1,/g;s/unique \(.*\) constraint .*,/unique \1,/g;s/primary key \(.*\) constraint .*,/primary key \1,/g' ${DBNAME}.sql > nocon_${DBNAME}.sql
#if [ -f nocon_${DBNAME}.sql ]; then
#  sed -i 's/check \(.*\) constraint .*/check \1/g;s/unique \(.*\) constraint .*/unique \1/g;s/primary key \(.*\) constraint .*/primary key \1/g' ${DBNAME}.sql nocon_${DBNAME}.sql
#fi# 導出注釋
dbaccess ${DBNAME} - << EOF >/dev/null 2>&1-- tabcomm, delimiter '\t' (ctrl + i)unload to _tmp_table_comment.unl delimiter '  'select 'comment on table ' || tabname || ' is ''' || replace(comments, chr(39), '''''') || ''';' as comment from syscomments;-- colcomm, delimiter '\t' (ctrl + i)unload to _tmp_column_comment.unl delimiter '  'select 'comment on column ' || tabname || '.' || colname || ' is ''' || replace(comments, chr(39), '''''') || ''';' as commentfrom syscolcomments;
EOFif [ -f _tmp_table_comment.unl ]; thencat _tmp_table_comment.unl > COMM_${DBNAME}.sqlrm -f _tmp_table_comment.unl
fiif [ -f _tmp_column_comment.unl ]; thencat _tmp_column_comment.unl >> COMM_${DBNAME}.sqlrm -f _tmp_column_comment.unl
ficat << EOF  > importdb.sh
#!/bin/sh
# filename : importdb.shcheckRunDbl(){RUNDBA=\$(ps -ef | grep 'dbload \-d ${DBNAME}' | grep -v grep | wc -l)if [ \${RUNDBA} -gt \${1:-20} ]; thenreturn 1elsereturn 0fi
}if [ -f ${DBNAME}_env_file ]; then. ./${DBNAME}_env_file
fidbaccess ${DBNAME} ${DBNAME}.sql 2>${DBNAME}_error_run.log
if [ ! \$? -eq 0 ]; thenecho "Load schema error! Please check if Database [ ${DBNAME} ] exists, or/and DDL error/warning at ${DBNAME}_error_run.log. "echo "Some version has 'create implicit cast ... ' in ${DBNAME}.sql file, you need to delete them. "exit 1
fiawk '{sum+=$3}END{printf("Rows: %d for database: ${DBNAME} will load.\n",sum)}' BAK_tabname.unlwhile read TAB NCOL NROWS
docat << ! > ./ctl/\${TAB}.ctl 2>/dev/null
FILE \${TAB}.unl DELIMITER '|' \${NCOL};
INSERT INTO \${TAB};
!
done < BAK_tabname.unlwhile read TAB NCOL NROWS
do
{dbload -d ${DBNAME} -c ./ctl/\${TAB}.ctl -n 5000 -l ./log/\${TAB}.log
}&while truedocheckRunDblif [ \$? -eq 0 ]; thenbreakelsesleep 5fidone
done < BAK_tabname.unlwhile true
docheckRunDbl 0if [ \$? -eq 0 ]; thenbreakelsesleep 5fi
doneif [ -f IDX_${DBNAME}.sql ]; thendbaccess ${DBNAME} IDX_${DBNAME}.sql > ./log/IDX_${DBNAME}.log 2>&1if [ ! \$? -eq 0 ]; thenecho "Create index had error, check ./log/IDX_${DBNAME}.log"fi
fiif [ -f COMM_${DBNAME}.sql ]; thendbaccess ${DBNAME} COMM_${DBNAME}.sql > ./log/COMM_${DBNAME}.log 2>&1if [ ! \$? -eq 0 ]; thenecho "Comment on table had error, check ./log/IDX_${DBNAME}.log"fi
fiexit 0EOFchmod +x importdb.shexit 0

使用方式如下:

# 導出,生成目錄 BAK-庫名-時間
dbexport.sh 庫名
# 在新環境下創建同名庫
echo 'create database 庫名 with buffered log in datadbs01' | dbaccess - -
# 導入,進入生成的 BAK-庫名-時間 目錄
importdb.sh

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76050.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76050.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76050.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springMVC-攔截器詳解

攔截器 概述 SpringMVC的處理器攔截器類似于Servlet開發中的過濾器Filter,用于對處理器進行預處理和后處理。開發者可以自己定義一些攔截器來實現特定的功能。 過濾器與攔截器的區別&#xff1a;攔截器是AOP思想的具體應用。 過濾器 servlet規范中的一部分&#xff0c;任何ja…

網絡安全應急響應-系統排查

在網絡安全應急響應中&#xff0c;系統排查是快速識別潛在威脅的關鍵步驟。以下是針對Windows和Linux系統的系統基本信息排查指南&#xff0c;涵蓋常用命令及注意事項&#xff1a; 一、Windows系統排查 1. 系統信息工具&#xff08;msinfo32.exe&#xff09; 命令執行&#x…

基于YOLO的半自動化標注方法:提升鐵路視頻缺陷檢測效率

論文地址:https://arxiv.org/pdf/2504.01010 1. 論文結構概述 本文提出了一種半自動化標注方法,旨在解決鐵路缺陷檢測中大規模圖像/視頻數據集標注成本高、耗時長的問題。論文結構清晰,分為以下核心部分: ?引言(Introduction)? 強調傳統手動標注的痛點(耗時、易錯、…

Linux驅動開發:SPI驅動開發原理

前言 本文章是根據韋東山老師的教學視頻整理的學習筆記https://video.100ask.net/page/1712503 SPI 通信協議采用同步全雙工傳輸機制&#xff0c;拓撲架構支持一主多從連接模式&#xff0c;這種模式在實際應用場景中頗為高效。其有效傳輸距離大致為 10m &#xff0c;傳輸速率…

Android Hilt 教程

Android Hilt 教程 —— 一看就懂&#xff0c;一學就會 1. 什么是 Hilt&#xff1f;為什么要用 Hilt&#xff1f; Hilt 是 Android 官方推薦的 依賴注入&#xff08;DI&#xff09;框架&#xff0c;基于 Dagger 開發&#xff0c;能夠大大簡化依賴注入的使用。 為什么要用 Hi…

【算法手記11】NC41 最長無重復子數組 NC379 重排字符串

&#x1f984;個人主頁:修修修也 &#x1f38f;所屬專欄:刷題 ??操作環境:牛客網 目錄 一.NC41 最長無重復子數組 題目詳情: 題目思路: 解題代碼: 二.NC379 重排字符串 題目詳情: 題目思路: 解題代碼: 結語 一.NC41 最長無重復子數組 牛客網題目鏈接(點擊即可跳轉):NC41 最長…

C語言:字符串處理函數strstr分析

在 C 語言中&#xff0c;strstr 函數用于查找一個字符串中是否存在另一個字符串。它的主要功能是搜索指定的子字符串&#xff0c;并返回該子字符串在目標字符串中第一次出現的位置的指針。如果沒有找到子字符串&#xff0c;則返回 NULL。 詳細說明&#xff1a; 頭文件&#xf…

在windows下安裝spark

在windows下安裝spark完成 安裝過程&#xff1a;

MongoDB常見面試題總結(上)

MongoDB 基礎 MongoDB 是什么&#xff1f; MongoDB 是一個基于 分布式文件存儲 的開源 NoSQL 數據庫系統&#xff0c;由 C 編寫的。MongoDB 提供了 面向文檔 的存儲方式&#xff0c;操作起來比較簡單和容易&#xff0c;支持“無模式”的數據建模&#xff0c;可以存儲比較復雜…

【Java設計模式】第2章 UML急速入門

2-1 本章導航 UML類圖與時序圖入門 UML定義 統一建模語言(Unified Modeling Language):第三代非專利建模語言。特點:開放方法,支持可視化構建面向對象系統,涵蓋模型、流程、代碼等。UML分類(2.2版本) 結構式圖形:系統靜態建模(類圖、對象圖、包圖)。行為式圖形:事…

【4】搭建k8s集群系列(二進制部署)之安裝master節點組件(kube-apiserver)

一、下載k8s二進制文件 下載地址&#xff1a; https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG -1.20.md 注&#xff1a;打開鏈接你會發現里面有很多包&#xff0c;下載一個 server 包就夠了&#xff0c;包含了 Master 和 Worker Node 二進制文件。…

電子電氣架構 --- AUTOSAR 的信息安全架構

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 周末洗了一個澡,換了一身衣服,出了門卻不知道去哪兒,不知道去找誰,漫無目的走著,大概這就是成年人最深的孤獨吧! 舊人不知我近況,新人不知我過…

ROS2與OpenAI Gym集成指南:從安裝到自定義環境與強化學習訓練

1.理解 ROS2 和 OpenAI Gym 的基本概念 ROS2&#xff08;Robot Operating System 2&#xff09;&#xff1a;是一個用于機器人軟件開發的框架。它提供了一系列的工具、庫和通信機制&#xff0c;方便開發者構建復雜的機器人應用程序。例如&#xff0c;ROS2 可以處理機器人不同組…

【設計模式】創建型 -- 單例模式 (c++實現)

文章目錄 單例模式使用場景c實現靜態局部變量餓漢式&#xff08;線程安全&#xff09;懶漢式&#xff08;線程安全&#xff09;懶漢式&#xff08;線程安全&#xff09; 智能指針懶漢式(線程安全)智能指針call_once懶漢式(線程安全)智能指針call_onceCRTP 單例模式 單例模式是…

C語言之九九乘法表

一、代碼展示 二、運行結果 三、代碼分析 首先->是外層循環是小于等于9的 然后->是內層循環是小于等于外層循環的 最后->就是\n讓九九乘法表的格式更加美觀(當然 電腦不同 有可能%2d 也有可能%3d) 四、與以下素數題目邏輯相似 五、運行結果

自動化備份全網服務器數據平臺

自動化備份全網服務器數據平臺 項目背景知識 總體需求 某企業里有一臺Web服務器&#xff0c;里面的數據很重要&#xff0c;但是如果硬盤壞了數據就會丟失&#xff0c;現在領導要求把數據做備份&#xff0c;這樣Web服務器數據丟失在可以進行恢復。要求如下&#xff1a;1.每天0…

stm32+esp8266+機智云手機app

現在很多大學嵌入式畢設都要求云端控制&#xff0c;本文章就教一下大家如何使用esp8266去連接機智云的app去進行顯示stm32的外設傳感器數據啊&#xff0c;控制一些外設啊等。 因為本文章主要教大家如何移植機智云的代碼到自己的工程&#xff0c;所以前面的一些準備工作&#x…

時序數據庫 TDengine Cloud 私有連接實戰指南:4步實現數據安全傳輸與成本優化

小T導讀&#xff1a;在物聯網和工業互聯網場景下&#xff0c;企業對高并發、低延遲的數據處理需求愈發迫切。本文將帶你深入了解 TDengineCloud 如何通過全托管服務與私有連接&#xff0c;幫助企業實現更安全、更高效、更低成本的數據采集與傳輸&#xff0c;從架構解析到實際配…

【Java面試系列】Spring Boot中自動配置原理與自定義Starter開發實踐詳解 - 3-5年Java開發必備知識

【Java面試系列】Spring Boot中自動配置原理與自定義Starter開發實踐詳解 - 3-5年Java開發必備知識 引言 Spring Boot作為Java生態中最流行的框架之一&#xff0c;其自動配置機制和Starter開發是面試中的高頻考點。對于3-5年經驗的Java開發者來說&#xff0c;深入理解這些原理…

解決Spring Boot Test中的ByteBuddy類缺失問題

目錄 解決Spring Boot Test中的ByteBuddy類缺失問題前奏問題描述問題解決第一步&#xff1a;移除ByteBuddy的特定版本號第二步&#xff1a;更新maven-surefire-plugin配置第三步&#xff1a;清理并重新構建項目 結語 解決Spring Boot Test中的ByteBuddy類缺失問題 前奏 今天&…