ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 我的一个expdp/impdp任务总结

我的一个expdp/impdp任务总结

原创 Linux操作系统 作者:coolhe 时间:2010-07-15 10:43:54 0 删除 编辑

本次数据库移植有以下几个步骤,每个步骤有分解,详细如下

1. 从41机器上导出数据 10-15分钟
2. 从41机器上把导出的数据ftp到15机器的/fs2/dump目录下 15-20分钟左右
3. 从把41导出的数据导入到15机器上 2:30左右

-------1. 从41机器上导出数据
1.1 如果是要正式的数据库移植,需要确定41数据库没有其他的用户连接,并且没有其他的事务进行。
    -- 切断41机器和外界网络的连接
1.2 用expdp命令进行导出数据.expdp命令只能用在服务端执行,并且只能是10g以上的版本,命令如下:
    --在41机器上执行的expdp导出命令
    --expbp导出用户全部对象多个文件, 每个文件4G, 导出的文件为后面带日期,该导出过程需要10-15分钟
    --该命令需要在/tmp/dump目录下执行,执行之后应该能看到6个相关文件,5个dmp文件 1个exp.log文件,注意检查
    expdp gmm_zzrq/gmm_zzrq directory=dump_dir dumpfile=gmmdb_`date +"%Y%m%d%H%M%S"`_01.dmp,gmmdb_`date +"%Y%m%d%H%M%S"`_02.dmp,gmmdb_`date +"%Y%m%d%H%M%S"`_03.dmp,gmmdb_`date +"%Y%m%d%H%M%S"`_04.dmp,gmmdb_`date +"%Y%m%d%H%M%S"`_05.dmp  logfile=gmmdb_`date +"%Y%m%d%H%M%S"`_exp.log job_name=CASES_EXPORT parallel=2 FILESIZE=4G EXCLUDE=DB_LINK
   
-------2. 从41机器上把导出的数据ftp到15机器的/fs2/dump目录下
2.1 确认15机器上有/fs2/dump目录,如果没有说明15机器重新启动过,/fs2文件系统是另外挂接的一个设备,需要挂接。在/home/oracle目录下有个挂接脚本,用root用户执行下面的命令,即可挂接该设备,并能找到/fs2/dump文件夹,文件夹下面目前有些文件,可以删除以dmp后缀的文件,/fs2的空间是50G,空出一定的空间大小(35G以上), 空间查看命令:df -g 查看
    --挂接/fs2目录设备。root用户-------
    # sh /home/oracle/mountfs.sh
    --空间查看命令:
    # df -g

2.2 从41节点ftp到15上, 命令如下:
    在41机器的/tmp/dump目录下,注意ftp传输的时候一定要转成2进制的方式
    ####41机器
    # ftp 192.168.5.15
    user:oracle
    password:oracle
   
    ftp> cd /fs2/dump
    ftp> bi  
    ftp> prompt off
    ftp> mput gmmdb_<导出的日期>_*
   
   
    传输完毕,查询15机器上/fs2/dump文件夹下的文件是否和41机器的大小一样。该ftp传输时间在15-20分钟左右
   

 -------3. 从把41导出的数据导入到15机器上  
 --以下所有命令在15机器上执行
 
 3.1 查看rac的节点运行状态, 如果racdb2运行,需要关闭racdb2节点,执行命令3.2步骤,执行之后,继续使用该命令查看状态.
   --查看节点运行 
   srvctl status database -d racdb
   -- 显示如下: 说明racdb2已经停止
   Instance racdb1 is running on node db01
   Instance racdb2 is not running on node db02
 
   也可以用命令:crs_stat -t 查看
 
 3.2 停掉racdb2节点的实例
   --如果racdb2节点仍然在运行,用以下命令停止racdb2的实例
   --停止节点2命令
   srvctl stop instance -d racdb -i racdb2
  
 3.3 查看15现在的rac数据库是否存在用户gmm_zzrq以及gmm_zzrq的所有对象
   --查看是否能用gmm_zzrq登录,如果能登陆说明gmm_zzrq存在, 如果gmm_zzrq存在执行3.4命令
   sqlplus gmm_zzrq/gmm_zzrq

 3.4 删除15机器数据库中的gmm_zzrq用户和该用户下的所有对象
   ----级联删除用户gmm_zzrq及其该用户下的所有对象
   sqlplus system/oracle
  
   drop user gmm_zzrq cascade;
  
 3.5 执行导入
 
 3.5.1  编辑脚本 impdp_file.sh
  --注意dmp文件的时间修改一下
  impdp system/oracle directory=dump_dir15 dumpfile= gmmdb_20100702201351_01.dmp, gmmdb_20100702201351_02.dmp,  gmmdb_20100702201351_03.dmp, gmmdb_20100702201351_04.dmp, gmmdb_20100702201351_05.dmp LOGFILE=gmmdb_`date +"%Y%m%d%H%M%S"`_imp.log parallel=2 SCHEMAS=gmm_zzrq job_name=CASES_IMPORT
 
 3.5.2  把编辑好的脚本impdp_file.sh ftp到15机器的/fs2/dump文件夹下
 3.5.3  查看15机器的/fs2/dump文件夹下,是否有nohup.out文件,如果有的话,删除
  # rm /fs2/dump/nohup.out
  
 3.5.4  在15机器的/fs2/dump文件夹下执行脚本 impdp_file.sh,开始数据导入,该导入时间 在2:30左右
  nohup sh impdp_file.sh
  
  --在导入的过程中,可以用以下命令查看导入的状态
  cat nohup.out
 
 3.6 数据导入完全后,查看导入的log文件,检查是否导入有问题。根据以往的经验,应该最后有12个error,这个没有问题,只是过程和包的警告性错误。如果没有其他的错误,说明导入是成功的。
 
 3.7 检查导入成功之后,再手工导入原有的41机器上的db_link
 
 4 补充: 检查2个数据库库表数据的行数一致
   文件《数据量统计》
   过程: sp_static_tab
   表:   tb_static_tab
   该过程和表,在41数据库已经建立,在15机器上导入数据库之后,用gmm_zzrq建立以上表和过程。
   在41和15机器执行过程 sp_static_tab
  
   然后在15机器上查询数据,rows_diff=0说明2个数据库表行数一致
   select a.table_name,
     a.table_rows rows_15,
     b.table_rows rows_41,
     b.table_rows - a.table_rows rows_diff
       from tb_static_tab a, tb_static_tab@dmp_link b
       where a.table_name = b.table_name
     order by rows_diff;
 
  
 
 
 
 数据移植完毕!
 lucky!
 
 
 ------下面是常用的命令和脚步,在15机器上执行
 
 --查看crs状态
  crs_stat -t

--查看节点运行
  srvctl status database -d racdb
--停止节点2
  srvctl stop instance -d racdb -i racdb2
  --停止节点1
  srvctl stop instance -d racdb -i racdb1
--启动节点2
  srvctl start instance -d racdb -i racdb2  
  --启动节点1
  srvctl start instance -d racdb -i racdb1
  
   
--sql操作
sqlplus system/oracle

--查看是否有表CASES_IMPORT,如果有删除
select count(1) from CASES_IMPORT;
drop table CASES_IMPORT;

--级联删除用户gmm_zzrq
  drop user gmm_zzrq cascade;
  
   
--有哪些用户连接
--1.1
  select program, username,sid,serial# from v$session;
--1.2
  select program, username,sid,serial# from v$session
  where upper(username) ='GMM_ZZRQ';
 
--杀掉进程
  alter system kill session sid,serial#;
--查询段空间
  select segment_name, segment_type, bytes/1024/1024 size_mb from user_segments a
     

--问题1:执行drop user gmm_zzrq cascade;操作出现如下问题:
        ORA-01940: cannot drop a user that is currently connected
  解决:用SELECT SID,SERIAL# FROM V$SESSION WHERE USERNAME='GMM_ZZRQ';查询
  然后alter system kill session sid,serial#; 就ok了,但是要注意如果是集群RAC
  的话,就要多个节点都看看,否则会找不到相应的seesion.
   

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3090/viewspace-668063/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-14

  • 博文量
    118
  • 访问量
    614244