zoukankan      html  css  js  c++  java
  • Oracle Dmp文件简单信息收集

    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')
    ---------------------
    
  • 相关阅读:
    【重要】ASCII码表
    深入了解php opcode缓存原理
    php 请求参数限制
    【Demo】 生成二维码 和 条形码
    【Demo】HTML5 拍照上传
    jq cookie的使用
    vue.js中的v-for输出数组理解
    js无限轮播的写法
    HTML5视频的使用总结
    angular报错总计
  • 原文地址:https://www.cnblogs.com/plluoye/p/13565405.html
Copyright © 2011-2022 走看看