首页 > 数据库 >oracle19c(CDB模式)_获取所有对象&&表数据脚本(迁移后数据比对)

oracle19c(CDB模式)_获取所有对象&&表数据脚本(迁移后数据比对)

时间:2023-09-18 17:45:55浏览次数:43  
标签:文件 oracle19c CDB object echo result && data pdb

oracle19c进行数据库迁移后,数据比对靠人工的话比较麻烦,通过如下脚本可以直接取数,获取对象及数据结果文件后,通过notpad++即可进行对比

脚本内容如下

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

#!/bin/bash
#202309 by jia.zhenhua
#auto check oracle19c CDB object && data


#########################脚本说明#########################

#1. 本脚本适用于oracle19c CDB模式,即存在pdb的场景;自动获取起动状态为 READ WRITE 而非 MOUNTED 的所有PDB的信息

#2. 脚本直接执行即可,不需要手工定义变量;脚本执行完成后,对象结果文件存放在/tmp/{pdb名称}_object_check_result.txt;数据结果文件存放在/tmp/{pdb名称}_data_check_result.txt

#3. 如果需要调整结果文件存放位置,那么调整变量中的 object_result  及 data_result 即可


#########################全局变量#########################

#定义系统自带用户
system_user="('SYS','SYSTEM','SYSRAC','SYSKM','SYSDG','SYSBACKUP','AUDSYS','OUTLN','GSMADMIN_INTERNAL','GSMUSER','DIP','XS$NULL','DBSFWUSER','REMOTE_SCHEDULER_AGENT','ORACLE_OCM','SYS$UMF','DBSNMP','APPQOSSYS','GSMCATUSER','GGSYS','ANONYMOUS','XDB','WMSYS','OJVMSYS','CTXSYS','SI_INFORMTN_SCHEMA','ORDDATA','ORDPLUGINS','ORDSYS','MDSYS','OLAPSYS','MDDATA','PDBADMIN')"


#########################脚本主体#########################


function get_blank(){
name_length=$(echo ${1}|awk '{print length($0)}')
let blank_length=${2}-${name_length}
reality_blank=$(seq -s " " $[${blank_length}+1]|sed 's/[0-90]//g')
echo -e "${1}${reality_blank}|"
}

#获取pdb名称

PdbList=`echo -e "show pdbs;" | sqlplus -S / as sysdba | grep "READ WRITE" | awk '{print $2}'`

if [[ -z "$PdbList" ]];then

echo "本数据库中不存在业务pdb!脚本执行结束!"
exit

else

echo "数据库中存在的业务pdb如下:"
echo ""
echo "$PdbList"

fi


for pdb in $PdbList
do

#如果存在pdb,则进入循环
if [[ -n "$pdb" ]];then

#定义对象结果存放文件,存放所有对象数量
object_result=/tmp/${pdb}_object_check_result.txt

#定义表数据结果存放文件,存放所有表行数
data_result=/tmp/${pdb}_data_check_result.txt


#给每个pdb创建存放对象结果文件
if [ -f "$object_result" ];then
echo "存放 ${pdb} 对象结果文件文件已存在,清空该文件"
cat /dev/null > $object_result
else
echo "存放 ${pdb} 对象结果文件文件不存在,创建该文件"
touch $object_result
fi

#给每个pdb创建存放数据结果文件
if [ -f "$data_result" ];then
echo "存放 ${pdb} 数据结果文件文件已存在,清空该文件"
cat /dev/null > $data_result
else
echo "存放 ${pdb} 数据结果文件文件不存在,创建该文件"
touch $data_result
fi

 


#1. 获取所有对象信息

echo "开始获取 ${pdb} object信息"

#%-10d指定第一列序号的长度
export ORACLE_PDB_SID=$pdb
objects_sum=`echo -e "set line 300 pages 999 long 999\n col OWNER for a30\n col OBJECT_TYPE for a30\n select owner,object_type,status,count(*) from dba_objects where owner not in $system_user and owner not like 'C##%' group by owner,object_type,status order by owner,object_type,status;" | sqlplus -S / as sysdba | grep -v 'selected'`

echo -e '\n' >> $object_result

if [ -n "$objects_sum" ];then
echo "PDB:${pdb} object对象类型、状态、数量详细信息:" >> $object_result
echo -e '\n' >> $object_result
echo "$objects_sum" >> $object_result
echo -e '\n' >> $object_result
else
echo "PDB:${pdb} object对象数量:0" >> $object_result
echo -e '\n' >> $object_result
fi

echo "${pdb} object信息获取完成"

 

#2. 循环获取数据库中每张表的数据量

#定义username变量,获取所有username名称(已排除系统用户)
export ORACLE_PDB_SID=$pdb
user_name_list=`echo -e "select distinct USERNAME from dba_users where USERNAME not in $system_user;" | sqlplus -S / as sysdba | grep -v "USERNAME\|^$\|selected\|-"`

echo "开始取数"

#循环获取每个表数量并打印
for us in $user_name_list
do
export ORACLE_PDB_SID=$pdb
tb_name_list=`echo -e "select distinct TABLE_NAME from dba_tables where owner in ('$us');" | sqlplus -S / as sysdba | grep -v "TABLE_NAME\|^$\|selected\|-"`

#若tb_name_list非空,则进入循环
if [[ -n "$tb_name_list" ]];then
for i in $tb_name_list
do
export ORACLE_PDB_SID=$pdb
tb_count=`echo -e "select /*+ parallel(4) */ count(*) from $us.$i;" | sqlplus -S / as sysdba | grep -v "COUNT\|^$\|-" | column -t`
x=$(get_blank $us 30)
y=$(get_blank $i 60)
echo "表$us.$i取数完成"
echo "$x$y$tb_count" >> $data_result
done
fi
done

echo "取数结束"

fi

done

echo "脚本执行结束!"

 

标签:文件,oracle19c,CDB,object,echo,result,&&,data,pdb
From: https://www.cnblogs.com/jzhsw/p/17712561.html

相关文章

  • Red Hat8.8 安装 Oracle19C,配置开机自动启动,创建数据库,调整内核参数
    1.下载rpm包oracle-database-ee-19c-1.0-1.x86_64.rpm2.上传rpm包上传下载的rpm包到响应目录,例如:/home3.安装依赖上传compat-libcap1-1.10-7.el7.x86_64.rpm和compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm包的相应目录例如:/home安装上传的两个rpm包#安......
  • AnalyticDBMySQL 存储过程
    AnalyticDBMySQL存储过程概述存储过程(StoredProcedure)是一组预编译的SQL语句集合,通过一个名称被调用和执行。在AnalyticDBMySQL中,存储过程可以被用于封装复杂的业务逻辑,提高性能和安全性。本文将介绍AnalyticDBMySQL存储过程的基本概念、使用方法,并提供一些示例代码。存储......
  • 传奇数据库教学-传奇MagicDb、MonsterDb、StditemDb数据库说明
    MagicDb:是你所修炼的法术和各种技能.(1)magsid物品代号(2)magname物品名称(3)effecttype效果属性(4)effect效果(放此魔法所产生的动画效果)(5)spell每次耗用魔法值(6)defspell升级后增加的每次耗用魔法值(7)defpower升级后增加的威力(8)defmaxpower升级后增加的最大(9)job......
  • ORA-65221 signalled during: alter pluggable database application APP$CDB$SYSTEM
    给一台Oracle19.12.0.0.0数据库应用补丁,升级到Oracle19.16.0.0.0时,做datapatch的时候,监控发现数据库的告警日志出现下面错误:2023-07-11T15:09:44.776403+08:00alter pluggable database application APP$CDB$SYSTEM begin install '1.0'ORA-65221 signalled during: ......
  • RPM安装的Oracle19c 修改init.ora进行修复以及最简单开机启动Oracle的方法
    RPM安装的Oracle19c修改init.ora进行修复以及最简单开机启动Oracle的方法背景今天开始使用自己心的ThinkBook14的笔记本因为已经没有了Linux测试环境供我使用.所以我就自己准备导入一个最开始的OpenEuler2203+Oracle19c的虚拟机.发现因为当时虚拟机是48G内存,但是我......
  • Oracle19C PDB中普通用户可以通过sqlplus scott/tiger连接吗
     Oracle19CPDB中普通用户可以通过sqlplusscott/tiger连接吗 先说结论,目前我还没找到方式。研究了挺久,通过百度,通过mos上搜索,也想通过触发器来实现,发现都不行。 先说sys用户,是可以的。通过设置ORACLE_PDB_SID这个环境变量,可以实现sys直接登录后连接到指定的PDB上。[o......
  • Oracle19C如何为PDB新建service
     Oracle19C如何为PDB新建service 在11g版本中,通常可以通过4种方式来新增service:通过修改service_names参数来新增,这个是比较常用的通过srvctladdservice(只适用于RAC或OracleRestart)通过配置$ORACLE_HOME/network/admin/listener.ora静态监听通过dbms_service 关......
  • 非Oracle Linux下Oracle 19c CDB数据库安装
    《非OracleLinux下安装Oracle19c》我们安装了non-cdb的19c数据库,通过这个脚本,还可以搭建cdb的数据库。1.修改安装脚本cp/etc/init.d/oracledb_ORCLCDB-19c/etc/init.d/oracledb_pdbisal-19c其中要改几处,ORACLE_SID改成新的,LISTENER_NAME改成新的,CREATE_AS_CDB之前我写的false,......
  • Oracle:OpenEuler 22.03 安装oracle19c
     #####################################################最小化安装openeuler-22.03-sp1,并更新到最新(写本文时:2023-06-01)关闭selinux关闭firewalld.service创建用户及用户组:oracle:oinstall创建推荐的目录:/u01,属主oracle:oinstallyuminstalllibnsllibnsl2-develliba......
  • 微信开源组件WCDB漫谈及Demo
    前言移动端的数据库选型一直是一个难题,直到前段时间看到了WeMobileDev(微信前端团队)放出了第三个开源组件-WCDBWCDB(WeChatDataBase)是微信官方的移动端数据库组件,致力于提供一个高效、易用、完整的移动端存储方案项目目录微信团队怎么说基于SQLCipherWCDB-iOS/MacWCDB-Android数......