- 设置Oracle备份所需的环境变量
# 如需设置Linxu定时任务自动运行脚本,必须设置环境变量
export ORACLE_HOME=”/u01/app/oracle/product/11.2.0/EE”;
export ORACLE_SID=EE;
export PATH=”$PATH:/u01/app/oracle/product/11.2.0/EE/bin”; - 容器内执行,本地文件备份
# 设置Oracle编码
export NLS_LANG=”AMERICAN_AMERICA.ZHS16GBK”;
# 获取日期
# dateTime=$(date +%Y-%m-%d-%H%M%S); - 获取当前日期
currentTime=$(date +%H%M%S);
year=$(date +%Y);
month=$(date +%m);
date=$(date +%d);
# 基础路径
basePath=”/u01/app/oracle/backup/dmp”;
baseRecoveryPath=”/u01/app/oracle/backup/recovery”;
oneLevelPath=”$basePath/$year”;
secondLevelPath=”$basePath/$year/$month”;
threeLevelPath=”$basePath/$year/$month/$date”; - 判断一级路径是否存在————年份
if [ ! -d “$oneLevelPath” ]; then
mkdir “$oneLevelPath”
fi - 判断二级路径是否存在————月份
if [ ! -d “$secondLevelPath” ]; then
mkdir “$secondLevelPath”
fi - 判断三级路径是否存在————日
if [ ! -d “$threeLevelPath” ]; then
mkdir “$threeLevelPath”
fi - echo “导出指定用户下的数据文件”;
# scott导出数据库文件
echo “Export scott…”;
exp scott/pwd buffer=409600 file=$threeLevelPath/scott$currentTime.dmp log=$threeLevelPath/scott$currentTime.log;
echo “已完成数据库备份工作”;
Oracle的备份——EXP
宸瑞 2019-03-02 15:17:17 1306 收藏 5
分类专栏: Oracle 文章标签: Oracle 备份
版权
Oracle的备份
Oracle备份
注意事项
Oracle备份命令——exp
Oracle的备份脚本
注意事项
Windows
Linux
定时备份
注意事项
Windows下的定时备份
Linux下的定时备份
常见问题
有些表导着导着就没了
Oracle备份
注意事项
命令执行位置
Oracle服务端
Oracle客户端
备份数据库编码格式
Oracle客户端与Oracle服务端的编码格式
是否支持exp命令
是否安装Oracle客户端或Oracle服务端
是否拥有读写权限
Window下的系统盘
Linux的用户读写权限
Oracle备份命令——exp
Oracle服务端下运行
— 备份指定用户
—exp 用户名/用户密码 buffer=数据缓冲区大小 file=备份文件存储路径 log=备份日志存储路径
—例如:
—Windows
exp scott/pwd buffer=409600 file=D:\Oracle\Backup\scott.dmp log=D:\Oracle\Backup\scott.log
—Linux
exp scott/pwd buffer=409600 file=/home/dev/oracle/backup/scott.dmp log=/home/dev/oracle/backup/scott.log
1
2
3
4
5
6
7
Oracle客户端下运行
— 备份指定用户
—exp 用户名/用户密码@连接名 buffer=数据缓冲区大小 file=备份文件存储路径 log=备份日志存储路径
—例如:
—Windows
exp scott/pwd@dev_001 buffer=409600 file=D:\Oracle\Backup\scott.dmp log=D:\Oracle\Backup\scott.log
1
2
3
4
5
连接名为:tnsnames.ora下配置的名称
dev_001 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
1
2
3
4
5
6
7
8
9
Oracle的备份脚本
注意事项
脚本执行位置
Windows
Linux
脚本执行权限
查询Oracle服务端编码
select userenv(‘language’) from dual;
脚本的格式
Windows:一般为GB2312
Linux:一般为UTF-8
Windows
@echo off
title 数据库备份脚本
color 07
:: 设置Oracle编码
:: 如果设置的Oracle编码的与Oracle服务端编码不一致,可能会导致乱码
:: 为减少不必要的麻烦,建议与Oracle服务端编码保持一致
set NLS_LANG=”AMERICAN_AMERICA.ZHS16GBK”
:: 获取日期时间
set currentTime=%time:~0,2%%time:~3,2%%time:~6,2%
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set basePath=”D:\backup\dmp”
set baseRecoveryPath=”D:\backup\recovery”
set oneLevelPath=%basePath%\%year%
set secondLevelPath=%oneLevelPath%\%month%
set threeLevelPath=%secondLevelPath%\%day%
:: 一级路径
if not exist “%oneLevelPath%” mkdir %oneLevelPath%
:: 二级路径
if not exist “%secondLevelPath%” mkdir %secondLevelPath%
:: 三级路径
if not exist “%threeLevelPath%” mkdir %threeLevelPath%
:: echo “导出指定用户下的数据文件”;
:: 导出scott数据库文件
echo “Export scott…”
exp scott/pwd buffer=409600 file=%threeLevelPath%\scott%currentTime%.dmp log=%threeLevelPath%\scott%currentTime%.log
echo “已完成数据库备份工作”
echo “开始复制备份文件到恢复文件夹…”
:: scott
copy %threeLevelPath%\scott_%currentTime%.dmp %baseRecoveryPath%\scott.dmp
echo “已完成文件复制工作”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Linux
#! /bin/bash
# Oracle数据库备份
设置Oracle备份所需的环境变量
# 如需设置Linxu定时任务自动运行脚本,必须设置环境变量
export ORACLE_HOME=”/u01/app/oracle/product/11.2.0/EE”;
export ORACLE_SID=EE;
export PATH=”$PATH:/u01/app/oracle/product/11.2.0/EE/bin”;
容器内执行,本地文件备份
# 设置Oracle编码
export NLS_LANG=”AMERICAN_AMERICA.ZHS16GBK”;
# 获取日期
# dateTime=$(date +%Y-%m-%d-%H%M%S);
获取当前日期
currentTime=$(date +%H%M%S);
year=$(date +%Y);
month=$(date +%m);
date=$(date +%d);
# 基础路径
basePath=”/u01/app/oracle/backup/dmp”;
baseRecoveryPath=”/u01/app/oracle/backup/recovery”;
oneLevelPath=”$basePath/$year”;
secondLevelPath=”$basePath/$year/$month”;
threeLevelPath=”$basePath/$year/$month/$date”;
判断一级路径是否存在————年份
if [ ! -d “$oneLevelPath” ]; then
mkdir “$oneLevelPath”
fi
判断二级路径是否存在————月份
if [ ! -d “$secondLevelPath” ]; then
mkdir “$secondLevelPath”
fi
判断三级路径是否存在————日
if [ ! -d “$threeLevelPath” ]; then
mkdir “$threeLevelPath”
fi
echo “导出指定用户下的数据文件”;
# scott导出数据库文件
echo “Export scott…”;
exp scott/pwd buffer=409600 file=$threeLevelPath/scott$currentTime.dmp log=$threeLevelPath/scott$currentTime.log;
echo “已完成数据库备份工作”;
echo “开始复制备份文件到恢复文件夹…”
# scott
cp $threeLevelPath/scott$currentTime.dmp $baseRecoveryPath/scott.dmp;
echo “已完成文件复制工作”;
echo “所有事项已完成,结束备份工作”;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
定时备份
注意事项
权限
读、写、可执行权限
不含有中断指令
例如:pause及其他可能导致脚本暂停的指令
Windows下的定时备份
找到并打开“任务计划程序”
位于:控制面板\系统和安全\管理工具 下选中 “任务计划程序”
Win10可以直接通过小娜搜索
为了便于管理,可以在任务计划程序库中新建文件夹
接下来 创建任务
输入具有描述性的名称、描述
新增触发器,设置合适的执行周期
新建操作,选中启动程序,在设置中选择需要执行的脚本文件
保存即可
Linux下的定时备份
查看是否具有crontab命令
设置定时任务
crontab -e
基于vi的编辑方式
# crontab命令解释
# command
# 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令
# 例如:每天01:00执行数据库备份脚本——backup.sh
0 1 /u01/app/oracle/backup.sh > /u01/app/oracle/cron.log 2>&1
1
2
3
4
5
在命令模式下,输入wq!保存即可
引用:crontab命令参考地址
//重新载入配置
/sbin/service crond reload
//重启服务
/sbin/service crond restart
1
2
3
4
常见问题
有些表导着导着就没了
> 引用:11g默认创建一个表时不分配segment,只有在插入数据时才会产生(当然也可以强制分配),以节省磁盘空间。
1
参考地址1
参考地址2
解决方案1
—查询空表,并生成修改空表导出规则语句
select ‘alter table ‘||table_name||’ allocate extent;’ from user_tables where num_rows=0 or num_rows i
————————————————
版权声明:本文为CSDN博主「宸瑞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq1130207965/article/details/88074296
Oracle数据备份(服务器端)——expdp
宸瑞 2021-01-04 11:58:59 93 收藏
分类专栏: Oracle 文章标签: oracle
版权
expdp属于逻辑备份。逻辑备份是指利用Oracle提供的导出工具,将数据库中选定的记录集或数据字典的逻辑副本以二进制文件的形式储存到操作系统中。逻辑备份的二进制文件称为转储文件,以dmp格式存储。
在Oracle 11g数据库中提供了Data Pump Export(EXPDP)实用程序,实现数据的逻辑备份与恢复。
EXPDP是服务器端程序,其转储文件只能存放在由DIRECTORY对象指定的特定数据库服务器操作系统目录中,而不能使用指定的操作系统目录(相对EXP)
EXPDP工具的执行可以采用:交互方式、命令行方式及参数文件方式3种。命令行方式是在命令行中直接指定参数设置;参数文件方式是将参数的设置信息存放到一个参数文件中,在命令行中用PARFILE参数指定参数文件;交互方式是通过交互式命令进行导出作业管理
EXPDP提供了5种导出模式,在命令行中通过参数设置来指定
全库导出模式:通过参数FULL指定,导出整个数据库
模式导出模式:通过参数SCHEMAS指定,是默认的导出模式,导出指定模式中的所有对象
表导出模式:通过参数TABLES指定,导出指定模式中指定的所有表、分区及其依赖对象
表空间导出模式:通过参数TABLESPACES指定,导出指定表空间中所有表及其依赖对象的定义和数据
传输表空间导出模式:通过参数TRANSPORT_TABLESPACES指定,导出指定表空间中所有表及其依赖对象的定义。通过该导出模式以及相应导入模式,可以实现将一个数据库表空间的数据文件复制到另一个数据库中
EXPDP命令的常用参数及其说明
参数名称 说明
ATTACH 把导出结果附加在一个已存在的导出作业中,默认为当前模式唯一的导出作业
CONTENT 指定要导出的内容。CONTENT取值为ALL或者DATA_ONLY或者METADATA_ONLY。ALL表示导出对象的定义及其数据;DATA_ONLY表示只导出对象的数据;METADATA_ONLY表示只导出对象的定义。默认为ALL
DIRECTORY 指定转储文件 和日志文件所在位置的目录对象,该对象由DBA预先创建
DUMPFILE 指定转储文件名称列表,可以包含目录对象名,默认值为expdp.dmp
EXCLUDE 指定导出操作中要排除的对象类型和对象定义
FILESIZE 指定转储文件的最大尺寸
FULL 指定是否进行全数据库导出,包括所有数据及定义
HELP 指定是否显示EXPDP命令的在线帮助
INCLUDE 指定导出操作中要导出的对象类型和对象定义
JOB_NAME 指定导出作业的名称
LOGFILE 指定导出日志文件的名称
NOLOGFILE 指定是否生成导出日志文件
PARALLEL 指定执行导出作业时的并行进程最大个数
PARFILE 指定导出参数文件的名称
QUERY 指定导出操作中SELECT语句中的数据导出条件
SCHEMAS 指定进行模式导出及模式列表
TABLES 指定进行表模式导出及表列表
TABLESPACES 指定进行表空间模式导出及表空间列表
TRANSPORT_TABLESPACES 指定进行传输表空间模式导出及表空间列表
具体使用EXPDP的备份步骤如下(数据服务器为Windows)
创建备份用户(不是必须的,必须的是权限)
— 创建DUMPMAN用户,密码为xxx,默认表空间USERS
CREATE USER DUMPMAN IDENTIFIED BY xxx;
— 授予可以建立SESSION的权限,即CONNECTION角色,连接权限
GRANT CREATE SESSION TO DUMPMAN;
— 授予调试的权限(可忽略)
GRANT DEBUG CONNECT SESSION TO DUMPMAN;
— 创建或修改DIRECTORY,没有dumpdir的话,即创建一个DIRECTORY名为dumpdir,dumpdir指向F:\ORACLE_PUMP\dump
CREATE OR REPLACE DIRECTORY dumpdir AS ‘F:\ORACLE_PUMP\dump’;
— 为DUMPMAN用户授予dumpdir的读写权限
GRANT READ,WRITE ON DIRECTORY dumpdir TO DUMPMAN;
— 为DUMPMAN授予导出及导入非同名模式的对象权限
GRANT EXP_FULL_DATABASE,IMP_FULL_DATABASE TO DUMPMAN;
— 为DUMPMAN授予RESOURCE角色(权限偏大)
GRANT RESOURCE TO DUMPMAN;
— 查询现有的DIRECTORY
SELECT * FROM DBA_DIRECTORIES;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
到这就可以使用EXPDP命令导出了(注意:DIRECTORY对应路径下的文件必须存在)
expdp dumpman/xxx dumpfile=hr.dmp directory=dumpdir schemas=hr
1
一般就这样,但是无法忍受大量文件堆叠在一起,为了备份文件能按照年月日进行存放,我们继续
创建存储过程,用于修改dumpdir(在DUMPMAN用户下),简单实现如下
CREATE OR REPLACE PROCEDURE CHANGE_DATA_PUMP_DIR AUTHID CURRENT_USER AS
I_YEAR VARCHAR2(4);
I_MONTH VARCHAR2(2);
I_DAY VARCHAR2(2);
LOCALPATH VARCHAR2(200);
I_SQL VARCHAR2(400);
BEGIN
I_YEAR := TO_CHAR(SYSDATE, ‘YYYY’);
I_MONTH := TO_CHAR(SYSDATE, ‘MM’);
I_DAY := TO_CHAR(SYSDATE, ‘DD’);
LOCALPATH := ‘F:\ORACLE_DUMP\SPD_SZSE_V20\dump\’ || I_YEAR || ‘/‘ ||
I_MONTH || ‘/‘ || I_DAY;
DBMS_OUTPUT.PUT_LINE(LOCALPATH);
I_SQL := ‘CREATE OR REPLACE DIRECTORY dumpdir AS ‘ || ‘’’’ || LOCALPATH || ‘’’’;
DBMS_OUTPUT.PUT_LINE(I_SQL);
EXECUTE IMMEDIATE I_SQL;
END CHANGE_DATA_PUMP_DIR;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编写调用上述存储过程的SQL文件(CHANGE_DATA_PUMP_DIR.sql)
CALL CHANGE_DATA_PUMP_DIR();
EXIT;
— 还有其他方式(EXECUTE或者程序块均可)
1
2
3
编写BAT脚本
::bat脚本说明头(与编辑器代码解释由冲突,pass)
:: 设置Oracle编码
:: set NLS_LANG=”AMERICAN_AMERICA.ZHS16GBK”
:: 获取日期时间
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set basePath=”F:\ORACLE_PUMP\dump”
set oneLevelPath=%basePath%\%year%
set secondLevelPath=%oneLevelPath%\%month%
set threeLevelPath=%secondLevelPath%\%day%
:: 一级路径
if not exist “%oneLevelPath%” mkdir %oneLevelPath%
:: 二级路径
if not exist “%secondLevelPath%” mkdir %secondLevelPath%
:: 三级路径
if not exist “%threeLevelPath%” mkdir %threeLevelPath%
:: 执行SQL文件内容
SQLPLUS DUMPMAN/iamdumpman @F:\ORACLE_PUMP\CHANGE_DATA_PUMP_DIR.sql
:: 使用EXPDP导出
expdp DUMPMAN/xxx dumpfile=HR.dmp logfile=HR.log directory=dumpdir schemas=HR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
直接运行脚本开始备份,如需定时任务有脚本也不成问题,定时任务备份可查看EXP的备份
————————————————
版权声明:本文为CSDN博主「宸瑞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq1130207965/article/details/103768608