最近迁移DB2数据库从AIX到Linux平台:需要整理所有服务器编目,服务器有aix和linux,手动整理肯定较慢切容易出错,下面写脚本解决。

策略:

  1、编写脚本提取服务器编目的脚本,编目信息保存到文件。

  2、ansible分发到各台Linux服务器,aix没有ssh认证的需手动完成。

  3、ansible批量执行脚本,提取信息到文件。

  4、ansible拉取各台服务器编目信息文件到本机。

  5、本机编写脚本批处理,生成csv格式。

下面给出关键处理脚本:

获取编目信息到文件:

#!/bin/bash
#linux平台
db_host=`hostname`
db_ip=$(ifconfig -a | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2}' | awk -F':' '{print $2}')
who_am=`whoami` db2 list db directory > ${db_ip}_${who_am}_${db_host}.db
db2 list node directory > ${db_ip}_${who_am}_${db_host}.node #!/usr/bin/ksh
#aix平台
db_host=`hostname`
db_ip=`ifconfig -a | sed -n "5,5p" | awk '{print $2}'`
who_am=`whoami` db2 list db directory > ${db_ip}_${who_am}_${db_host}.db
db2 list node directory > ${db_ip}_${who_am}_${db_host}.node

批处理各台服务器编目:

#!/bin/bash
#bash $0 catadir linux|aix db|node
#脚本运行时有三个参数:
# 1、编目信息文件所在目录,
# 2、平台linux或aix
# 3、所要生成的编目类型,node或db if [ $# -ne 3 ]; then
echo "bash $0 catadir linux|aix db|node"
exit 1
fi cata_dir="$1"
os_sys="$2"
db_node="$3"
os_linux="linux"
os_aix="aix"
db="db"
node="node" catalog_node="catalog_node_`date +%F`"
catalog_db="catalog_db_`date +%F`" for file in $(find ${cata_dir} -name "*.${db_node}" | awk -F'/' '{print $2}')
do
#echo filename:$file
ip_user="${file%_*}"
db_host="${ip_user%_*}"
db_user="${ip_user#*_}"
#linux node
if [[ "${os_sys}"x = "${os_linux}"x && "${db_node}"x = "${node}"x ]]; then
cat ${cata_dir}/${file} | egrep 'Node name|entry type|Protocol|Hostname|Service name' | awk '{print $NF}' | awk '{printf $0","} NR%5==0 {print db_host","db_user}' db_host="$db_host" db_user="$db_user" >> ${catalog_node}
fi
#aix node
if [[ "${os_sys}"x = "${os_aix}"x && "${db_node}"x = "${node}"x ]]; then
cat ${cata_dir}/${file} | grep -e "节点名" -e "目录条目类型" -e "协议" -e "主机名" -e "服务名称" | awk '{print $NF}' | awk '{printf $0","} NR%5==0 {print db_host","db_user}' db_host="$db_host" db_user="$db_user" >> ${catalog_node}
fi
#linux db
if [[ "${os_sys}"x = "${os_linux}"x && "${db_node}"x = "${db}"x ]]; then
#间接db
cat ${cata_dir}/${file} | egrep 'alias|Database name|entry type|partition' | awk '{print $NF}' | grep -A 1 -B 2 "Indirect" | grep -v "\-\-" | awk '{printf $0","} NR%2==0 && NR%4!=0 {printf ","} NR%4==0 {print db_host","db_user}' db_host="$db_host" db_user="$db_user" >> ${catalog_db}
#远程db
cat ${cata_dir}/${file} | egrep 'alias|Database name|Node name|entry type|partition' | grep -A 1 -B 3 "Remote" | grep -v "\-\-" | awk '{print $NF}' |awk '{printf $0","} NR%5==0 {print db_host","db_user}' db_host="$db_host" db_user="$db_user" >> ${catalog_db}
fi
#aix db
if [[ "${os_sys}"x = "${os_aix}"x && "${db_node}"x = "${db}"x ]]; then
#间接db
cat ${cata_dir}/${file} | egrep '数据库别名|数据库名称|目录条目类型|目录数据库分区号' | awk '{print $NF}' | grep -A 1 -B 2 "间接" | grep -v "\-\-" | awk '{printf $0","} NR%2==0 && NR%4!=0 {printf ","} NR%4==0 {print db_host","db_user}' db_host="$db_host" db_user="$db_user" >> ${catalog_db}
#远程db
cat ${cata_dir}/${file} | egrep '数据库别名|数据库名称|节点名|目录条目类型|目录数据库分区号' | grep -A 1 -B 3 "远程"| grep -v "\-\-" | awk '{print $NF}' |awk '{printf $0","} NR%5==0 {print db_host","db_user}' db_host="$db_host" db_user="$db_user" >> ${catalog_db}
fi
done exit $?

  

db2编目抽取的更多相关文章

  1. 【DB2基础】DB2编目和数据库连接

    1.编目节点和编目数据库 编目(Catalog),是在本地或远程建立客户端到服务器的数据库连接的过程.其目的在于获取编目信息,即生成用来访问数据库的目录. 系统数据库目录包含一个列表和指针,通过目录可 ...

  2. DB2编目配置及管理

    打开命令:db2cmd 我一般打开的方式如下:                       (在db2)                                                 ...

  3. DB2 编目并访问远程数据库

    之后将逐步对项目上的DB2相关经验做个总结,梳理一下知识结构. 要远程操作数据库,首先要进行编目,分三个步骤: 1. 在客户端建立服务器端数据库的节点,编目远程节点. 格式如下: 1. CATALOG ...

  4. DB2 - 编目的解释

    编目(Catalog),是在本地或远程建立客户端到服务器的数据库连接的过程.其目的在于获取编目信息,即生成用来访问数据库的目录.系统数据库目录包含一个列表和指针,通过目录可以使 DB2 能够找到已知的 ...

  5. DB2 错误信息码

    000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 01568 动态SQL语句用分号结束 +1 ...

  6. DB2 SQLCODE 大全

    DB2错误信息sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 ...

  7. DB2中错误信息说明

    DB2错误信息SQLCODE SQLSTATE (按sqlcode排序) .分类: db2数据库 2012-10-19 11:35 2942人阅读 评论(0) 收藏 举报 db2sql存储table数 ...

  8. db2数据库sql报错信息

    sqlcode sqlstate 说明 000 00000 SQL语句成功完成   01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 ...

  9. DB2错误代码

    db2错误代码大全 博客分类: 数据库 sqlcode sqlstate 说明 000 00000 SQL语句成功完毕 01xxx SQL语句成功完毕,可是有警告 +012 01545 未限定的列名被 ...

随机推荐

  1. macOS下通过docker在局域网成功访问mysql5.6数据库

    1.获取mysql镜像 docker pull mysql:5.6 注意:此处之所以获取mysql5.6是因为mysql5.7在centos7中启动可能会报错, 2.查看镜像列表 docker ima ...

  2. long long or int

    long long or int 很多时候long long爆空间,int有时又不够 . 在算乘法的时候,要保证乘出来的中间项也不爆long long

  3. window版chrome 57.0.2970.0 (64-bit)滚动条的BUG

    有一个元素div,它有一个子元素ul,给div添加一个:hover样式{color: red},挡鼠标hover div时,字体变红. 当鼠标hover div时,ul字体变红,鼠标hover ul的 ...

  4. Python + Selenium + AutoIt 模拟键盘实现另存为、上传、下载操作详解

    前言 在web页面中,可以使用selenium的定位方式来识别元素,从而来实现页面中的自动化,但对于页面中弹出的文件选择框,selenium就实现不了了,所以就需引用AutoIt工具来实现. Auto ...

  5. SPOJTLE - Time Limit Exceeded(高维前缀和)

    题意 题目链接 题目的意思是给一个数组C,长度为n,每个数字的范围是2^m,然后要求构造一个数组a,满足 1.a[i] % C[i] !=0 ; 2.a[i] < 2^m ; 3.a[i] &a ...

  6. 潭州课堂25班:Ph201805201 并发(协程) 第十五课 (课堂笔记)

    #斐波那契 def fid(n): res = [] indx = 0 a = 0 b = 1 while indx < n : res.append(b) a,b = b,a+b indx + ...

  7. webstorm安装教程

    之前有些一些破解的,但是独独忘记了安装的这个教程,现在补上:见下: 先来一官方的解释:WebStorm是JetBrains 推出的一款强大的HTML5编辑工具,拥有丰富的代码快速编辑,可以智能的补全代 ...

  8. linux目录的权限

    Answer: When applying permissions to directories on Linux, the permission bits have different meanin ...

  9. Asp.Net Core中Json序列化处理整理

    一.Asp.Net Core中的Json序列化处理使用的是Newtonsoft.Json,更多参考:C# Newtonsoft.Json JsonSerializerSettings配置序列化操作,C ...

  10. ASP.NET Core -中间件(Middleware)使用

    ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...