Oracle使用exp和imp进行数据库导入导出

一、导出数据库
exp 用户名/密码@数据库实例地址:端口/实例名 file=导出dmp文件路径  rows=y owner=(导出用户列表) 
例如:
exp system/admin@ZSKYDZXYY file=f:\dbfile\db.dmp  rows=y owner=(user1,user2,user3) 

ps:@ZSKYDZXYY 为Oracle Net Manager中配置的数据库地址,等同于 ip:端口/实例名
二、导入数据库
imp 用户名/密码@数据库实例地址:端口/实例名 file=dmp文件存放路径 full=y
例如:
imp system/admin@ORCLYDYY file=F:\dbfile\db.dmp full = y

PS:

  • 为待导入的数据库实例建立表空间、对应的用户
  • 使用imp语句导入dmp文件
    导入后,可以使用select count(*)from user_tables;检查导入的表数量(含空表)。
三、导入/导出,注意事项

查看当前实例下,表空间相关信息。(可选)
ps:可以使用system直接登录,避免各种权限等问题。

desc dba_tablespaces;
select t.tablespace_name from dba_tablespaces t;

查看用户信息(可选)

desc dba_users;
select username,account_status from dba_users;
四、空表导出问题

oracle 11g中,默认对空表不分配segment,因此会导致直接导出空表时报错

  • 解决方案1(不推荐,表太多时不方便)
    向表中插入一条记录,然后rollback,就会产生segment,就可继续导出
  • 解决方案2(使用空表脚本)

脚本如下:

//显示segment参数
show parameter deferred_segment_creation

//修改参数为false,即在空表状态下也创建segment
alter system set deferred_segment_creation=false

//查看当前用户下空表数量
select table_name from user_tables where NUM_ROWS=0;

//形成alter语句
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; 

手动执行以上语句,便可使用exp语句导出空表
  • 执行exp脚本
五、exp/imp参数

imp help=y 即可查看,网上也有其他人详细做了介绍,本文不再赘述。
在这里插入图片描述

六、自动导出(备份)脚本

以Windows服务器为例,可以使用以下脚本,结合Windows的计划任务完成数据库定时备份工作。(排除了使用oracle的自动备份策略,可以通过脚本,完成特定表、特定表空间、等的细粒度备份)

@echo off   
echo ================================================   
echo  Oracle DB
echo ================================================ 
::以“YYYYMMDD”格式取出当前时间。  
::设置导出的路径
set bakDirectory=D:\dpdump\bak
del %bakDirectory%\*.dmp
set BACKUP_DIR=D:\dpdump
copy %BACKUP_DIR%\*.dmp %bakDirectory%\
del %BACKUP_DIR%\*.dmp

set BACK_NAME=%date:~0,4%%date:~5,2%%date:~8,2%

set BACK_FULL_NAME=%BACKUP_DIR%\kyeedb%BACK_NAME%
exp system/admin@ZSKYDZXYY file=%BACK_FULL_NAME%.dmp grants=n rows=y owner=(user1,user2,user3) 

exit

脚本含义: 定时从数据库服务器备份,备份至 D:\dpdump\bak目录。其中,bak子文件夹为上上一次的备份。每次将bak子文件夹中的备份删掉,如2019.12.21日旧备份文件,再将外部父目录2019.12.22日的备份拷贝至其中,再删除外部的备份,最后将2019.12.23日的新备份文件写入。形成间隔一天的冗余备份。
在这里插入图片描述

exp、imp命令的详细参数网上有详细介绍,本文不再赘述。如非特殊exp脚本,可使用full=y,rows=y等基本参数即可。

发布了135 篇原创文章 · 获赞 98 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/qq_35206244/article/details/103387994