Chinaunix首页 | 论坛 | 博客
  • 博客访问: 594943
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-23 13:53
个人简介

linux

文章分类

全部博文(66)

文章存档

2016年(1)

2015年(14)

2014年(32)

2013年(19)

分类: Oracle

2014-04-17 20:50:03


  1. 1. exp/imp(导出与导入)
  2. 1.1 基本命令
  3.     $exp help=y
  4.     $imp help=y
  5. 2.三种工作方式
  6. (1)交互方式:
  7.     $exp //然后按照提示输入所需要的参数
  8. (2)命令行方式:
  9.     $exp user/pwd@dbname file=/oracle/test.dmp full=y
  10. (3)参数文件方式:
  11.     $exp parfile=username.par //在参数中输入所需的参数
  12.     userid=username/userpassword
  13.     buffer=8192000
  14.     compress=n
  15.     grants=y
  16.     file=/oracle/test.dmp
  17.     full=y
  18. 3.三种模式
  19. (1)表方式,将指定表的素具导出/导入。
  20. 导出:
  21.     导出一张或几张表:
  22.     $exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table,table2
  23.     导出某张表的部分数据:
  24.     $exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1 query\"where coll=\'...\' and col2...;
  25. 导入:
  26.     导入一张表或几张表
  27.     $imp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1, table2 fromuser=dbuser touser=dbuser2 commit=y ignore=y
  28. (2)用户方式,将指定用户的所有对象及数据导入/导出
  29. 导出:
  30.     $exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=(xx ,yy)
  31.     只导出数据对象,不导出数据:
  32.     $exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=user rows=n
  33.     导入;
  34.     $imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser-dbuser touser=dbuser2 commit=y ignore=y
  35. (3)全库方式,数据库中的所有对象导出/导入
  36. 导出:
  37.     $exp user/pwd file=/dir/xxx.dmp log=xxx.log full=y commit=y ignore=y
  38. 导入:
  39.     $imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2

  40. 1.2高级选项
  41. 1.分割成多个文件
  42.     以多个文件固定大小文件方式导出:这种做法通常用在表数据量较大,单个dump文件可能会超出文件系统的限定的情况
  43.     $exp user/pwd file=1.dmp, 2.dmp, 3.dmp,...filesize=1000m log=xxx.log full=y
  44.     以多个固定大小文件方式导入:
  45.     $imp user/pwd file=1.dmp,2/dmp, 3.dmp.....filesize=1000m tables=xxx fromuser=dbuser touser=dbuser commit=y ignore=y

  46. 2.增量导出/导入
  47. 必须为SYS or SYSTEM 才可以增量导出/导入
  48. 增量导出:
  49.     (1)“完全”增量导出//备份整个数据库
  50.     $exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=complete
  51.     (2)增量型导出, 导出上一次备份后改变的数据
  52. `    $exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=incremental
  53.     (3)“累计型”增量导出,只导出自上次“完全”导出之后数据库中的变化了的信息
  54.     $exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=cumulative
  55. 增量导入:
  56.     $imp user/pwd full=y unctype=system/retore/inctype
  57.     其中:
  58.     system: 导入系统对象
  59.     retore: 导入所有用户对象

  60. 3.表空间传输    
  61.     1.关于表空间传输的规则:
  62.         源数据库和目标数据库必须运行在相同的硬件平台
  63.         源数据库与目标数据库一定要有相同到校的数据块
  64.         源数据库与目标数据库一定要有相同大小的数据块
  65.         目标数据库不能有与迁移表空间相同的表空间
  66.         SYS的对象不能迁移
  67.         必须传输自包含的对象集
  68.         有一些对象,如视图,基于函数的索引等不能被传输
  69.     2.检测一个表空间是否符合标准的方法:
  70.         SQL> exec sys.dbms_tts.transport_set_check('tablespace_name', true);
  71.         SQL>select * from sys.transport_set_Violations;
  72.     3.步骤:
  73.         1) 设置表空间为只读(空间名字假设:APP_Data and APP_Index)
  74.         SQl>alter tablespace app_data read only;
  75.         SQL>alter tablespace app_index read only;
  76.         2)发出EXP Command
  77.         SQL>host exp userid=''''''sys/password as sysdba''''''transport_tablespace=y
  78.         tablespaces=(app_data,app_index)
  79.         3)拷贝.dbf数据文件(及.dmp文件)到另一个地点,及目标数据库
  80.         cp(unix) or copy(Win)or 通过ftp传输文件
  81.         4)把本地的表空间设置为读写
  82.         $alter tablespace app_data read write;
  83.         $alter tablespace app_index read write;
  84.         5)在目标数据库附加数据文件(直接指定数据文件名)
  85.         transport_tablespace=y datafiles=("a:\app_data.dbf,C:\app_index.dbf")
  86.         tablespace=app_data,app_index tts_owner=hr,oe
  87.         6)设置目标数据库表空间读写
  88.         $alter tablespace app_data read write
  89.         $alter tablespace app_index read write
  90.  4.优化        
  91.     1. 加快exp速度
  92.         加大large_pool_size,可以提高exp 的速度
  93.         采用直接路径的方式(direct=y),数据不需要经过内存进行整合和检查.
  94.         设置较大的buffer,如果导出大对象,小buffer 会失败。
  95.         export文件不在ORACLE 使用的驱动器上
  96.         不要export到NFS 文件系统
  97.         UNIX环境:用管道模式直接导入导出来提高imp/exp 的性能
  98.     2. 加快imp速度
  99.         建立一个indexfile,在数据import完成后在建立索引
  100.         将import 文件放在不同的驱动器上
  101.         增加DB_BLOCK_BUFFERS
  102.         增加LOG_BUFFER
  103.         用非归档方式运行ORACLE:ALTER DATABASE NOARCHIVELOG;
  104.         建立大的表空间和回滚段,OFFLINE 其他回滚段,回滚段的大小为最大表的1/2
  105.         使用COMMIT=N
  106.         使用ANALYZE=N
  107.         单用户模式导入
  108.         UNIX环境:用管道模式直接导入导出来提高imp/exp 的性能
  109.     3. 通过unix/Linux PIPE管道加快exp/imp速度
  110.         通过管道导出数据:
  111.         1.通过mknod -p 建立管道
  112.         $ mknod /home/exppipe p // 在目录/home下建立一个管道exppipe注意参数p
  113.         2.通过exp 和gzip 导出数据到建立的管道并压缩
  114.         $ exp test/test file=/home/exppipe & gzip < /home/exppipe > exp.dmp.gz
  115.         $ exp test/test tables=bitmap file=/home/newsys/test.pipe &
  116.         gzip < /home/newsys/test.pipe > bitmap.dmp.gz
  117.         3.导出成功完成之后删除建立的管道
  118.         $ rm -rf /home/exppipe
  119.     导出脚本:
  120.         ###UNIX 下ORACLE 数据库通过PIPE 管道进行备份
  121.         ###### using "export" and "tar" command to bakup oracle datebase #######
  122.         trap "" 1 #nohup
  123.         LOGFILE=/opt/bakup/log/bakup_ora.log
  124.         export LOGFILE
  125.         DUMPDIR=/archlog_node1
  126.         export DUMPDIR
  127.         exec >$LOGFILE 2>&1
  128.         echo
  129.         echo ' Begin at ' `date`
  130.         echo
  131.         # clear old result file
  132.         cd $DUMPDIR
  133.         if [ -f exp.dmp.Z ]
  134.         then
  135.         echo "clear old result file"
  136.         rm exp.dmp.Z
  137.         fi
  138.         # make pipe
  139.         mkfifo exp.pipe
  140.         chmod a+rw exp.pipe
  141.         # gain the dmp.Z file
  142.         compress < exp.pipe > exp.dmp.Z&
  143.         su -u oracle -c "exp userid=ll/ll file=$DUMPDIR/exp.pipe full=y buffer=20000000
  1.         echo
  2.         echo ' exp end at '`date`
  3.         echo
  4.         # rm pipe
  5.         rm exp.pipe
  6.         # tar the dmp.Z file to tape
  7.         mt -f /dev/rmt/0 rew
  8.         tar cvf /dev/rmt/0 exp.dmp.Z
  9.         echo
  10.         echo ' tar end at '`date`
  11.         echo
  12.     通过管道导入生成的文件:
  13.         1.通过mknod -p 建立管道
  14.         $ mknod /home/exppipe p
  15.         2.导入生成的压缩文件
  16.         $ imp test/test file=/home/exppipe fromuser=test touser=macro &
  17.         gunzip < exp.dmp.gz > /home/exppipe
  18.         3.删除管道
  19.         $ rm –fr /home/exppipe
  20.     4. 全库导入的一般步骤
  21.         注意:在导出时,需要通过toad或其他工具提取源数据库创建主键和索引的脚本
  22.         1. 先全库加rows=n把结构导进去
  23.             $ imp system/manager file=exp.dmp log=imp.log full=y rows=n indexes=n
  24.         2. 使业务用户的触发器失效/删除主键和唯一索引
  25.             spool drop_pk_u.sql
  26.             select 'alter table '||table_name||' drop constraint '||constraint_name||';'
  27.             from user_constraints
  28.             where constraint_type in ('P','U');
  29.             /
  30.             spool off
  31.             spool disable_trigger.sql
  32.             select 'alter trigger '||trigger_name||' disable;'
  33.             from user_triggers;
  34.             /
  35.             spool off
  36.             @drop_pk_u.sql
  37.             @disable_trigger.sql
  38.         3. 以ignore=y全库导入
  39.             $ imp system/manager file=exp.dmp log=imp.log full=y ignore=y
  40.         4. 通过toad或其他工具提取源数据库创建主键和索引的脚本,在目标数据库中创建主键和索引。使触发器生效。
  41.         5. 版本问题
  42.             Exp/Imp 很多时候,可以跨版本使用,如在版本7与版本8 之间导出导入数据,但这样做必须选择正确的版             本,规则为:
  43.             ·总是使用IMP 的版本匹配数据库的版本,如果要导入到816,则使用816 的导入工具。
  44.             ·总是使用EXP的版本匹配两个数据库中低的那个版本,如在815 与816之间互导,则使用815的EXP工具。
  45.             imp 和exp 版本不能往上兼容: imp 可以导入低版本exp 生成的文件, 不能导入高
  46.             版本exp 生成的文件



阅读(5584) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~