【发布时间】:2021-11-18 13:02:51
【问题描述】:
我制作了这个脚本来备份和恢复 Informix 数据库。这是一个具有两个功能的菜单,为您提供两种选择:备份或恢复数据库。
该脚本将使用 dbexport 然后将备份存档到一个目录。
为了恢复数据库,我使用了 dbimport。
#!/bin/sh
###################################################################################
#Usage ./impexp.sh BASE USER ARCHIVE
###################################################################################
LOGO="DB IMPEXP"
#------------------------------------------------------
# Definition des variables
#------------------------------------------------------
BASE=$1
USER=$2
ARCHIVE=$3
export DBSTOR=/stored/bdd
export TEMPOF=/stored/tmp
ADATE=`date +%Y%m%d`
size_dbs=$(du "$BASE".exp | sed -e 's/\t.*$//')
size_dbs2=$((size_dbs*4))
#------------------------------------------------------
# MENU PROMPTS
#------------------------------------------------------
ymenu="y. backup BDD" ;
zmenu="z. restore archive " ;
#------------------------------------------------------
# MENU FUNCTION DEFINITIONS
#------------------------------------------------------
badchoice () { MSG="Invalid Selection ... Please Try Again" ; }
ypick () { echo "Backup BDD"
#------------------------------------------------
dbexport $BASE
mkdir -m 0777 -p "$DBSTOR"
tar -czvf $DBSTOR/$BASE.exp.$ADATE.tgz ./$BASE.exp && chmod 777 $DBSTOR/*
rm -rf ./$BASE.exp
rm -f ./dbexport.out
}
zpick () { echo "Restoring archive"
#---------------------------------------
cd $DBPATH
tar -xzvf $ARCHIVE
onspaces -a dbs_"$BASE"_01 -p /bases_data/data_"$BASE"_01.dbs -o 0 -s ${size_dbs2}
dbimport -q "$BASE" -d dbs_"$BASE"_01
echo "Import done"
}
#------------------------------------------------------
# DISPLAY FUNCTION DEFINITION
#------------------------------------------------------
themenu () {
# clear the screen
clear
echo `date`
echo
echo " " $LOGO
echo
echo " Please Select:"
echo
echo " " $ymenu
echo " " $zmenu
echo " "
echo " "
echo " x. Exit"
echo
echo $MSG
echo
echo Select by pressing the letter and then ENTER ;
}
MSG=
while true
do
themenu
read answer
MSG=
case $answer in
y|Y) ypick;;
z|Z) zpick;;
x|X) break;;
*) badchoice;;
esac
echo ""
echo "Press <ENTER> to return to the menu..."
read junk
clear
done
遗憾的是它不能正常工作,尤其是我有这些错误消息的备份部分:
create database
225 - Cannot create file for system catalog (systables).
131 - ISAM error: no free disk space
./impexp.sh: line 61: import_erreur: command not found
谢谢。
【问题讨论】:
-
在哪些方面不能正常工作?
-
@JonathanLeffler 老实说,我尝试按照您之前的建议使用 onbar,但失败得很惨,我无法理解如何在交互式 shell 上使用它并存储备份文件,我使用了 dbimport因为这对我来说更容易理解,但这是一个巨大的错误,需要花费太多时间,而且在某些机器上不起作用我在其他机器上存在文件夹权限问题,这是数据库用户权限。
-
在函数
ypick中,有一个else和一个fi,没有开始if。您可能应该只使用mkdir -p "$DBPATH"来创建目录。您不应将目录权限设置为777IMO;这是一个重大的安全风险。请改用 775 或 755。在现代 POSIX 系统(Linux 等)上,您应该能够指定mkdir -m 0755 -p "$DBPATH"。另请注意,DBPATH环境变量对 Informix 服务器具有特定含义,尽管它很少使用。除了破坏的 shell 语法,备份选项还有哪些问题? -
关于
import_erreur not found的消息是因为dbimport报告失败,退出状态为非零,然后您的脚本尝试调用import_erreur,但它不是脚本中的函数,而且不是这个之外的程序(脚本?)。空间不足错误意味着您的 Informix 服务器需要更多磁盘空间(将块添加到相关 dbspace),或者您需要删除不再需要的数据库。 -
您的问题是“特别是备份部分”,然后是有关创建数据库的错误消息。那个“备份”应该是“恢复”吗?
标签: informix