我相信很多系统管理员每天都在做着同样的工作,——备份数据。一旦忽略了某一天,而系统恰好在这一天出现故障,需要进行数据恢复,那么这个时候就无能为力了。如果每天设定一个固定时间,系统会自动备份,那该多好啊!笔者结合实践经验,谈谈UNIX环境下oracle数据库的自动备份,以起到抛砖引玉的作用。
我们计划在下午23: 00进行数据库导出备份,在凌晨2: 00将备份文件复制到磁带,在凌晨4: 00将备份文件复制到另一台UNIX机器。为此,我们可以做到以下几点:
首先,导出数据库
export命令将数据库中的数据备份到二进制文件中。它通常有三种模式:用户模式、表模式和整个数据库模式。本文拟采用用户模式。在备份之前,应该建立一个备份目录来容纳备份文件,例如/backup目录。然后我们可以在UNIX的Oracle目录下(或者其他目录下)建立两个文件ora—backup和tar—backup。需要注意的是,前面的文件需要初始化Oracle的参数。为了方便起见,我们不妨将初始化命令放在一个文件中(姑且称之为ora—env),然后从第一个文件调用它。
1.ora-env文件初始化Oracle的参数,其内容如下:
ORACLE-HOME=$ ORACLE-HOME;导出Oracle—主页
ORACLE—SID=ora 73;导出ORACLE—SID
ORACLE—TERM=sun;导出Oracle—术语
LD—LIBRARY—PATH=$ ORACLE—HOME/lib;exportLD—库—路径
ORA—nls 32=$ ORACLE—HOME/o common/nls/admin/data;NLS出口公司
路径=。/usr/CCS/bin:/usr/UCB:$ ORACLE—HOME/bin:$ PATH;导出路径
显示=主机1:0;导出显示
NLS—郎=American—America . zhs 16 cgb 231280;导出语言
2.ora-备份文件导出数据库,并且导出的文件名可以任意设置。该文本设置为字母“xx”加上当前日期,即如果当前日期为12月10日,导出的文件名为“xx1210.dmp”,与其他日期的备份文件不同。
ora—备份文件内容:/oracle/ora—env
#初始化Oracle数据库
rq=' date+"% m % d "''
#将今天的日期赋给变量rq
RM/备份/,
#清空/backup目录
exptest/testfile=/backup/xxrq . DMP log=/backup/xxrq . log
该命令用于在$提示符下导出测试用户(其密码也是test)的数据,导出的文件和日志放在/backup目录中。
第二,磁带备份
tar—备份文件将导出命令导出的数据文件复制到磁带。
tar—备份文件内容:
tarrvf/dev/rmt/0n/backup/,
该命令可以将当天在/backup目录中生成的文件备份到磁带上。在本文档中,tar命令使用三个参数,其中R选项表示将文件复制到磁带而不破坏磁带的原始内容,V选项表示在复制过程中显示文件信息,F选项后跟磁带设备名以指定文件的复制位置,N选项表示磁带驱动器不倒带。/dev/rmt/0表示UNIX主机的第一个磁带机,同样,/dev/rmt/1表示UNIX主机的第二个磁带机,依此类推。
写入ora—env、ora—backup和tar—backup文件后,分别使用以下命令:
chmod755ora—env
chmod 755 ora—备份
chmod 755 tar—备份
这样,这三个文件都成为可执行文件。
第三,异地备份
我们知道,FTP命令通常用于两台主机之间传输数据,但一般是通过交互方式实现的,即IP地址、用户名、密码等。需要手动输入目标主机的。显然,这不符合自动备份的要求。幸运的是,我们可以通过编写一个. netrc文件来实现我们的目标。该文件必须命名。它必须存储在启动FTP命令的机器上的用户注册目录中。该文件的权限应该禁止该组或其他用户进行读取访问。这样,当用户使用FTP命令时,系统将查找。用户注册目录中的netrc文件。如果可以找到,它将首先执行该文件,否则,它将交互地提示用户输入用户名、密码等。
在使用FTP命令之前,应该在另一台用于备份的UNIX机器上构建一个目录来容纳备份文件。本文构建的目录是/pub。需要指出的是,为了加快备份速度,两台主机之间的传输速率应尽可能高,最好位于同一个局域网内。
的。netrc文件如下:
机器主机2
# #主机2是用于备份的主机名。
逻辑清晰
# #oracle是备份主机上的用户。
密码oracle
# oracle用户的密码是oracle
麦克德芬尼特
#定义一个名为init的宏,它将在自动注册过程结束时执行
箱子
#文件传输模式设置为二进制。
液晶显示器/备用
#输入本地工作目录/备份
cd/pub
#输入备份主机目录/pub
mput
#将/backup目录中的所有文件传输到备份主机
再见
#退出FTP会话过程
之后。netrc文件,使用以下命令:
chmod600.netrc
通过这种方式。netrc文件只能由该用户访问。
四。开始备份过程。
Cron是一个永久进程,由/etc/rc.local启动和执行,Cron检查/var/spool/Cron/crontabs/目录中的文件,找到要执行的任务和执行时间。
Crontab文件的每一行都由六个字段组成(分钟、小时、日月、月、日周、命令),这些字段由空格或制表符分隔,其中:
分钟:分钟字段,取值范围为0到59。
Hours:小时字段,取值范围为0-23。
Dayofmonth:日期,取值范围是1到31。
月:月,取值范围为1到12。
Dayofweek: week,值的范围是0到6,Sunday值是0。
Command:要运行的命令。
如果一个域为,则意味着该命令可以在该域的所有可能范围内执行。
如果域是由连字符分隔的两个数字,则表明命令可以在这两个数字之间的范围内执行(包括这两个数字本身)。
如果域由一系列用逗号分隔的值组成,则表明命令可以在这些值的范围内执行。
如果日期字段和周字段都有值,则这两个字段都有效。
现在,我们编写一个文件来启动自动备份过程。值得注意的是,这个文件只能用Oracle用户名下的crontab-e命令编辑,否则不会定期执行。文件名为Oracle,文件将放在/var/spool/cron/crontabs目录中。编辑后,可以使用crontab-l命令在Oracle的$提示符下查看它。
Oracle文件内容:
023/Oracle/ora—备份
#每天23点备份数据库。
02/Oracle/tar—备份
#每天下午2点将文件备份到磁带
04 FTP-ihost 2
#每天4: 00将文件备份到另一台主机
以上操作完成后,系统会每晚自动生成一份备份,并自动将备份文件分别复制到磁带和另一台主机上。系统管理员需要做的是每隔几天更换一次磁带(更换磁带的周期取决于备份文件的大小和磁带的容量)并清理备份目录。这样,他们就可以摆脱繁琐的数据备份任务,去做其他更有意义的工作。数据库不仅实现了磁带备份,还实现了远程备份,相应的安全性也大大提高。