Informix跨不同数据库创建表同义词的shell脚本实现问题
Informix同义词创建脚本调整方案
原有脚本错误点
- 末尾存在多余的
done关键字,无对应循环结构,执行直接报错 dbaccess调用方式错误:不支持直接将SQL语句作为命令行参数传入,需要通过标准输入传递SQL- 同义词语法逻辑反向:
CREATE SYNONYM后接待创建的同义词名称,FOR后接实际映射的源表,原脚本参数顺序完全颠倒 - 变量拼写存在笔误:
dtabase应为database,易引发后续维护错误
修复后脚本
单表处理版本
保存为cresyn.sh:
#!/bin/sh # USAGE : cresyn.sh {带数据的源库名} {无数据的目标库名} {表名} database_with_data=$1 database_no_data=$2 table=$3 # 连接目标库创建指向源库对应表的同义词 dbaccess ${database_no_data} <<EOF CREATE SYNONYM ${table} FOR ${database_with_data}:${table}; EOF
执行方式:
sh cresyn.sh gcd001 dde002 tab1 sh cresyn.sh gcd001 dde002 tab2 sh cresyn.sh gcd001 dde002 tab3
批量处理版本
针对3张固定表可直接用批量版本,保存为cresyn_batch.sh:
#!/bin/sh # USAGE : cresyn_batch.sh {带数据的源库名} {无数据的目标库名} database_with_data=$1 database_no_data=$2 target_tables="tab1 tab2 tab3" for table in ${target_tables} do dbaccess ${database_no_data} <<EOF CREATE SYNONYM ${table} FOR ${database_with_data}:${table}; EOF done
执行方式:
sh cresyn_batch.sh gcd001 dde002
注意事项
- 执行脚本的操作系统用户需要具备两个数据库的访问权限,以及目标库的同义词创建权限
- 如果表存在指定属主,需要将SQL修改为
CREATE SYNONYM ${table} FOR ${database_with_data}:${表属主}.${table}; - 如果需要在源库也创建指向目标库的同义词,只需将SQL中两个数据库的位置互换即可
内容的提问来源于stack exchange,提问作者TenEM
相关产品推荐
相关产品推荐

