快速轻松搞定Oracle B备份脚本(oracle b备份脚本)

快速轻松搞定Oracle B备份脚本

在Oracle数据库中备份是非常重要的,因为它可以为公司的业务运营提供数据恢复保障,并提供备份数据用于测试等用途。对于Oracle数据库管理员而言,备份数据是尤为关键的一个问题,但是备份数据却是一项很繁琐且耗时的工作。因此,编写一个高效的Oracle B备份脚本显得尤为重要。

本文将着重介绍如何编写一个快速轻松搞定Oracle B备份脚本。

1. 编写备份脚本

通过命令行工具或者Oracle SQL Developer等工具连接Oracle数据库,并通过PL/SQL脚本语言编写备份脚本。备份脚本包含备份的类型、备份的目标位置、备份的文件格式、备份的时间等信息。下面是一个备份脚本的示例:

“`sql

— 数据库backup脚本

–设置输入参数

DEFINE dirPath =’D:\backup’ –备份的目标位置

DEFINE hms = TO_CHAR(SYSDATE, ‘hh24miss’) –备份时间 当前时间hh24mmss格式

— 开始备份

SPOOL &dirPath\backup_&hms..log; –设置log日志

SQLPLUS -S scott/tiger

set echo off

set feedback off

set heading off

set pagesize 0

set termout off

column username new_value v_username;

column instance_name new_value v_instance_name;

column v_sid01 new_value v_sid01;

column v_sid02 new_value v_sid02;

select (select username from v\$session where sid=(select sid from v\$mystat where rownum=1)) username,

(select instance_name from v\$instance) instance_name,

(select SID from v\$mystat where rownum=1 and rownum = 1) v_sid01,

(select lpad(to_number(sid),3) from v\$mystat where rownum=1 and rownum = 1) || ‘_’ v_sid02

from dual;

— 自动寻找数据库需要备份的文件,如datafile, controlfile, spfile,archivelog

column sid new_value v_sid;

column uuid new_value v_uuid;

column fname new_value v_fname;

column type new_value v_type;

column start_time new_value v_start_time;

column end_time new_value v_end_time;

column size new_value v_size;

set lines 200

SELECT inst_id SID, s.UUID, p.member fname, DECODE(p.type, ‘DATAFILE’,’datafile’,’ONLINE LOG’,’online log’,’CONTROLFILE’,’controlfile’,’SPFILE’,’spfile’, p.TYPE) type, sysdate v_start_time,

LEAD(sysdate) OVER(ORDER BY s.thread, p.recid) v_end_time,

(p.blocks * s.block_size / 1024 / 1024) size

FROM gv\$datafile p, gv\$session s

WHERE s.program LIKE ‘%ora_dbbackup.pl%’

AND p.inst_id = s.inst_id

UNION ALL

SELECT inst_id, s.UUID, l.member, ‘ONLINE LOG’, sysdate, LEAD(sysdate) OVER(ORDER BY s.thread, l.recid),

blocks * s.block_size / 1024 / 1024

FROM gv\$log l, gv\$session s

WHERE s.program LIKE ‘%ora_dbbackup.pl%’

AND l.inst_id = s.inst_id

UNION ALL

SELECT inst_id, s.UUID, c.member, ‘CONTROLFILE’, sysdate, LEAD(sysdate) OVER(ORDER BY s.thread),

bytes / 1024 / 1024

FROM gv\$controlfile c, gv\$session s

WHERE s.program LIKE ‘%ora_dbbackup.pl%’

AND c.inst_id = s.inst_id

UNION ALL

SELECT inst_id, s.UUID, sp.name, ‘SPFILE’, sysdate, LEAD(sysdate) OVER(ORDER BY s.thread),

length(sp.value) / 1024 / 1024

FROM gv\$parameter sp, gv\$session s

WHERE s.program LIKE ‘%ora_dbbackup.pl%’

AND sp.inst_id = s.inst_id

AND sp.name IN (‘SPFILE’, ‘UNDO_MANAGEMENT’)

ORDER BY 1,2,4; 进行备份

spool off;

–将备份结果输出到.log文件中

SPOOL &dirPath\backup_&hms..log

select ‘******* backup cmd ******’ from dual;

select ‘backup database plus archivelog delete input;’ from dual;

select ‘**************************’ from dual;

select ‘******* backup items ******’ from dual;

select ‘Database: ‘|| v_instance_name from dual;

select ‘File name, type, start time, end time, size:’;

select v_sid01 || v_sid02, ‘Datafile:’ || v_fname ||’.bkp’, v_start_time, v_end_time, v_size from ?;

select CONCAT(‘Controlfile:’, (select name from v\$database ||'(AUTOBACKUP)’), v_start_time, v_end_time, v_size) from dual;

select ‘***************************’ from dual;

SPOOL OFF;


2. 自动化处理备份

在备份脚本编写完成后,可以为备份脚本增加自动化处理程序。例如,可以编写一个简单的python程序,使用系统的定时任务(如windows的任务计划器),来定期执行备份脚本。下面是一个定时任务的示例:

```python
import os
import datetime

current_time = datetime.datetime.now()
time_format = "%Y%m%d_%H%M%S"
backup_dir = 'backup_path'
backup_file = '{}.bkp'.format(current_time.strftime(time_format))
log_file = 'backup_{}.log'.format(current_time.strftime(time_format))

backup_cmd = 'sqlplus -silent -l user/pass@sid @backup.sql'

# 执行备份命令
os.system(backup_cmd)
# 创建备份目录
if not os.path.exists(backup_dir):
os.mkdir(backup_dir)

# 将备份文件移动到备份目录
os.rename(backup_file, os.path.join(backup_dir, backup_file))
# 将日志文件移动到备份目录
os.rename(log_file, os.path.join(backup_dir, log_file))

以上示例使用Python编写了一个简单的自动备份程序。每次执行备份脚本时,将备份文件和日志文件保存到指定的备份目录中。用户可以通过修改Python程序,并配置Windows任务计划器,在每天固定时间自动执行备份程序。

通过完成以上两个步骤,用户就可以轻松编写Oracle B备份脚本,并实现自动化备份。在编写后可以用Oracle RMAN(Recovery Manager) 也可以使用第三方备份软件像DataGrip等程序进行备份。


数据运维技术 » 快速轻松搞定Oracle B备份脚本(oracle b备份脚本)