db2编目抽取

最近迁移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 $?

  

时间: 2024-08-25 06:12:02

db2编目抽取的相关文章

DB2错误大全

sqlcode sqlstate 说明000 00000 SQL语句成功完成01xxx SQL语句成功完成,但是有警告+012 01545 未限定的列名被解释为一个有相互关系的引用+098 01568 动态SQL语句用分号结束+100 02000 没有找到满足SQL语句的行+110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统+111 01590 为2型索引设置了SUBPAGES语句+117 01525 要插入的值的个数不等于被插入表的列数+162 01514

DB2错误代码

db2错误代码大全 博客分类: 数据库 sqlcode sqlstate 说明 000 00000 SQL语句成功完毕 01xxx SQL语句成功完毕,可是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 01568 动态SQL语句用分号结束 +100 02000 没有找到满足SQL语句的行 +110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统 +111 01590 为2型索引设置了SUBPAGES语句 +117 01525 要

DB2错误码与错误说明对照表

sqlcode sqlstate 说明 000 00000 SQL语句成功完成   01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 01568 动态SQL语句用分号结束 +100 02000 没有找到满足SQL语句的行 +110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统 +111 01590 为2型索引设置了SUBPAGES语句 +117 01525 要插入的值的个数不等于被插入表的列数

DB2错误信息汇总

DB2错误信息(按sqlcode排序) sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 01568 动态SQL语句用分号结束 +100 02000 没有找到满足SQL语句的行 +110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统 +111 01590 为2型索引设置了SUBPAGES语句 +117 01525 要

DB2中错误代码池

工作中,在操作DB2数据库过程中,难免会出现一些这样那样的问题.对很多错误DB2都会有对应的SQL CODE和SQL State,通过SQL CODE和SQL State定位问题就很简单.现在把一个完整的SQLCODE和SQLState错误信息和相关解释作以下说明,一来可以自己参考,对DB2错误自行找出原因 sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +

db2 常见错误以及解决方案[ErrorCode SQLState]

操作数据库流程中,遇到许多疑问,很多都与SQL CODE和SQL State有关,现在把一个完整的SQLCODE和SQLState不正确信息和有关解释作以下说明,一来可以自己参考,对DB2不正确自行找出原由 sqlcode sqlstate 说明 格式说明:ErrorCode:-302 SQLState:22001 ------------------------------------------- 000 00000 SQL语句成功完成01xxx SQL语句成功完成,但是有警告+012 01

db2_errroecode

DB2错误信息(按sqlcode排序) sqlcode sqlstate 说明 000 00000 SQL语句成功完成   01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 01568 动态SQL语句用分号结束 +100 02000 没有找到满足SQL语句的行 +110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统 +111 01590 为2型索引设置了SUBPAGES语句 +117 01525

DB2Error

一个有相互关系的引用 +098 01568 动态SQL语句用分号结束 +100 02000 没有找到满足SQL语句的行 +110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统 +111 01590 为2型索引设置了SUBPAGES语句 +117 01525 要插入的值的个数不等于被插入表的列数 +162 01514 指定的表空间被置为检查挂起状态 +203 01552 使用非唯一的名字来解决命名的限定列 +204 01532 命名的对象未在DB2中定义 +206

SQL中常见sqlCode原因分析

000 | 00000 | SQL语句成功完成 01xxx | SQL语句成功完成,但是有警告 +012 | 01545 | 未限定的列名被解释为一个有相互关系的引用 +098 | 01568 | 动态SQL语句用分号结束 +100 | 02000 | 没有找到满足SQL语句的行 +110 | 01561 | 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统 +111 | 01590 | 为2型索引设置了SUBPAGES语句 +117 | 01525 | 要插入的值的个数不等于