LINUX 平台上的 ORACLE 踩坑记 -- 之 IMP 导数据

本篇是 LINUX 平台上的 ORACLE 踩坑日记 -- 之 IMP 导数据


系统要迁移到新的数据库,先尝试了 RMAN 异机恢复,一步一坑地走到最后一步 ( 执行升级脚本 @$ORACLE_HOME/rdbms/admin/catupgrd.sql; ),但是各种报错。百度了一下,在浩如烟海的经验教训贴中翻到一篇(https://blog.youkuaiyun.com/couyifu7209/article/details/100378598  RMAN跨版本恢复--从Oracle10.2.0.5恢复到Oracle11.2.0.4  ),告诉我如下这个残酷的事实:
  下图是Oracle数据库升级路线,从图看到 Oracle10.2.0.1 不能直接升级到11gR2版本,至少需要先升级到10.2.0.2以后才可以升级到11gR2,必须是10.2.0.2以上或者是10.1.0.5版本才可以直接升级到11gR2。
 

 查看 oracle 版本:sqlplus -v 
 很不幸我的源数据库版本正好是: Oracle10.2.0.1
 而我的目标数据库版本正好是:11.2.0.4.0

就是说 RMAN 那些坑踩过就算是为未来哪天做准备了,这次是指望不上了。
 

于是开启 B 计划 -- 用传统的 imp 工具导数据。

先拎要点:(都是吐血踩坑得到的教训!)


1. EXP 导出时,不用全库导出,费时费力,只要导你的应用账号下的全部对象即可;


2. IMP 导入前,一定要将数据库运行模式切换为“非归档模式”(noarchivelog),否则归档日志增长太快,来不及删除,账号会被封;


3. IMP 导入前,建立你的应用账号XXXXUSER,为该账号建立并分配表空间,!!!为表空间添加足够多的数据文件!!!切记此点,否则会空间满了半途中止,浪费时间;

想要看为啥要有上述要点,请慢慢看后文解释。


用传统的 exp ,imp 导数据,分为如下两大步:

一. exp 将数据从源数据库导出:(先说全库导出,其它各种带条件导出,放到最后的附录中去)

    exp 工具在 $ORACLE_HOME/bin 目录下
    
    [oracle@jcpt bin]$ cd $ORACLE_HOME/bin
    [oracle@jcpt bin]$ exp -help   可以查 exp 命令的参数 。
    
    
    为了避免客户端关闭后,进程也被关闭,我们用 nohup 方式启动工具,让其到后台去运行。
    (nohup 是指 no hang up 的意思,就是不挂起。一般格式是:nohup cmd命令区 >>mynohup.out &   。
      最后这个 & 是指让进程后台运行,>>mynohup.out 则是将输出存放到当前目录下的 mynohup.out 日志文件中。
      nohup 方式启动进程后,按几次回车,会退出到 CMD 状态,然后请输入 exit 退出远程窗口,另开一个远程窗口,去看是否还有进程,以及 mynohup.out 日志文件是否有被刷新,就能看出进程是否还在执行 )
    
    
  [oracle@jcpt bin]$ nohup exp userid=system/manager@TestDB file=/home/data/oracle/backup/fullDB.dmp full=y log=/home/data/oracle/backup/exp_full.log & 
  
  参数:
  userid:是登录 ORACLE  账号和密码,只能用 system 用户,因为 system 是 DBA 账号,能访问所有的表;@TestDB 这里是 SID。
  file:定义要将备份的数据文件保存到哪里,最好给全路径文件名,清楚;
  log:定义将 EXP 过程输出信息保存到哪个日志文件中去,格式是纯文本。我们启动 EXP 命令后(大数据量的情况下,这是一个漫长的过程,好几个小时)到哪里去观察导出进度;
  full:默认值为  N,这里指定为  Y,表示全库导出,包括系统控制表的一切。
  
  注意:
  在真实应用中,其实我们往往会将应用数据保存到特定的用户下,其实只要到这个用户下的全部对象就可以了(含表、函数、存储过程、触发器等等)
  
    导某个用户的全部对象语法如下:
    [oracle@jcpt bin]$ exp userid=system/manager@TestDB file=/home/data/oracle/backup/fullDB.dmp  owner=(system,sys) log=/home/data/oracle/backup/exp_full.log 

 owner:就是要导哪个账号的全部对象。


    启动了 exp 进程后,可以如下方式去观察进程执行情况:
    
    1)ps -aux | grep exp
        如果列表中有刚刚执行的命令 exp,那就对了,证明正常起来进程了。
    2)top
      如果在 1 秒一刷新的列表中,偶尔能看到 exp 进程,证明正常运行中。
    3)观察 mynohup.out 日志,如果有被写的痕迹(从被改日期就能看出),那么证明进程正常运行中,可以打开看进度。
    
    然后就等着去取导出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值