8.1 oracle 数据库备份
数据库备份说明:
我们用两台服务器来举例说明(服务器192.168.1.91和服务器192.168.1.92)
我们想要把92服务器中Oracle数据库中的数据每天在一个确定的时间将它导出来备份一份到91服务器上,然后再删除前30天备份的内容。所以需要在92服务器上创建一个共享文件夹oraclebackup,让91服务器可以共享到92的数据;然后需要将92的数据库数据导出来,在91服务器上再将数据导入到91的数据库中。
一、创建一个共享文件夹
1.首先在电脑中的任意一个盘创建一个新的文件夹。 (以创建oraclebackup文件夹作为例子)
2.然后点击鼠标右键--属性--选择共享--高级共享--勾选共享此文件夹,选择文件夹的名称--点击权限--选择everyone勾选完全控制--确定--应用。



3.在另一台计算机上,找到计算机中的网络--点击鼠标右键--选择映射网络驱动器--然后填入共享文件所在电脑的端口号\共享文件夹路径(例如:\192.168.1.91\Oracle),然后连接成功就可以看见我们在别的电脑上建立的共享文件夹了。


二、编写数据库备份脚本
1.导出数据库中的数据(方法一:使用expdp数据库泵导出)
使用expdp方法导出数据需要先建立一个distory目录
(1)打开电脑运行cmd,登录到Oracle数据库
sqlplus/nolog 用户名/密码@数据库实例名
--例:sqlplus/nolog TESTZSL/TESTZSL@orcl
(2)连接成功之后,创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
create directory 目录名 as '目录路径'
--例:create directory dpdata1 as 'd:\test\dump';
(3)查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select * from dba_directories;
--例:select * from dba_directories
(4)给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。
grant read,write on directory 目录名 to 需要赋值的用户名
--例:grant read,write on directory dpdata1 to scott;
(5)导出数据
导出的脚本如下:
@echo off
echo ================================================
echo Windows环境下Oracle数据库的自动备份脚本
echo 1. 使用当前日期命名备份文件。
echo 2. 自动删除4天前的备份。
echo ================================================
::在导出数据库的时候只需要更改下面的四个变量就可以了
::数据库用户名USER
::密码PASSWORD
::要备份的数据库DATABASE
::备份目录BACKUPDIR
::BACKUPDATE取出“YYYYMMDD”格式的当前时间,这一个变量不需要改。
set USER=TESTZSL
set PASSWORD=TESTZSL
set DATABASE=orcl
set BACKUPDIR=C:\oraclebackup
set BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%
::输出备份数据
::expdp表示用数据泵导出
::%USER%/%PASSWORD%@%DATABASE%表示数据库名/密码@数据库实例名称
::directory导出的目录
::dumpfile导出的文件
::logfile导出的日志文件
expdp %USER%/%PASSWORD%@%DATABASE% directory=mydata dumpfile=%USER%.dmp logfile=%USER%.log
::删除4天前的备份。
::forfiles表示删除文件
::/p 后面跟的是要删除的文件所在路径,指定了要在哪个目录里查找文件,默认是当前工作目录。
::/m 后面跟的是要删除的文件名(*.*表示所有文件)
::/d 后面接的是删除几天前的文件,指定一个日期或天数,用于比较文件的最后修改日期是否符合条件。
::/c 后面跟的命令意思是对每个找到的文件在cmd中执行del命令。
forfiles /p "C:\oraclebackup" /s /m *.* /d -4 /c "cmd /c del @file"
也可以按用户,进程,表名,查询条件等进行导入 1)按用户导
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
2)并行进程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
3)按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
4)按查询条件导
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
5)按表空间导
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
6)导整个数据库
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
expdp 用户名/密码@数据库实例名 directory=导出目录 dumpfile=导出的文件名.dmp logfile=导出的日志名.log
--例:expdp TESTZSL/TESTZSL@orcl directory=dpdata1 dumpfile=TESTZSL.dmp logfile=TESTZSL.log
2.导出数据库中的数据(方法二:使用exp导出)
(1)在共享文件夹中新建一个文本oraclebackup.bat,鼠标右键--编辑,打开.bat文本,然后在文本中写入备份数据库数据的脚本,脚本如下:
@echo off
echo ================================================
echo Windows环境下Oracle数据库的自动备份脚本
echo 1. 使用当前日期命名备份文件。
echo 2. 自动删除30天前的备份。
echo ================================================
::在导出数据库的时候只需要更改下面的四个变量就可以了
::数据库用户名USER
::密码PASSWORD
::要备份的数据库DATABASE
::备份目录BACKUPDIR
::BACKUPDATE取出“YYYYMMDD”格式的当前时间,这一个变量不需要改。
set USER=TESTZSL
set PASSWORD=TESTZSL
set DATABASE=orcl
set BACKUPDIR=C:\oraclebackup
set BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%
::输出备份数据
::exp导出数据库数据
::%USER%/%PASSWORD%@%DATABASE%表示数据库名/密码@数据库实例名称
::file导出的文件
::log导出的日志
exp %USER%/%PASSWORD%@%DATABASE% file=%DATADIR%\%USER%.dmp log=%DATADIR%\%USER%.log
::删除30天前的备份。
::forfiles表示删除文件
::/p 后面跟的是要删除的文件所在路径,指定了要在哪个目录里查找文件,默认是当前工作目录。
::/m 后面跟的是要删除的文件名(*.*表示所有文件)
::/d 后面接的是删除几天前的文件,指定一个日期或天数,用于比较文件的最后修改日期是否符合条件。
::/c 后面跟的命令意思是对每个找到的文件在cmd中执行del命令。
forfiles /p "C:\oraclebackup" /s /m *.* /d -4 /c "cmd /c del @file"
(2)参数说明:
1)在脚本中先设置了五个变量,分别是:
USER:数据库的名称
PASSWORD:登录密码
DATABASE:数据库
BACKUPDIR:文件存放的路径
BACKUPDATE:当前的时间
2)然后创建备份的目录,使用if判断,如果目录不存在,就用mkdir创建一个目录。
3)接着使用exp导出数据库中的数据(exp导出数据库中数据的时候导的不是很全,有的时候它只导出了部分的表)
exp 数据库名/密码@数据库 file表示导出后文件存放的路径 log表示导出后日志存放的路径
--例:exp TESTZSL/TESTZSL@orcl file=ESTZSL.dmp logESTZSL.log
4)编写完脚本后,打开电脑右键--运行--cmd,将刚刚编写好的脚本文件拖进cmd中,回车运行(编写好的脚本也可以直接双击运行,但直接双击运行很多时候会出错,而且我们看不到错在什么地方,所以多数情况下会在cmd中运行,便于发现问题解决问题)。
5)运行测试一下脚本是否有问题,是否可以导出数据库中的数据。
6)如果没有问题,返回到共享文件夹,这时我们就可以看到导出的备份文件了。
(3)执行脚本过程截图



三、建立任务计划,自动备份
1.首先打开电脑控制面板,找到系统和安全

2.找到管理工具,点击打开

3.找到任务计划程序,双击打开

4.在右侧找到创建基本任务

5.然后填写人物的名称和描述

6.选择每天

7.设置每日什么时候,每个几天发生一次

8.然后选择启动程序

9.填入需要执行的脚本所在的路径

10.然后点击完成

11.打开任务计划程序库,找到刚刚新建的任务双击

12.设置不管用户是否登录都执行,然后点击确定

13.最后填入电脑的登录名和密码,就完成了每天定时自动备份数据库文件。

注:exp和expdp使用时候的区别
1.EXP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
2.EXPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
3.EXP和EXPDP最明显的区别就是导出速度的不同。EXPDP导出是并行导出(如果把EXP导出比喻为一个工人在挖土,那么EXPDP就相当于一个挖掘机在挖土)
4.EXP和EXPDP导出不止是速度的不同,同时导出机制也完全不同,所有用EXPDP导出的DMP文件只能用IMPDP的方式导入。