热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracleexp(expdp)数据迁移(生产环境,进行数据对以及统计信息的收集)

前言:客户需要迁移XX库ZJJJ用户(迁移到其他数据库),由于业务复杂,客户都弄不清楚里面有哪些业务系统&#x

前言:客户需要迁移XX 库 ZJJJ用户(迁移到其他数据库),由于业务复杂,客户都弄不清楚里面有哪些业务系统,为保持数据一致性,需要停止业务软件,中间件,杀掉oracle进程。

 温馨提示:很多网上资料只是简单的导入,导出(其实大家都会),并没有进行数据对比,以及统计信息的收集,就会业务反馈特别慢,原因是导入的数据还是原先的统计信息。

一、迁移数据倒出部分
=============================================================
1、前期准备

停止业务软件,中间件,杀掉oracle进程

ps -ef | grep LOCAL=NO | awk '{print $2}' | xargs kill -9

2、检查无效对象
--统计失效的对象:
select owner, object_type,status, count(*)
from dba_objects
where status='INVALID'
group by owner, object_type, status
order by owner, object_type;

结果如下:
OWNER OBJECT_TYPE STATUS COUNT(*)
------------------------------ ------------------- ------- ----------
ZJJJ PACKAGE BODY INVALID 1

 

--查看具体失效对象
col owner for a20;
col object_name for a32;
col object_type for a16
col status for a8
select owner, object_name, object_type, status
from dba_objects
where status='INVALID'
order by 1, 2,3;

OWNER OBJECT_NAME OBJECT_TYPE STATUS
-------------------- -------------------------------- ---------------- -------
ZJJJ PKG_XXFW_SMS PACKAGE BODY INVALID

--执行脚本编译数据库失效对象。
@$ORACLE_HOME/rdbms/admin/utlrp.sql

编译无效,需要业务人员手动编译。


3、EXP 按用户导出

用户 表空间
ZJJJ TBS_YW_DATA

select username,account_status,default_tablespace,temporary_tablespace from dba_users;

USERNAME ACCOUNT_STATUS DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ -------------------------------- ------------------------------ ---------------------
WEIXIN OPEN WEIXIN TEMP
ZJJJ OPEN TBS_YW_DATA TEMP
KETTLE OPEN USERS TEMP
SYS OPEN SYSTEM TEMP
SYSTEM OPEN SYSTEM TEMP


已选择24行。

 

select * from dba_sys_privs where grantee in ('ZJJJ') order by 1;

GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
ZJJJ CREATE TYPE NO
ZJJJ UNLIMITED TABLESPACE NO
ZJJJ CREATE TRIGGER NO
ZJJJ CREATE SEQUENCE NO
ZJJJ DEBUG CONNECT SESSION NO
ZJJJ CREATE PROCEDURE NO
ZJJJ CREATE TABLE NO
ZJJJ CREATE VIEW NO

已选择8行。

select * from dba_role_privs where grantee in('ZJJJ') order by 1;

GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
ZJJJ EXP_FULL_DATABASE NO YES
ZJJJ RESOURCE NO YES
ZJJJ IMP_FULL_DATABASE NO YES
ZJJJ CONNECT NO YES

设置字符集(expdp不用设置)

查看字符集:

SQL>select userenv('language') from dual;

AMERICAN _ AMERICA. ZHS16GBK

set nls_lang=AMERICAN_AMERICA.ZHS16GBK

exp system/oracle@CCDB direct=y recordlength=65535 buffer=104857600 file=d:/temp-2017-02-23/exp_zjjj.dmp log=d:/temp-2017-02-23/exp_zjjj.log feedback=10000 owner=zjjj

注释:如果不开并行,exp和expdp速度差距不大,我主张用expdp,尴尬的是领导要我用exp这种方式。
4、检查对象下表的具体行数

set serveroutput on size 1000000
set pages 50000
spool d:/temp-2017-02-23/laoku-zjjj.txt

DECLARE
v_cnt number;
BEGIN
FOR rec in (select 'ZJJJ.' || TABLE_NAME AS tanme from dba_tables where owner='ZJJJ' order by 1)
LOOP
execute immediate 'select count(*) from '||rec.tanme into v_cnt;
dbms_output.put_line(rpad(rec.tanme,40,'-')||v_cnt);
END LOOP;
END;
/
=============================================================

*********************************

二、迁移倒入部分
=============================================================
修改数据库默认参数

1、创建表空间&用户
SQL> select name from v$datafile;

NAME
------------------------------------------------------

+CCDG/dcpdb/datafile/system.260.933443685
+CCDG/dcpdb/datafile/sysaux.261.933443687
+CCDG/dcpdb/datafile/undotbs1.262.933443689
+CCDG/dcpdb/datafile/undotbs2.264.933443695
+CCDG/dcpdb/datafile/users.265.933443697

SQL>

create tablespace TBS_YW_DATA datafile '+CCDG' size 2G autoextend on next 500m;


create user ZJJJ identified by zjjj default tablespace TBS_YW_DATA;

grant EXP_FULL_DATABASE,RESOURCE,IMP_FULL_DATABASE,CONNECT to ZJJJ;

grant CREATE TYPE,UNLIMITED TABLESPACE,CREATE TRIGGER,CREATE SEQUENCE,DEBUG CONNECT SESSION,CREATE PROCEDURE,CREATE TABLE,CREATE VIEW to ZJJJ;

 

2、IMP按用户导入

设置字符集(impdp不用设置)

查看字符集:

SQL>select userenv('language') from dual;

AMERICAN _ AMERICA. ZHS16GBK

set nls_lang=AMERICAN_AMERICA.ZHS16GBK

imp system/oracle@ccdb fromuser=zjjj touser=zjjj file=d:/temp-2017-02-23/exp_zjjj.dmp log=d:/temp-2017-02-23/imp_zjjj.log feedback=100000 buffer=524288000

 

3、检查对象下表的具体行数

set serveroutput on size 1000000
set pages 50000
spool d:/temp-2017-02-23/xinku-zjjj.txt

DECLARE
v_cnt number;
BEGIN
FOR rec in (select 'ZJJJ.' || TABLE_NAME AS tanme from dba_tables where owner='ZJJJ' order by 1)
LOOP
execute immediate 'select count(*) from '||rec.tanme into v_cnt;
dbms_output.put_line(rpad(rec.tanme,40,'-')||v_cnt);
END LOOP;
END;
/

三、迁移数据进行对比部分:

进行导出文件d:/temp-2017-02-23/xinku-zjjj.txt 文件和导入文件d:/temp-2017-02-23/xinku-zjjj.txt  所有表行数的对比,确保无误。

注意:为确保数据一致性,一定要对比导入和导出数据行数是否一样,因为客户公司都是证券,基金等,每一条数据都很重要。


4、检查无效对象
--统计失效的对象:
select owner, object_type,status, count(*)
from dba_objects
where status='INVALID'
group by owner, object_type, status
order by owner, object_type


--查看具体失效对象
col owner for a20;
col object_name for a32;
col object_type for a16
col status for a8
select owner, object_name, object_type, status
from dba_objects
where status='INVALID'
order by 1, 2,3;


--执行脚本编译数据库失效对象。

@$ORACLE_HOME/rdbms/admin/utlrp.sql

 

5、收集对象统计信息

--查看表统计信息是否过期:
exec dbms_stats.flush_database_monitoring_info;

select owner, table_name,object_type,num_rows,sample_size,trunc(sample_size / num_rows * 100) estimate_percent,stale_stats, last_analyzed
from dba_tab_statistics
where
--table_name in upper('t1') and
owner = upper('ZJJJ')
and (stale_stats = 'YES' or last_analyzed is null);

SELECT Table_Name,Num_Rows,Blocks,Empty_Blocks,Avg_Space,Chain_Cnt,Avg_Row_Len,Sample_Size,Last_Analyzed
FROM Dba_Tables WHERE owner = upper('ZJJJ');


--查看表的直方图
select a.column_name,
b.num_rows,
a.num_distinct Cardinality,
round(a.num_distinct / b.num_rows * 100, 2) selectivity,
a.histogram,
a.num_buckets
from dba_tab_col_statistics a, dba_tables b
where a.owner = b.owner
and a.table_name = b.table_name
and a.owner = upper('ZJJJ');
--and a.table_name = upper('t1');


--对某一个schma收集统计信息

BEGIN
dbms_stats.gather_schema_stats(ownname=> 'ZJJJ',
estimate_percent => 100,
method_opt => 'for all columns size repeat',
no_invalidate => FALSE,
degree => 8,
cascade => TRUE);
END;
/


=============================================================

转:https://www.cnblogs.com/hmwh/p/8675375.html



推荐阅读
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • oracle安装时找不到启动,Oracle没有开机自启是怎么回事?这一步骤很重要
    重启Oracle数据库重启Oracle数据库包括启动Oracle数据库服务进程和启动Oracle数据库两步,大家继续往下看。按照《【Oracle】什么?作为DBA&# ... [详细]
author-avatar
xiaomanni521125655
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有