解密Oracle备份东西-exp/imp51CTO博客 - 众发娱乐

解密Oracle备份东西-exp/imp51CTO博客

2019年03月01日11时57分44秒 | 作者: 运鸿 | 标签: 备份,用户,数据 | 浏览: 2405

解密Oracle备份东西-exp/imp

无论是运维作业者仍是数据库管理员,数据的备份和复原是咱们日常作业的要点,拟定合理的备份战略,运用适宜的备份东西是每个IT人必备的技术,今日就给我们介绍Oracle的备份东西exp和imp。

ORACLE数据库有两类备份办法。

  • 第一类:为物理备份,该办法完成数据库的完好康复,但数据库有必要运转在归挡形式下(事务数据库在非归挡形式下运转),且需求极大的外部存储设备,例如磁带库;

  • 第二类:备份办法为逻辑备份,事务数据库选用此种办法,此办法不需求数据库运转在归挡形式下,不光备份简略,而且能够不需求外部存储设备。

     

    一、exp的关键字阐明:

    1、导出某用户下一切表

exp scott/lipengfeifile=scott_all_tables.dmp log=scott_all_tables.log

    2、导出scott用户下的部分表

(1)expscott/lipengfei tables=\(emp,salgrade\) file=scott_emp_salgrade.dmplog=scott_emp_salgrade.log
(2)exp scott/lipengfei tables=empfile=scott_emp.dmp log=scott_emp.log

    3、参数文件的运用

vi /home/oracle/dept.txt 文件内容如下:
userid=scott/lipengfei
log=/home/oracle/scott_dept.log
file=/home/oracle/scott_dept.dmp
tables=dept

    引证参数文件:

exp parfile=/home/oracle/dept.txt

    4、按条件导出

    (1)参数文件中指定条件

    

 exp parfile=/home/oracle/emp.txt
 vi /home/oracle/emp.txt  内容如下:
 userid=scott/lipengfei
 log=/home/oracle/emp.log
 file=/home/oracle/emp.dmp
 tables=emp
 query=where sal>1000

    (2)条件中是数字

exp scott/lipengfei tables=empquery="where sal >1000" file=/home/oracle/emp.dmplog=/home/oracle/emp.log

    (3)条件中带有字符串

exp scott/lipengfei tables=empquery="where sal >1000 and job=CLERK"file=/home/oracle/emp.dmp log=/home/oracle/emp.log

    (4)参数文件,处理条件中带有字符串

exp parfile=/home/oracle/emp.txt
vi /home/oracle/emp.txt  内容如下:
userid=scott/lipengfei
log=/home/oracle/emp.log
file=/home/oracle/emp.dmp
tables=emp
query=where sal>1000 and job=CLERK

    5、导出某几个用户的一切表

    (1)创立表空间及用户、授权

create tablespace li datafile/oracle/app/oradata/ecom/li.dbf size 30M AUTOEXTEND OFF;
create user li identified by li defaulttablespace li;
alter user li account unlock;
grant connect,resource to li;

    (2)创立表空间及用户、授权

create tablespace peng datafile/oracle/app/oradata/ecom/peng.dbf size 30M AUTOEXTEND OFF;
create user peng identified by peng defaulttablespace peng;
alter user peng account unlock;
grant connect,resource to peng;

    (3)创立表空间及用户、授权

create tablespace fei datafile/oracle/app/oradata/ecom/fei.dbf size 30M AUTOEXTEND OFF;
create user fei identified by fei defaulttablespace fei;
alter user fei account unlock;
grant connect,resource to fei;

    (4)创立表及初始化数据

sqlplus li/li
create table haha(id int);
insert into haha values(1);
commit;

    (5)创立表及初始化数据

sqlplus peng/peng
create table hehe(id int);
insert into hehe values(1);
commit;

    (6)创立表及初始化数据

sqlplus fei/fei
create table hihi(id int);
insert into hihi values(1);
commit;

    (7)将上面3个用户悉数目标导出

exp \sys/lipengfei as sysdba\file=/home/oracle/li_peng_fei.dmp log=/home/oracle/li_peng_fei.logowner=\(li,peng,fei\)

    6、不想导出索引、不想导出束缚、不想导出授权、不想导出与表相关的触发器等

exp scott/lipengfeifile=scott_all_tables.dmp log=scott_all_tables.log indexes=N constraints=Ngrants=N triggers=N

    7、导出的文件太大了,超出文件体系约束【fat32单个文件不能超过4G,ntfs单个文件不能超过2T,ext3抱负状况下单个文件不能超过2T】

exp scott/lipengfei filesize=500M  file=scott_all_tables1.dmpscott_all_tables2.dmp log=scott_all_tables.log
  • 假如指定filesize参数,那么file参数也要跟着修正。exp在导出的时分有或许会生成多个dmp文件,因而有必要在file参数中为每一个文件别离命名(多个称号间以逗号分隔)

  • 假如file参数指定的文件名多于实践生成的文件,多出指定的文件不会被生成。

  • 假如file参数指定的文件名少于实践生成的文件,exp履行过程中,

  • 在用完用户所指定的文件后,就会提示输入新的文件名。

  • 假如没有人在旁边操作,那么整个导出使命就会停在这儿了。

    接着你或许就要问,怎样知道要导出的数据总共占用多大空间?

select sum(bytes)/1024/1024"total(M)" from user_segments;

  二、imp关键字阐明:

    1、导入数据

    (1)按用户导出数据

exp li/li file=li_all_tables.dmplog=li_all_tables.log

    (2)模仿数据丢掉

sqlplus li/li
SQL> drop table haha;

    (3)将备份数据复原

imp li/li file=li_all_tables.dmplog=li_all_tables.log

    2、导入指定表到其他用户

    (1)将li用户下的备份集导入到peng用户中

imp peng/peng fromuser=li touser=pengfile=li_all_tables.dmp log=li_to_peng_all_tables.log

    (2)以peng用户登录,验证数据

sqlplus peng/peng
SQL> select  tname from tab;

    上面的操作看起来成功?其它并没有,数据尽管成功导入了,但不是谨慎的办法,或许无意中给数据库埋了一颗雷。

SQL> show user
SQL> select username,default_tablespacefrom user_users;
SQL> select table_name,tablespace_namefrom user_tables;

    古怪吗?尽管peng用户默许的表空间是peng,可是新导入的haha表被存储到li表空间中。如下办法处理

    (3)表空间权限操控

sqlplus / as sysdba
alter user peng quota unlimited on peng;
revoke unlimited tablespace from peng;

    (4)清空peng用户刚导入的表及数据

sqlplus peng/peng
drop table haha;

    (5)将li用户下的备份集再一次导入到peng用户中

imp peng/peng fromuser=li touser=pengfile=li_all_tables.dmp log=li_to_peng_all_tables.log ignore=y

    (6)以peng用户登录,验证数据

sqlplus peng/peng
SQL> select table_name,tablespace_namefrom user_tables;

    上面运用到了ignore参数,假如要导入的目标现已存在,默许状况导入就会报错。

    ignore=N 【默许】,犯错目标会被越过,imp持续后续操作。

    ignore=Y,主动疏忽目标已存在的现实,持续导入数据,也就会呈现重复数据,或许经过手艺去重。

    3、导入表结构到指定用户

    (1)登录peng用户,删去指定表及数据

sqlplus peng/peng
SQL> drop table haha;

    (2)运用上面发生的备份集康复,只复原表结构

imp peng/peng fromuser=li touser=pengfile=li_all_tables.dmp log=li_to_peng_all_tables.log ignore=y rows=N

    (3)以peng用户登录,验证是否只复原了表结构,没有数据

sqlplus peng/peng
SQL> select tname from tab;
SQL> select * from haha;



      好久好久以前,Oracle就开端供给用来提取表、形式或整个数据库的界说,然后导入到其他形式或数据的小东西:那就是exp/imp

     那个时分数据库规划都很小(几百M就算超大数据库了),而且关于数据库的要求也没有那么高,不像现如今,动不动就是7*24小时高并发、高可用,以致在某些范畴,exp/imp也被视作备份康复的东西运用并连续至今。假如你运用exp备份几十G、数百G乃至更大规划数据库,而且将这种办法作为出产数据库的备份战略,这就太不合理了。


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表众发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章