dmpinfo.sh
用来简单收集dmp文件包含的信息。请自行验证。
#!/bin/bash
# dmpinfo.sh
# Oracle Dmp文件简单信息收集
# 20200825 CYM
# 20201123 收集dmp表空间信息
# 判断参数$1存在
if [ x$1 != x ]; then
# 打印文件名
echo "导出文件: $1"
filetype=$(strings $1 | head -3 | grep SYS_EXPORT)
# EXPDP 文件信息收集
if [ z$filetype != z ]; then
ln=$(strings $1 | head -3 | awk '/SYS_EXPORT/{print NR}')
echo "导出命令: expdp"
ln11=$(strings $1 | head -$ln | tail -1 | cut -d '.' -f1)
echo "登录用户:" $ln11
ln2=$(strings $1 | head -$((ln + 1)) | tail -1)
echo "导出操作系统: $ln2"
ln3=$(strings $1 | head -$((ln + 2)) | tail -1)
echo "导出实例名: $ln3"
ln4=$(strings $1 | head -$((ln + 3)) | tail -1)
echo "导出字符集: $ln4"
ln5=$(strings $1 | head -$((ln + 4)) | tail -1)
echo "导出版本: $ln5"
ln12=$(strings $1 | head -$ln | tail -1 | awk -F '.' '{print $2}' | awk -F '_' '{print $3}')
echo "导出级别:" $ln12
# 如果是SCHEMA级别导出,则输出导出的SCHEMAS
if [ $ln12 = SCHEMA ]; then
echo ---------------------
echo SCHEMAS=$(strings $1 | grep 'IN (' | sed 's/.*IN (.*)/1/g')
echo ---------------------
fi
else
# EXP 文件信息收集
echo "导出命令: exp"
ln1=$(strings $1 | head -1)
echo "EXP 版本:" $ln1
# 用户判断
ln2=$(strings $1 | head -2 | tail -1)
echo "登录用户: ${ln2:1}"
if [ ${ln2:0:1} = "U" ]; then
echo "特殊权限: 无"
elif [ ${ln2:0:1} = "D" ]; then
echo "特殊权限: exp_full_database 或 DBA"
fi
#表空间判断
echo 表空间:`strings $1 | grep ' TABLESPACE ' |sed -r 's/.*"(.+)".*/1/'|sort|uniq`
# 导出对象判断
ln3=$(strings $1 | head -3 | tail -1)
if [ $ln3 = "RTABLES" ]; then
echo "导出级别: TABLES"
# 输出包含的表
echo ---------------------
echo "TABLES=$(strings $1 | grep -i 'CREATE TABLE' | awk '{print $3}' | sort | uniq | awk BEGIN{RS=EOF}'{gsub(/
/,",");print}')"
echo ---------------------
elif [ $ln3 = "RUSERS" ]; then
echo "导出级别: OWNERS"
# 输出包含的OWNERS
echo ---------------------
OWNERS=$(strings $1 | head -500 | grep '^CONNECT ' | sort | uniq | awk '{print $2}' | awk BEGIN{RS=EOF}'{gsub(/
/,",");print}')
if [ ! $OWNERS ]; then
echo "OWNERS=${ln2:1}"
else
echo "OWNERS=$OWNERS"
fi
echo ---------------------
elif [ $ln3 = "RENTIRE" ]; then
echo "导出级别: FULL=Y"
fi
fi
else
echo ""
echo "Usage: $0 filename"
echo "说明:1.脚本不主动判断是否Oracle导出文件"
echo " 2.不支持多文件信息同时收集"
fi
效果大概如下:
- EXP 表级导出
[oracle@oracle ~]$ ./dmpinfo.sh scott_tables.dmp
导出文件: scott_tables.dmp
导出命令: exp
EXP 版本: TEXPORT:V11.02.00
导出用户: SYSTEM
特殊权限: exp_full_database 或 DBA
导出级别: TABLES
---------------------
TABLES="DEPT","EMP"
---------------------
- EXP 用户级导出
[oracle@oracle ~]$ ./dmpinfo.sh cym.dmp
导出文件: cym.dmp
导出命令: exp
EXP 版本: TEXPORT:V11.02.00
导出用户: CYM
特殊权限: 无
导出级别: OWNERS
---------------------
OWNERS=CYM
---------------------
- EXPDP 表级导出
[oracle@oracle ~]$ ./dmpinfo.sh expdp_tables.dmp
导出文件: expdp_tables.dmp
导出命令: expdp
导出用户: "SYSTEM"
导出操作系统: x86_64/Linux 2.4.xx
导出实例名: orcl
导出字符集: AL32UTF8
导出版本: 11.02.00.04.00
导出级别: TABLE
- EXPDP 用户级导出
[oracle@oracle ~]$ ./dmpinfo.sh expdp_schemas.dmp
导出文件: expdp_schemas.dmp
导出命令: expdp
导出用户: "SYSTEM"
导出操作系统: x86_64/Linux 2.4.xx
导出实例名: orcl
导出字符集: AL32UTF8
导出版本: 11.02.00.04.00
导出级别: SCHEMA
---------------------
SCHEMAS=('CYM','SCOTT')
---------------------