需求:
两台P550+DS4700架设oracle10g RAC,由于用户比较多、数据量比较大,通过exp导出需要的时间巨大(大约要24小时),时间窗不允许采用这样的备份方式,又没有备份软件进行自动备份,所以需要一种备份机制可以实现自动备份的前提下,用时也能控制在没有业务发生的时间内完成。
解决办法:
由于是oracle10g,我能想到的好办法是使用expdp方式在主机备份后、压缩并自动上传到FTP服务器,并删除服务器上的备份文件及上一次的压缩文件,以保持系统的可用空间。
下面是我的详细操作过程,记录下来备忘的同时希望能帮得到需要的朋友。
(1)先在操作系统上建立备份目录:/oracle/dpump_dir,给oracle:dba权限,赋于775权限
(2)通过oracle在数据库中建立备份目录:
>CREATE DIRECTORY DPUMP_DIR as '/oracle/dpump_dir';
查询创建了那些子目录:
>SELECT * FROM dba_directories;
(3)注意事项:
我这里是使用system用户来进行操作的。 如果是其他用户,那么就需要对这个用户进行赋权。
SQL> grant create any directory to system;
Grant succeeded.
#查看system用户的权限
SQL> select * from dba_sys_privs where grantee='SYSTEM';
grantee privilege adm
------------------------------ ---------------------------- ------------
system create any directory no
system global query rewrite no
system create materialized view no
system create table no
system unlimited tablespace yes
system select any table no
如果是其他用户使用sys创建的目录,也需要进行赋权,如:
SQL> grant read, write on directory dpump_dir to system;
导出整个数据库,且使用并行导出方式
(4)建立备份脚本backup.sh,并给于775权限,脚本内容及说明如下:
=========================================================
#backup.sh文件。该文件先定义Oracle的环境变量,然后导出当天的数据,并创建相关的日志,然后把当天的数据和日志打包成.tar.gz文件。
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#Oracle的字符集,Oracle数据库的中文字符集为AMERICAN_AMERICA.ZHS16GBK
export ORACLE_HOME=/oracle/db10g
#Oracle数据库的根目录
/oracle/db10g/bin/expdp system/password@orcl1 directory=DPUMP_DIR dumpfile=orcl_`date +%Y%m%d`_%u.dmp logfile=orcl_`date +%Y%m%d`.log parallel=6 full=yes
#导出当日的数据库的数据并写日志。如当为2012-12-17,数据文件为orcl_20121217_01.dmp,日志为orcl_20121217.log
cd /oracle/dpump_dir
tar -cf orcl_`date +%Y%m%d`.tar orcl_`date +%Y%m%d`_*.dmp orcl_`date +%Y%m%d`.log
#把数据文件和日志打包
rm -f orcl_`date +%Y%m%d`_*.dmp
rm -f orcl_`date +%Y%m%d`.log
#删除备份.dmp文件和.log日志
gzip orcl_`date +%Y%m%d`.tar
#把tar包压缩成.tar.gz包
cat orcl_`date +%Y%m%d`.log | mail -s 'jdt_orcl Web Backup' yuyulu@live.cn[/email]
#把当天日志发送到[email=yuyulu@live.cn]yuyulu@live.cn邮箱
mv orcl_`date +%Y%m%d`.tar.gz /svr
#把当前目录的.tar.gz包移动到/svr目录下
find /svr -type f -mtime +7 -exec rm -f {} \;
#删除上个星期前生成的备份文件
#通过FTP上传到备份服务器
cd /svr
ftp -v -n 192.168.100.7 << EOF
user test test
binary
hash
prompt
put orcl_`date +%Y%m%d`.tar.gz
bye
EOF
==========================================================
注意:该语句是采用6个线程的方式备份整个数据,备份文件名称自动加上01-06的编号!!!!expdp语句后面没有分号,如果是双机注意SID实例名是否正确。否则会出现 ORA-39001参数错误。如果出现ORA-39002,一般是由于没有建立备份目录造成的!!!!)
(5)将脚本添加到crontab自动运行
#crontab -e
(格式为minute hour day_of_month month weekday command)
0 1 * * 6 /home/oracle/backup.sh >/dev/null 2>&1 #backup database every weeky at saterday 1:00 am!
(6)数据泵的监控
1).查询dba_directories获得所创建的目录
2).可以查询dba_datapump_jobs来查看数据泵作业的运行情况,也可以利用ATTACH重新连接上还在进行的JOB
每个datapump可以通过job_name 参数来指定作业名称,如未指定,则系统使用默认的作业名称,如下面的视图中为
SYS_EXPORT_FULL_01
通过v$session_longops也可以查看长时间运行的datapump job的具体内容
SQL> select owner_name owr,job_name jbn,operation ope,job_mode jbm,state,degree,
attached_sessions atts,datapump_sessions dats
from dba_datapump_jobs;
OWR JBN OPE JBM STATE DEGREE ATTS DATS
---------- -------------------- -------------------- --------------- ---------- ---------- ---------- ----------
SCOTT SYS_EXPORT_FULL_01 EXPORT FULL COMPLETING 2 1 2
SQL> select sid, serial#,session_type from v$session s, dba_datapump_sessions d where s.saddr = d.saddr;
SID SERIAL# SESSION_TYPE
---------- ---------- --------------
143 10 DBMS_DATAPUMP
149 37 MASTER
132 3 WORKER
136 3 WORKER
135 4 WORKER
141 5 WORKER
128 2 WORKER
142 4 WORKER
3).监控数据泵的逻辑备份程度
>SELECT sid, serial#, context, sofar, totalwork,
ROUND(sofar/totalwork*100,2) "%_COMPLETE"
FROM v$session_longops
WHERE opname LIKE '%EXP%'
AND totalwork != 0
AND sofar <> totalwork;
SID SERIAL# CONTEXT SOFAR TOTALWORK %_COMPLETE
130 33 0 54 70 77.14
(7)数据恢复的方法,通过oracle用户进行恢复
$impdp system/password DIRECTORY=/oracle/dpump_dir DUMPFILE=orcl_20121212_01.dmp,orcl_20121212_02.dmp,orcl_20121212_03.dmp SQLFILE=aa.sql
使用这种方法的impdp,可以从dp出来的dmp文件中提取对象的DDL语句,这样的impdp并不把数据导入数据库中,只是创建DDL语句文件,导入时不要使用parallel参数
(8)如果单独导出数据,在运行expdp后,按下exit组合,退出数据导出模式,进入交互模式
Export>
Export> status
(9)停止作业
Export> stop_job
是否确实要停止此作业 ([Y]/N): yes
...................
(10)用job_name再次连接到job
>expdp system/password attach=SYS_EXPORT_FULL_01
ATTACH用于在客户会话与已存在导出作用之间建立关联. 如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外
,不能指定任何其他选项。
Export: Release 10.2.0.4.0 - Production on 星期一 12月 27 15:26:14 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
作业: SYS_EXPORT_FULL_01
所有者: SYSTEM
操作: EXPORT
创建者权限: TRUE
GUID: 454A188F62AA4D578AA0DA4C35259CD8
开始时间: 星期一, 27 12月, 2012 15:26:16
模式: FULL
实例: orcl
...............................
(11)expdb的一个功能就是可以停止或是启动JOB(如果需要的话)
Export> start_job
查看状态
Export> status
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25462274/viewspace-2135852/
,如需转载,请注明出处,否则将追究法律责任。