You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Informix数据库备份还原Shell脚本执行报错问题排查求助

问题根源排查
  • 磁盘空间不足错误(225/131):
    1. dbexport默认将导出数据存放在脚本执行的当前工作目录,若当前目录剩余空间小于数据库导出大小,就会触发ISAM无可用磁盘空间报错。
    2. 脚本中size_dbs、size_dbs2的赋值时机错误:脚本启动时就执行du "$BASE".exp,但此时dbexport还未运行,$BASE.exp目录不存在,计算出来的size_dbs为空值,后续还原环节创建表空间时传入的空间大小为0,导致无法创建系统表。
  • import_erreur: command not found错误:你实际运行的脚本第61行调用了未定义的命令/函数,你当前粘贴的脚本中无该行,属于代码输入错误。
  • 隐藏问题:还原环节引用的$DBPATH变量未定义,执行cd $DBPATH会跳转路径异常,导致后续解压、导入操作失败。
修复方案

你可以直接使用修改后的脚本,注意提前将路径参数改为你环境的实际配置:

#!/bin/sh
###################################################################################
#Usage  ./impexp.sh BASE USER ARCHIVE
###################################################################################
LOGO="DB IMPEXP"

#------------------------------------------------------
# 变量定义 请根据实际环境修改路径
#------------------------------------------------------
BASE=$1
USER=$2
ARCHIVE=$3
export DBSTOR=/stored/bdd
export TEMPOF=/stored/tmp
# 补全DBPATH定义
export DBPATH=/stored/restore
ADATE=`date +%Y%m%d`

#------------------------------------------------------
# MENU PROMPTS
#------------------------------------------------------
ymenu="y.  backup BDD"              ;
zmenu="z.  restore archive "         ; 

#------------------------------------------------------
# MENU FUNCTION DEFINITIONS
#------------------------------------------------------
badchoice () { MSG="Invalid Selection ... Please Try Again" ; } 
 

ypick () {     
    echo "Backup BDD"
    # 先切换到临时目录执行导出,避免当前目录空间不足
    cd $TEMPOF || { echo "临时目录不存在,备份失败"; return 1; }
    # 执行导出前先删除旧的导出目录,避免残留文件干扰
    rm -rf ./$BASE.exp ./dbexport.out

    dbexport $BASE || { echo "dbexport执行失败,备份终止"; return 1; }
    
    mkdir -m 0777 -p "$DBSTOR"
    
    tar -czvf $DBSTOR/$BASE.exp.$ADATE.tgz ./$BASE.exp && chmod 644 $DBSTOR/*

    rm -rf ./$BASE.exp
    rm -f  ./dbexport.out

    # 备份完成后再计算目录大小,供还原环节使用
    size_dbs=$(du -s "$DBSTOR/$BASE.exp.$ADATE.tgz" | awk '{print $1}')
    size_dbs2=$((size_dbs*4))
    echo "备份完成,备份文件路径:$DBSTOR/$BASE.exp.$ADATE.tgz,预估还原所需空间:$size_dbs2 KB"
}

zpick () {     
    echo "Restoring archive"
    cd $DBPATH || { echo "还原目录不存在,还原失败"; return 1; }
    rm -rf ./$BASE.exp

    tar -xzvf $ARCHIVE || { echo "归档解压失败,还原终止"; return 1; }
    # 解压后重新计算导出目录大小
    size_dbs=$(du -s ./$BASE.exp | awk '{print $1}')
    size_dbs2=$((size_dbs*4))
    
    onspaces -a dbs_"$BASE"_01 -p /bases_data/data_"$BASE"_01.dbs -o 0 -s ${size_dbs2} || { echo "表空间创建失败,还原终止"; return 1; }
    dbimport -q "$BASE" -d dbs_"$BASE"_01 || { echo "dbimport执行失败,还原终止"; return 1; }
    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

额外注意:

  1. 执行脚本前请确认$TEMPOF、$DBSTOR、$DBPATH对应的磁盘分区剩余空间充足,至少为数据库大小的5倍以上
  2. 请手动删除你实际脚本中第61行的import_erreur错误代码

内容的提问来源于stack exchange,提问作者TenEM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:24:05