zoukankan      html  css  js  c++  java
  • oracle-exp-imp

    虽然是按照用户的方式导出的,但导入之前,还是必须要有相同的用户存在,删除用户以后,是无法进行导入的
    --重新创建回zlm用户 SQL> create user zlm identified by zlm;

    尽管zlm用户的默认表空间是USERS,但是用imp导入后的表还是会去找原来的表空间进行恢复,即“ZLM”,那么我们把原来的表空间也删除掉,会怎么样呢?
    --删除ZLM表空间后测试恢复情况 SQL> drop tablespace zlm including contents;

    注意,使用including contents只是把可控制文件中相应的信息删除,物理上还是存在于OS的磁盘上的,如果要连同文件一起删除,那么就要使用including contents and datafiles,那么就连渣渣也不剩了

    当我们把原来zlm用户导出时的表空间ZLM删除以后再倒入,此时会发现imp会把用户导到数据库缺省的USERS表空间上去,基于这种原理,当我们做逻辑导入导出的时候,尽量保持源端与目标端有相同的环境,当然还包括字符集(这里没有做测试)等。否则在导入数据后,可能会产生意外地状况,比方说源库的表空间是很大的,但是由于在目标库中没有创建相应的表空间,默认放到了USERS表空间中,环境和源库产生了不同,可能导入的时候就直接报错了。当然了,字符集更是一个要注意的问题。

    exp/imp通常在Oracle 8i/9i等早期的版本中用得较多,到了10g以后基本全面被数据库泵(Data Pump)取代,即expdp/impdp,虽然说已经是过时的技术,但作为DBA也不能完全不了解,因为和数据泵还是有异曲同工之处的,只是数据泵的功能更强大了。本篇实验采用了一个最不实用的方法来演示exp/imp的使用方法,即:交互方式,该方式可支配的参数非常少,如,不能指定log,feedback等参数,也不能指定按条件进行导出,且每次使用起来都要一步步确认非常多的步骤,非常繁琐,不推荐使用,即便要使用,也推荐采用另外两种方式:1.命令行模式、2.参数文件模式(推荐)。


    先备份相关表
    分为按用户导与按表导,
    按表的话,需要指定表名。
    备份内容有:
    一个表中所有的数据
    一个表的数据与结构
    按用户的话,该用户下的所在模式对象都导出来了

    exp help=y
    exp hr/123456
    回答几个问题

    带着问题去学习!!!!到这里所产生的问题
    1.exp-00091:exporting questionable statistics.是什么东西
    2.用exp导出所有的表如何做。上面的需要事先知道表名,然后一个一个导出。
    经baidu查询,
    问题1解决办法如下:

    指定Linux系统的NLS_LANG环境变量为数据库的字符集
    1)查询数据库的字符集(方法很多只用一种)
    SQL> select userenv('language') from dual;

    USERENV('LANGUAGE')
    ----------------------------------------------------
    AMERICAN_AMERICA.ZHS16GBK

    2)设置Linux操作系统的NLS_LANG环境变量
    [oracle@RH207 exp]$export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    Window系统的环境变量的修改方法是:
    C:>set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

    这样再次exp时就不会报EXP-00091: Exporting questionable statistics.错误了

    按用户导

    [oracle@db Downloads]$ exp
    
    Export: Release 11.2.0.4.0 - Production on Sun Dec 18 12:50:18 2016
    
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    
    
    Username: lcpsys
    Password: 
    
    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    Enter array fetch buffer size: 4096 > 
    
    Export file: expdat.dmp > 
    
    (1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 
    
    Export grants (yes/no): yes > 
    
    Export table data (yes/no): yes > 
    
    Compress extents (yes/no): yes > 
    
    Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set
    
    --about to 即将,行将;刚要 About to export specified users ...
    --指定要导出的用户名 User to be exported: (RETURN to quit) > lcpsys --如果没有其它的用户名,直接回车退出配置模式,就开始导了。 User to be exported: (RETURN to quit) > --开始了 . exporting pre-schema procedural objects and actions . exporting foreign function library names for user LCPSYS . exporting PUBLIC type synonyms . exporting private type synonyms . exporting object type definitions for user LCPSYS About to export LCPSYS's objects ... . exporting database links . exporting sequence numbers . exporting cluster definitions . about to export LCPSYS's tables via Conventional Path ...


    问题2解决办法如下:
    具体命令参数可以参考
    exp help=y
    1、EXP:
          有三种主要的方式(完全、用户、表)
          1、完全:
              EXP SYSTEM/123456 BUFFER=64000 FILE=full.dmp FULL=Y
              如果要执行完全导出,必须具有特殊的权限
          2、用户模式:
              EXP hr/123456    BUFFER=64000 FILE=hr.dmp OWNER=hr
              这样用户hr的所有对象被输出到文件中。
          3、表模式:
              EXP hr/123456    BUFFER=64000 FILE=hr-xue.dmp TABLES=xue
              这样用户hr的表xue就被导出
    2、IMP:
          具有三种模式(完全、用户、表)
          1、完全:
              IMP SYSTEM/123456 BUFFER=64000 FILE=full.dmp FULL=Y
          2、用户模式:
              IMP hr/123456    BUFFER=64000 FILE=hr.dmp FROMUSER=hr TOUSER=hr
              这样用户hr的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。
          3、表模式:
              IMP hr/123456    BUFFER=64000 FILE=hr-xue.dmp TABLES=xue
              这样用户hr的表xue就被导入。有一个问题是,如果表存在,数据不能导入,只需要在后面加入ignore=y参数就可以了


    问题的现象:
    EXP-00026: conflicting modes specified
    EXP-00000: Export terminated unsuccessfully  

    备份文件会生成 但是没有内容。
    这个问题主要是 exp的时候 里面参数发生了冲突。
       比较常见的:
    1.同时指定了 owner  和 tables
    2.同时指定了 FULL 和tables
    3.同时指定了多个owner和full
    owner 表示导出整个用户或者多个用户  而tables表示只导出其中的表 。
    要么只导出其中的表  要么导出整个用户。不然就会冲突了、



    增删改相关行或表,再用备份的数据进行恢复。
    sqlplus hr/123456
    set pagesize 200
    set linesize 200
    create table xue(id integer,name varchar(25));
    insert into xue values(1,'wang');
    insert into xue values(2,'liu');
    commit;

    将表删除
    drop table xue;
    如果有索引关系的表,用下面
    drop table mytest cascade constraints;

    留下表结构,删除一行或所有数据。
    delete from regions where region_id=5;
    delete from regions


    imp hr/123456
    回答几个问题

    带着问题去学习!!!!到这里所产生的问题
    1.所要回答的问题有些不清楚,需要细查一下。
    2.字符集的问题要处理一下。
    经baidu查询,结果如下:



    以上的这种方法算是一种逻辑备份,将数据导入到一个临时的文件之中。
    还可以物理备份的方法,即将oradata/下面的所有数据全部复制到另外一个安全的地方,也叫冷备
    还可以热备的方法。

    ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备。
      
      数据库逻辑备份方法
      
      ORACLE数据库的逻辑备份分为三种模式:表备份、用户备份和完全备份。
      
      表模式
      
      备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式。
      
      若备份到本地文件,使用如下命令:
      
      exp icdmain/icd rows=y indexes=n compress=n buffer=65536
      feedback=100000 volsize=0
      file=exp_icdmain_csd_yyyymmdd.dmp
      log=exp_icdmain_csd_yyyymmdd.log
      tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
      
      若直接备份到磁带设备,使用如下命令:
      exp icdmain/icd rows=y indexes=n compress=n buffer=65536
      feedback=100000 volsize=0
      file=/dev/rmt0
      log=exp_icdmain_csd_yyyymmdd.log
      tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
      
      注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。出于速度方面的考虑,尽量不要直接备份到磁带设备。
      
      用户模式
      
      备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。
      若备份到本地文件,使用如下命令:
      exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
      feedback=100000 volsize=0
      file=exp_icdmain_yyyymmdd.dmp
      log=exp_icdmain_yyyymmdd.log
      若直接备份到磁带设备,使用如下命令:
      exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
      feedback=100000 volsize=0
      file=/dev/rmt0
      log=exp_icdmain_yyyymmdd.log
      注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带。如果数据库数据量较小,可采用这种办法备份。

        完全模式



      1、 将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中
      exp system/manager@TEST file=d:daochu.dmp full=y
       2、 将数据库中system用户与sys用户的表导出
      exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)
      3、 将数据库中的表table1 、table2导出
      exp system/manager@TEST file=d:daochu.dmp tables=(table1,table2)
      4、 将数据库中的表table1中的字段filed1以"00"打头的数据导出
      exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"
      上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。不过在上面命令后面 加上 compress=y 就可以了



    删除某用户下的所有对象
    Oracle删除用户下所有对象的方法未必人人都会,下面就为您介绍两种常用的Oracle删除用户下所有对象的方法,希望对您学习Oracle删除用户方面能有所帮助。

    方法1:
    drop user hr cascade;
        要退出所有的hr用户连接,才能正确执行。
    drop tablespace USERS INCLUDING CONTENTS;
        不能删除默认永久表空间。

    create user hr profile default identified by 123456 default tablespace USERS temporary tablespace TEMP account unlock;

    --授权
    grant dba to hr;
    grant connect,resource to hr;


    方法2:
    写存储过程实现

    DECLARE
    TYPE name_list IS TABLE OF VARCHAR2(40);
    TYPE type_list IS TABLE OF VARCHAR2(20);

    Tab_name name_list:=name_list();
    Tab_type type_list:=type_list();

    sql_str VARCHAR2(500);
    BEGIN
    sql_str := 'select uo.object_name,uo.object_type from user_objects uo where uo.object_type not in(''INDEX'',''LOB'') order by uo.object_type desc';
    EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;

    FOR i IN Tab_name.FIRST.. Tab_name.LAST LOOP
    sql_str := 'DROP ' || Tab_type(i) || ' ' || Tab_name(i);
    EXECUTE IMMEDIATE sql_str;
    END LOOP;
    END;

    sqlplus hr/123456
    drop table jobs cascade constraints;    这样直接删除可能会有问题。所以尽量用下面的步骤解决,因为看了以后,没有明白后续步骤。
    drop table jobs
    ORA-02449: unique/primary keys in table referenced by foreign keys
    报错,用下面的方法解决

    1.检查哪些表的外键引用了要删除的表的唯一/主键.
    select A.*
    from user_constraints A, user_constraints B
    where b.table_name = 'MYTEST'
    and a.constraint_type = 'R'
    and a.r_constraint_name = b.constraint_name;

    2.生成所有引用要删除表的外键的创建语句.
          select 'select dbms_metadata.get_ddl(''REF_CONSTRAINT'',''' ||
              A.CONSTRAINT_NAME || ''') FROM DUAL;'
           from user_constraints A, user_constraints B
           WHERE b.table_name = 'JOBS'
            and a.constraint_type = 'R'
            and a.r_constraint_name = b.constraint_name;

    select 'drop table '|| table_name ||' cascade constraints' sql1 from user_tables;
         
    3.执行步骤2中产生的SQL语句,获取外键定义.
          set long 3000
          set linesize 3000
          set pagesize 300
          执行步骤2产生的语句.
    4.删除表.
          drop table mytest cascade constraints;
    5.删除并重建表.
    6.建立因创建该表所删除的外键约束.
          执行步骤3中获取到的sql语句.
    7.检查各外键是否得到恢复,系统是否正常.


    drop table emp purge;

    purge recyclebin;

    commit,事务与删除表没有关系,可以不用敲。

    exp
    没有数据的表是不导出的。

    在实际的备份操作中,exp与imp用不了,因为在其导出的过程中,必须保证其他用户不更新数据。


    数据库的冷备份,严格称为归档备份。指的是数据库要关闭服务,所有的事务都需要提交。
    备份如下内容:oradata/目录下的内容
    1.控制文件:通过v$controlfile数据字典找到
    2.重做日志文件:通过v$logfile数据字典找到
    3.数据文件:通过v$datafile数据字典找到
    4.参数文件: 通过show parameter pfile找到
    5.记录好相关文件的路径
    6.关闭oracle服务,但是这个关有个问题,比如超市说关门,不是立马就关的,有时能关一个小时,在关闭其间还有少量的io.
        shutdown immediate
    7.复制出所有的相关文件
    8.重新启动oracle服务,多种方式
        startup或者将计算机关机一下,再开机,再startup

  • 相关阅读:
    leetcode231 2的幂 leetcode342 4的幂 leetcode326 3的幂
    leetcode300. Longest Increasing Subsequence 最长递增子序列 、674. Longest Continuous Increasing Subsequence
    leetcode64. Minimum Path Sum
    leetcode 20 括号匹配
    算法题待做
    leetcode 121. Best Time to Buy and Sell Stock 、122.Best Time to Buy and Sell Stock II 、309. Best Time to Buy and Sell Stock with Cooldown 、714. Best Time to Buy and Sell Stock with Transaction Fee
    rand7生成rand10,rand1生成rand6,rand2生成rand5(包含了rand2生成rand3)
    依图
    leetcode 1.Two Sum 、167. Two Sum II
    从分类,排序,top-k多个方面对推荐算法稳定性的评价
  • 原文地址:https://www.cnblogs.com/createyuan/p/5877316.html
Copyright © 2011-2022 走看看