Oracle数据库通过数据泵expdp、impdp方式备份还原

exp和imp现在已经基本被抛弃了,EXPDP和IMPDP处理起来相对好点。
EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。

EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。

IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。

一、expdp备份数据库步骤

1、切换到Oracle数据库的用户,使用system登录oracle

格式如下:

sqlplus 用户名/密码@实例名  
eg. sqlplus system/123456@orcl

也可以直接使用sysdba直接登陆

sqlplus  /  as  sysdba

2、创建备份逻辑目录

此目录不是真实的目录(单引号里面的内容是备份的目录),最好以system等管理员创建。

创建之前可以查看一下现有的目录:

SQL>  select * from dba_directories;

创建逻辑目录:(expdpdir类似于别名,指向的备份文件夹是/java/db/oracle,该文件夹要事先在磁盘上创建好,本次使用的是Linux系统,并且目录也已经创建)

SQL>  create or replace directory expdpdir as '/java/db/oracle’;

3、授权

给用户授予目录的相关操作权限,如果是用system或者sysdba操作,可以省略本步骤

以下操作二选一:

-- 给指定用户赋权
grant read, write on directory expdpdir to Scott;   
-- 或者直接把目录的权限设置为公开
grant read, write on directory expdpdir to public;

4、导出数据库备份

退出SQLPlus命令界面,Linux直接在命令窗口、Windows进入DOS命令行界面,执行下列命令导出数据库:

(1)导出指定用户空间下的数据

此处导出的是 spic_ebs 用户空间下的数据

expdp system/oracle directory=expdpdir  dumpfile=spic_ebs_%U.dmp  SCHEMAS=spic_ebs  logfile=expdp_djnc_20190416.log  parallel=4  cluster=N

(2)导出数据

这里可以排除部分不需要的表,一些符号需要转义

expdp system/oracle directory=expdpdir dumpfile=spic_ebs_%U.dmp SCHEMAS=spic_ebs exclude=TABLE:\"IN\(\'SYS_LOG\',\'SYS_LOG1\',\'ITF_ERP\'\)\" logfile=expdp_djnc_20190530.log parallel=8 cluster=no

(3)单独导出指定表的数据

expdp system/oracle directory=expdpdir dumpfile=itf_erp_%U.dmp  tables=spic_ebs.ITF_ERP  logfile=expdp_itf_erp.log parallel=6 cluster=no

命令解释:

  • system/oracle:system的用户名和密码,这里也可以不写,直接输入命令,最后提示输入用户名的时候,直接输入 / as sysdba
  • directory:指定导出的目录,步骤2创建的逻辑目录
  • dumpfile:指定导出的文件名,存放于directory目录里
  • SCHEMAS:指定需要导出的数据库用户名
  • exclude:导出时排除特定的对象类型
  • tables:指定需要导出的表
  • logfile:指定日志文件名
  • parallel:指定并行导出线程的数量
  • cluster:是否采用多实例导出

二、还原数据库准备工作

导入的时候要确保有足够的表空间,不然导入的时候,总会卡在那里一直不动

1、删除表空间与用户(新的数据忽略此步骤)

// 删除表空间(可以不删除)
drop tablespace SPIC_EBS including contents and datafiles;  
// 删除用户所有信息
drop user SPIC_EBS cascade;

注意:
如果表空间包含物化视图或者物化视图的索引,删除表空间会出现错误 ORA-23515: materialized views and/or their indices exist in the tablespace

具体处理办法:
首先删掉该表空间下的的物化视图

SELECT
    'drop materialized view ' || OWNER || '.' || segment_name || ' ;'
FROM
    dba_segments
WHERE
    segment_name in(
        SELECT
            mview_name FROM dba_mviews)
    AND tablespace_name = 'SPIC_EBS';

然后删除该表空间下的其他表空间下物化视图在本表空间下创建的索引

SELECT
    *
FROM
    dba_segments
WHERE
    tablespace_name = 'SPIC_EBS'
    AND segment_name in(
        SELECT
            index_name FROM dba_indexes
        WHERE
            table_name in(
                SELECT
                    mview_name FROM dba_mviews));

2、创建表空间与用户

// 创建表空间,如果没删除就不用创建了,大小根据需要调整
create tablespace SPIC_EBS datafile '/java/orcl/SPIC_EBS.DBF' size 50G  autoextend on;
# 注:单引号里面的文件名与表空间名字相同
// 创建用户
create user spic_ebs identified by spic_ebs default tablespace SPIC_EBS temporary tablespace temp;

3、给用户授权

// 给用户授权,如果不是必须,可以去掉DBA权限
grant resource,connect,dba,create any view to spic_ebs;

三、使用impdp还原数据库

最好先设置一下编码,避免导入数据库后中文乱码,具体自己百度,以下只是参考:

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

前三个步骤和上边的导出一样

1、切换到Oracle数据库的用户,使用system登录oracle

格式如下:

sqlplus 用户名/密码@实例名  
eg. sqlplus system/123456@orcl

也可以直接使用sysdba直接登陆

sqlplus  /  as  sysdba

2、创建还原逻辑目录,与导出时创建的逻辑目录相同。

在系统上创建/java/db/oracle目录,并将备份的数据库文件拷贝到该目录

SQL>  create or replace directory expdpdir as '/java/db/oracle’;

3、给目标用户授权

以下操作二选一:

-- 给指定用户(Scott)赋权
grant read, write on directory expdpdir to Scott;   
-- 或者直接把目录的权限设置为公开
grant read, write on directory expdpdir to public;

4、导入备份文件

(1)导入全部数据

impdp system/oracle directory=expdpdir dumpfile=spic_ebs_%U.dmp SCHEMAS=spic_ebs logfile=20190531.log  
parallel=8 cluster=no  transform=OID:N  remap_schema =spic_ebs:spic_ebs

注:remap_schema=spic_ebs:spic_ebs表示把左边的spic_ebs用户的数据,导入到右边的spic_ebs用户里面

(2)导入指定表的数据

impdp system/oracle directory=expdpdir dumpfile=itf_erp01.dmp tables=spic_ebs.ITF_ERP  logfile=impdp_itf_erp.log cluster=no

expdp和impdp挺强大的,如果有其他的需求,可以自行百度。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在Windows操作系统上,你可以使用命令行工具(cmd)来备份还原Oracle数据库。以下是使用expdpimpdp命令进行备份还原的示例代码: 1. 备份数据库 ``` expdp username/password@database_name directory=backup_directory dumpfile=backup_file.dmp full=y ``` 将上述代码中的`username/password`替换为数据库的用户名和密码,`database_name`替换为数据库的连接名,`backup_directory`替换为备份文件存储的目录,`backup_file.dmp`替换为备份文件的名称。`full=y`表示备份整个数据库。 2. 备份特定表空间 ``` expdp username/password@database_name directory=backup_directory dumpfile=backup_file.dmp tablespaces=tablespace_name ``` 将上述代码中的`tablespace_name`替换为要备份的表空间名称。 3. 还原数据库 ``` impdp username/password@database_name directory=backup_directory dumpfile=backup_file.dmp full=y ``` 将上述代码中的`username/password`替换为数据库的用户名和密码,`database_name`替换为数据库的连接名,`backup_directory`替换为备份文件所在的目录,`backup_file.dmp`替换为备份文件的名称。`full=y`表示还原整个数据库。 请注意,在使用expdpimpdp命令时,需要确保Oracle客户端工具已经正确安装并配置了环境变量。另外,还可以使用其他参数和选项来实现更精细的备份还原操作,例如指定导出和导入的对象、并行处理等。 以上代码仅为示例,请根据实际情况进行适当修改。在进行数据库备份还原操作时,请确保对数据的完整性和安全性有充分的考虑,并在非生产环境中进行测试。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿_Mr. Guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值