ITPub博客

首页 > Linux操作系统 > Linux操作系统 > exp多台机器轮流备份.

exp多台机器轮流备份.

原创 Linux操作系统 作者:hb0860 时间:2010-05-07 17:01:39 0 删除 编辑
       N久以前,还没有使用灾备的时候,需要手工对生产数据库进行备份,而且还需要保留一段时间才能将以前的老的备份给删除掉.最关键的是数据库的数据量比较大,一台机器不能保留那么多的备份,因此写了一个备份的小东西,发上来与大家共享.在里边还带有了一点备份管理查询的功能.
       1,创建备份管理的表.主要记录备份的文件名,开始结束时间,以及备份的目的地
create table EXP_BACK
(
  NO            NUMBER(10) not null,
  BACK_SJ       DATE,
  BACK_WJ       VARCHAR2(40),
  BACK_BEGIN_SJ DATE,
  BACK_END_SJ   DATE,
  IPP           VARCHAR2(25)
);
     2,备份的引导脚本,在win下需要保存成.bat(批处理文件).
echo off
sqlplus "sys/sys_pass@to_server as sysdba" @d:\data_back\Export\doexport.sql
这里必须使用sys用户登陆,因为我这里是9i,在备份的时候中间可能会出一些关于lob数据类型的报错,为了防止报错的出现,需要执行一些语句.
     3,备份脚本:d:\data_back\Export\doexport.sql.
column today new_val dt
column del new_val del
set time on;
select to_char( sysdate, 'yyyymmddhh24miss' ) today from dual;
spool d:\data_back\Export\log\Spool_&dt..log;
select '数据记录' from dual;
select 'del d:\'||min(back_wj) del from username.exp_back where ipp=sys_context('userenv','ip_address');
delete from username.exp_back where to_char(back_sj,'yyyymmdd')=substr('''||&del||''',19,8) and ipp=sys_context('userenv','ip_address');
host &del;
delete from username.exp_back where back_sj=to_date(substr(&dt,1,8),'yyyymmdd') and ipp=sys_context('userenv','ip_address');
insert into username.exp_back values(username.EXP_BACK_NEW.NEXTVAL,to_date(substr(&dt,1,8),'yyyymmdd'),'Product_'||substr(substr(&dt,1,14),1,14)||'.dmp',sysdate,sysdate,sys_context('userenv','ip_address'));
commit;
select '更新视图' from dual;
CREATE OR REPLACE VIEW exu9tne (
tsno, fileno, blockno, length) AS
SELECT ts#, segfile#, segblock#, length
FROM sys.uet$
WHERE ext# = 1
UNION ALL
SELECT * FROM SYS.EXU9TNEB;
select '备份开始' from dual;
host exp userid=username/password@to_server' file=d:\Product_&dt..dmp  wner=username compress=y log=d:\data_back\Export\log\Product_&dt..log  STATISTICS=NONE ;
select '备份结束,恢复视图' from dual;
CREATE OR REPLACE VIEW exu9tne (
tsno, fileno, blockno, length) AS
SELECT ts#, segfile#, segblock#, length
FROM sys.uet$
WHERE ext# = 1;
select '数据记录更新' from dual;
update username.exp_back set back_end_sj=sysdate where back_sj=to_date(substr(&dt,1,8),'yyyymmdd');
commit;
spool off;

exit ;
exit;
这样就可以在多台机器上分别布置备份了,然后通过计划任务进行调用.当然这只是在灾备条件不允许的情况下采取的下下策,最好还是上灾备系统.这才是万全之策.
使用中要注意,1目录名,2 文件名,3,用户名和密码,4,连接字串.
 
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/38006/viewspace-662182/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-11-20

  • 博文量
    31
  • 访问量
    64870