oracle备份或还原数据库(expdp、impdp)

1.首先新建或更改虚拟目录

因为数据泵方式——expdp(导出)和impdp(导入)需要虚拟目录路径。

-- 语法
create or replace directory 虚拟目录名 as '虚拟目录绝对路径';
-- 例子:创建或修改data_backup逻辑目录
create or replace directory data_backup as 'D:\app\Administrator\admin\bysjdb\dbdump\20210709';

如果是第一次新建data_backup这个逻辑目录的话,还需要给数据用户赋可读可写的权限。这样才可以备份和还原。

-- 语法
grant read,write on directory 虚拟目录名 to 数据库用户;
-- 例子
grant read,write on directory data_backup to 数据库用户;

2.批量导出数据库(备份)

提示:expdp help=Y可查看提示
假设本地oracle有以下用户BYSJtest、BYSJuser、System。下面语句则会将把以BYSJ开头命名的用户数据库备份到指定的虚拟目录下,以用户名命名备份产生的dmp文件。
注意:%exp_pwd%为调用exp_pwd变量,所以在执行expdp语句前,先对oracle_sid、exp_pwd、exp_ip变量赋值

--说明
--username:导出数据的用户名,必写;
--password:导出数据的密码,必写;
--@:地址符号,必写;
--serviceip和exp_sid:oracle的服务名,必写[ip+端口+sid];
--1521:端口号,1521是默认的可以不写,非默认要写;
--schemas:导出操作的用户名;
--dumpfile:导出的文件;
--logfile:导出的日志文件,可以不写;
--directory:创建的虚拟文件夹名称;
--remap_schema=源数据库用户名:目标数据库用户名,二者不同时必写,相同可以省略;

--语法
expdp username/password@serviceip/servicename directory=虚拟目录 dumpfile=username.dmp logfile=username.log schemas=username

--批量生成expdp语句
select 
distinct
'expdp '||lower(atc.owner)||'/%exp_pwd%@%exp_ip%/%oracle_sid% directory=data_backup dumpfile='||lower(atc.owner)||'.dmp logfile='||lower(atc.owner)||'.log schemas='||lower(atc.owner)||''
from all_tab_columns atc
where atc.owner like 'BYSJ%';

编写bat文件并执行

--设置NLS_LANG变量来指定字符属性
rem set NLS_LANG=CHINESE_CHINA.AL32UTF8
@echo [输入对应的sid]
set oracle_sid=bysj
@echo [输入对应的用户密码]
set exp_pwd=123456
@echo [输入对应的ip地址、端口]
set exp_ip=192.168.x.xxx:1521
@echo [输入对应的用户名]

--导出expdp语句
......

@echo [完成导出]
--等待用户确认才关闭窗口
pause

3.批量导入数据库(还原)

根据directory指定的虚拟目录下根据用户名找到对应的dumpfile,然后导入到指定的oracle_sid的oracle数据库中。

--批量生成impdp语句
select 
distinct
'impdp '||lower(atc.owner)||'/%imp_pwd%@%imp_ip%/%oracle_sid% directory=data_backup dumpfile='||lower(atc.owner)||'.dmp full=Y ignore=Y logfile='||lower(atc.owner)||'.log'
from all_tab_columns atc
where atc.owner like 'BYSJ%';

编写bat文件并执行

--设置NLS_LANG变量来指定字符属性
rem set NLS_LANG=CHINESE_CHINA.AL32UTF8
@echo [输入对应的sid]
set oracle_sid=bysj
@echo [输入对应的用户密码]
set imp_pwd=123456
@echo [输入对应的ip地址、端口]
set imp_ip=192.168.x.xxx:1521
@echo [输入对应的用户名]

--导出impdp语句
......

@echo [完成导入]
--等待用户确认才关闭窗口
pause

4.批量生成创建用户语句

先生成用户在批量导入数据库

select 
distinct
--语句开始
'start
drop user '||atc.owner||' cascade;
--创建表空间,指定自动扩容为5m,最大不限制
CREATE SMALLFILE TABLESPACE '||atc.owner||' DATAFILE ''D:\database\oracle_dbf\bysj\'||atc.owner||'.dbf'' SIZE 5M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
--创建用户
CREATE USER '||atc.owner||' IDENTIFIED BY "123456" 
--指定表空间
DEFAULT TABLESPACE '||atc.owner||' TEMPORARY TABLESPACE TEMP;
--分配角色
GRANT "DBA" TO '||atc.owner||';
GRANT "CONNECT" TO '||atc.owner||';
GRANT "RESOURCE" TO '||atc.owner||';
ALTER USER '||atc.owner||' DEFAULT ROLE "DBA","CONNECT","RESOURCE";
--用户配额不限制
GRANT UNLIMITED TABLESPACE TO '||atc.owner||';
end'
--语句结束
from all_tab_columns atc
where atc.owner like 'BYSJ%'; --查询指定用户

其他

或者使用exp、imp的方式也可行,这样速度偏慢,但是可以在本地进行备份,无需创建虚拟目录。

--说明
--username:导出数据的用户名,必写;
--password:导出数据的密码,必写;
--@:地址符号,必写;
--serviceip和exp_sid:oracle的服务名,必写[ip+端口+sid];
--1521:端口号,1521是默认的可以不写,非默认要写;
--file:导出的文件路径;
--full=Y:代表完全导入导出

--语法
exp(imp) username/password@serviceip/servicename file=D:/db/username.dmp full=Y;

根据用户表导出部分

exp(imp) username/password@serviceip/servicename file='D:/db/username.dmp' tabels=                                                                  (table1,table2,table3,...);

根据表空间导出部分

exp(imp) username/password@serviceip/servicename file='D:/db/username.dmp' tablespaces=                                                         (tablespace1,tablespace2,tablespace3,...);

根据用户导出部分

exp(imp) username/password@serviceip/servicename file='D:/db/username.dmp' owner(username1,username2,username3);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在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客户端工具已经正确安装并配置了环境变量。另外,还可以使用其他参数和选项来实现更精细的备份还原操作,例如指定导出和导入的对象、并行处理等。 以上代码仅为示例,请根据实际情况进行适当修改。在进行数据库备份还原操作时,请确保对数据的完整性和安全性有充分的考虑,并在非生产环境中进行测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值