zoukankan      html  css  js  c++  java
  • exp,imp问题

    今天接了封邮件,项目经理要俺做个数据迁移,将开发环境中的某个表迁移到测试环境。很简单的需求。

    常用的迁移有 EXP,IMP,DATAPUMP,DBLINK等等。由于无法登陆数据库主机操作系统,所以无法用DATAPUMP。

    另外也没有创建DBLINK权限,而且数据库中也没有创建好了的DBLINK,这也否定了,我只能用EXP,IMP这种最原始的方法。

    下面说说导入导出应该注意的事项

    一:首先应该查询数据库的字符集

    SQL> select * from nls_database_parameters where parameter='NLS_LANGUAGE' or parameter='NLS_TERRITORY' or parameter='NLS_CHARACTERSET';

    PARAMETER                      VALUE
    ------------------------------ --------------------------------------------------------------------------------
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CHARACTERSET               AL32UTF8
    我们知道NLS_LANG = language_territory.charset

    Language指的是服务器消息语言,territory指的是服务器日期和数字,货币格式,charset指字符集。

    知道了NLS_LANG的组成原理之后,就明白了,只要设置NLS_LANG中的charset一样,那么就不会产生导入导出的乱码问题

    NLS_LANG中的language用来显示log中记录的语言

    然后查看客户端字符集

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

    USERENV('LANGUAGE')
    --------------------------------------------------------------------------------
    SIMPLIFIED CHINESE_CHINA.AL32UTF8

    可以看到客户端字符集为AL32UTF8,所以导入导出是不会引起乱码的,不过由于客户端的language设置为SIMPLIFIED CHINESE,那么导入导出的log就会用中文的形式记录,如果和老外一起工作那么就设置AMERICAN_AMERICA.AL32UTF8,这样老外就能看懂log了

    二:设置客户的字符集

    如果是windows 直接在cmd中 set nls_lang=AMERICAN_AMERICA.AL32UTF8

    如果是linux  要在shell中 export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

    三:执行exp

    exp常用语句:

     exp 'sys/oracle as sysdba' file=D:/full.dmp full=y log=D:/full.log consistent=y direct=y 

    //导出整个数据库 导出如果设置了direct=y就不用设置buffer了,consistent=y表示导出期间数据报错read only

    exp  system/oracle file=D:/scott.dmp owner=scott buffer=10240000 log=D:/scott.log
    //导出Scott的所有对象到D盘,并且命名为scott.dmp 
      exp  system/oracle file=D:st.dmp owner=scott,test buffer=10240000 log=D:/test_scott.log
    //导出scott,test的所有对象 
      exp  system/oracle file=D:emp.dmp tables=scott.emp buffer=10240000 log=D:/scott.log
    //导出scott的emp表,也可以用scott账号来导出,这个时候表前面就不用加上scott了 
      exp scott/oracle file=D:et.dmp tables=emp,dept
     buffer=10240000 log=D:/scott.log
    imp常用语句
     
     imp scott/oracle file=D:et.dmp table=emp commit=y log=D:/emp.log buffer=10240000
    //导入emp表 
      imp system/oracle file=D:scott.dmp full=y 
    //导入scott的所有对象,注意如果是由system导出的,就必须由system或者权限比他高的导入;这里就是最开始由system导出的,所以还是由system来导入; 
      exp scott/oracle file=D:emp.dmp table=emp 
    由soctt 把emp到出,如果想导入到scott用户下 
      imp scott/oracle file=D:emp.dmp table=emp // scott就可以直接导入到scott用户下; 
    如果想用system用户把scott导出的内容再倒入到scott 就需要用以下方法 
      imp system/oracle file=D:emp.dmp fromuser=scott touser=scott 
      当然也可以到入到其他用户中 
      imp system/oracle file=D:emp.dmp fromuser=scott touser=test 
    //将scott导出的内容导入到test中
      imp 'sys/oracle as sysdba' file=D:full.dmp full=y ignore=y;

    //导出scott的emp,dept表 

    exp选项:

    buffer:下载数据缓冲区,以字节为单位,缺省依赖操作系统 
    consistent:下载期间所涉及的数据保持read only,缺省为n 
    direct:使用直通方式 ,缺省为n 
    feeback:显示处理记录条数,缺省为0,即不显示 
    file:输出文件,缺省为expdat.dmp 
    filesize:输出文件大小,缺省为操作系统最大值 
    indexes:是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据 
    log:log文件,缺省为无,在标准输出显示 
    owner:指明下载的用户名 
    query:选择记录的一个子集 
    rows:是否下载表记录 
    tables:输出的表名列表 

    imp选项:

    buffer:上载数据缓冲区,以字节为单位,缺省依赖操作系统 
    commit:上载数据缓冲区中的记录上载后是否执行提交 
    feeback:显示处理记录条数,缺省为0,即不显示 
    file:输入文件,缺省为expdat.dmp 
    filesize:输入文件大小,缺省为操作系统最大值 
    fromuser:指明来源用户方 
    ignore:是否忽略对象创建错误,缺省为n,在上载前对象已被建立往往是一个正常现象,所以此选项建议设为y 
    indexes:是否上载索引,缺省为n,这是指索引的定义而非数据,如果上载时索引已建立,此选项即使为n也无效,imp自动更新索引数据 
    log:log文件,缺省为无,在标准输出显示 
    rows:是否上载表记录 
    tables:输入的表名列表 
    touser:指明目的用户方 

  • 相关阅读:
    springboot学习入门简易版二---springboot2.0项目创建
    springboot学习入门简易版一---springboot2.0介绍
    mybatis学习系列一(mybatis简介/使用)
    mybatis学习系列--逆向工程简单使用及mybatis原理
    mybatis学习系列五--插件及类型处理器
    enum类使用
    mybatis学习系列四--mybatis generator逆向工程
    mybatis学习系列三(部分)
    常见开源协议及含义
    【maven】常见插件
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330601.html
Copyright © 2011-2022 走看看