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的方式导入。

results matching ""

    No results matching ""