最近迁移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. hdu1873 看病要排队【优先队列】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 看病要排队 Time Limit: 3000/1000 MS (Java/Others)     ...

  2. [CC-LONCYC]Lonely Cycles

    [CC-LONCYC]Lonely Cycles 题目大意: \(T(T\le1000)\)组数据. 给定一张简单图(不含重边与自环),图中有\(n(n\le2\times10^5)\)个节点和\(m ...

  3. Flask启动原理,源码流程分析

    1.执行Flask的实例对象.run()方法 from flask import Flask,request,session app = Flask(__name__) app.secret_key ...

  4. 关于css的一些特别用法

    (1)input 怎么设置宽高用style来设置,<input style="width:111px;height:111px">(2)怎么让img和input在同一行 ...

  5. C# 不同类型对象同名属性赋值

    /// <summary> /// 不同类型对象同名属性赋值 /// </summary> /// <typeparam name="S">源类 ...

  6. [Visual Studio] NuGet发布自定义包(Library Package)

    源文章:dax.net http://www.cnblogs.com/daxnet/archive/2013/05/07/3064577.html 使用NuGet发布自己的类库包(Library Pa ...

  7. SQLite日期时间函数

    SQLite日期时间函数 SQLite支持以下五个日期时间函数: date(timestring, modifier, modifier, …) time(timestring, modifier, ...

  8. HTML:DOM 对象

    ylbtech-HTML:DOM 对象 1. Document 对象返回顶部 1-1. Document 对象 每个载入浏览器的 HTML 文档都会成为 Document 对象. Document 对 ...

  9. 【T02】理解子网和CIDR的概念

    1.IP地址分为5类,A.B.C.D.E,它们的前缀分别是: A:0 网络个数2^7,主机个数2^24,大概1千6百万 B:10 网络个数2^14,大概1万6千,主机个数2^16,大概6万5千 C:1 ...

  10. android 异常:ScrollView can host only one direct child

    android 采用ScrollView布局时出现异常:ScrollView can host only one direct child. 主要是ScrollView内部只能有一个子元素,即不能并列 ...