存档

文章标签 ‘备份’,文章数:6

在数据库备份策略中,因为磁盘空间所限,需要删除N天前的备份文件。

本博客中有篇:实现连续N次备份数据库的脚本

其中有删除七日前的数据库备份文件的命令。那篇博客中利用了vbs处理日期的方法。但是,有点不妥当的地方,假如近七日内没有备份成功,或者说近七日内没有任何备份文件。如果删除了七日前的备份文件,那么就没有任何一个有效的备份文件了。这在数据库备份策略中是尤其需要注意的。

 

下面的命令不仅仅能够删除4天前的备份文件,而且能够保证有4天的备份文件。说白了也就是保留4份备份文件。呵呵。

del /f d:\123.txt && FOR /F "usebackq tokens=1,2,3*" %i IN (`dir E:\oracle\oradata\orcl /A-D /O-D ^| find ":"`) DO @echo %i %j=%l >>d:\123.txt
for /F "usebackq skip=5 delims== tokens=1*" %i in (d:\123.txt) do echo del /f %j

 

注释:skip=5表示跳过前4行记录。d:\123.txt是保存临时数据的文件,可以改成其他,比如: %temp%\123.txt

目录E:\oracle\oradata\orcl为备份文件所在路径。

如果放在bat脚本文件中执行上面的2行命令。需要将 %i之类的替换成 %%i

将上面2行命令的第2行中加粗字体的echo去掉,就能够实现删除操作了。 为了保险起见,先打印出删除文件的语句。

另:关于for循环命令的用法可以参考:CMD命令行:for命令详解[转]

 

 

 

 

 

 

以下操作均由sybase用户来做:

新建一个脚本文件,譬如/sybase/script/dump.sh
类容如下

$ cat dump.sh
/sybase/OCS-12_5/bin/isql -Usa -P******* -S******* -i /sybase/script/dump.sql -o /sybse/script/dump.log
mv /caiwubackup/backup/cwbase1.bak /caiwubackup/backup/cwbase1_`date +%Y%m%d`.bak
mv /caiwubackup/backup/cwbase2.bak /caiwubackup/backup/cwbase2_`date +%Y%m%d`.bak
mv /caiwubackup/backup/cwbase3.bak /caiwubackup/backup/cwbase3_`date +%Y%m%d`.bak
mv /caiwubackup/backup/cwmaster.bak /caiwubackup/backup/cwmaster_`date +%Y%m%d`.bak
mv /caiwubackup/backup/master.bak /caiwubackup/backup/master_`date +%Y%m%d`.bak

(注意:`号是在键盘左上角和波浪线在一起的那个键上,不是单引号)

在同一个目录下新建脚本dump.sql
类容如下

$ cat dump.sql

dump database cwbase1 to "/caiwubackup/backup/cwbase1.bak"
go
dump database cwbase2 to "/caiwubackup/backup/cwbase2.bak"
go
dump database cwbase3 to "/caiwubackup/backup/cwbase3.bak"
go
dump database cwmaster to "/caiwubackup/backup/cwmaster.bak"
go
dump database master to "/caiwubackup/backup/master.bak"
go

制定一个定时计划,每天晚上23点30开始备份数据库

$crontab -e
30  23 *  *  *  /sybase/script/dump.sh

根据你本机的实际情况,修改相关数据库名称和路径。

sql server 2005不支持备份压缩。很奇怪怎么不支持呢? sybase在ASE12.x都支持备份压缩了。

自sql server 2008才开始支持备份压缩。虽然只有 SQL Server 2008 Enterprise 及更高版本支持创建压缩的备份,但从 SQL Server 2008 开始,每个版本都可以还原压缩的备份。

限制
压缩的备份具有以下限制条件:

压缩的备份和未压缩的备份不能共存于一个媒体集中。

早期版本的 SQL Server 无法读取压缩的备份。

NTbackup 无法共享包含压缩的 SQL Server 备份的磁带。

 

压缩备份的性能影响
因为相同数据的压缩的备份比未压缩备份小,所以压缩备份所需的设备 I/O 通常较少,因此通常可大大提高备份速度。

默 认情况下,压缩会显著增加 CPU 的使用,并且压缩进程所消耗的额外 CPU 可能会对并发操作产生不利影响。因此,您可能需要在会话中创建低优先级的压缩备份,其 CPU 使用率受资源调控器限制。有关详细信息,请参阅如何使用资源调控器限制备份压缩的 CPU 使用量 (Transact-SQL)。

若要很好地了解备份 I/O 的性能表现,可以通过评估以下类型的性能计数器来分别考察进入设备或来自设备的备份 I/O:

Windows I/O 性能计数器,例如物理磁盘计数器

SQLServer:Backup Device 对象的 Device Throughput Bytes/sec 计数器

SQLServer:Databases 对象的 Backup/Restore Throughput/sec 计数器

有关 Windows 计数器的信息,请参阅 Windows 帮助。有关如何使用 SQL Server 计数器的信息,请参阅使用 SQL Server 对象。

有这样一个备份策略:周一对某用户数据库进行完全备份,周二,周三一直到周日都进行日志备份。此策略简单易于说明本文的问题。

假如在周五的时候,其它地方需要使用此用户库的所有数据,而又不想拷贝周一的备份和后续的多个日志备份文件。此时,如何进行数据库全备呢?

如果做全备的话,则可能对原本运行正常的备份策略产生影响。此应用场景下,对用户库做了全备后,后续的周六、周日的日志备份所对应的基点就不是周一的全备而是周五的全备了。如果还按照原本的备份策略,则势必会出现问题。

如何在做数据库全备的时候,不影响原来的备份策略呢?

解决办法:

在sql server 2005 中有个参数 copy_only。

backup database andkylee to disk='d:\andkylee.bak' with copy_only

已为数据库 'andkylee',文件 'andkylee' (位于文件 2 上)处理了 17296 页。
已为数据库 'andkylee',文件 'andkylee_log' (位于文件 2 上)处理了 1 页。
BACKUP DATABASE 成功处理了 17297 页,花费 5.790 秒(24.471 MB/秒)。

成功!

 

————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:sql server 2005 备份 完全备份  with copy_only
————————————————————————————————-

今天试验了一下不同ASE版本跨平台远程备份数据库的操作。

环境:

源数据端:solaris 10 SPARC 64bit,ASE 12.5.4,称为:server1

目的数据端:windows xp x86,ASE15.0.3,称为:server2

 

任务:

测试将源数据端solaris上的ASE数据库服务器里面的andkylee库远程备份到目的windows-xp机子上。


第一步:在server1的interfaces文件中添加远程服务器条目

在server2的连接接口配置文件%SYBASE%\ini\sql.ini中,备份服务器的名称为:TEST_BS.

在server1的 /db/sybase/ase1254/interfaces中添加:

TEST_BS
        master tcp ether 192.168.2.173 5001
        query tcp ether 192.168.2.173 5001

 

注意:添加到server1的远程备份服务器名称务必和server2中的备份服务器名称保持一致。

 

第二步:连接上server1的ASE服务器,添加远程备份服务器的条目

isql -Usa -P -Sase1254

sp_addserver TEST_BS

这一步不是必须的!

第三步:在server1的ASE中执行远程备份命令

dump database andkylee to "d:\andkylee_remote.dmp" at TEST_BS

可以使用stripe on进行远程备份文件分片,最大分片数为32。

如果想压缩远程备份文件的话,必须使用with compression=[0-9]选项;兼容选项compress::只支持本地备份。

最后检查,在远程服务器server2上D盘发现有远程备份生成的文件:andkylee_remote.dmp。 远程备份数据库操作完成!

 

————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:ase cross-platform dump load solaris windows 跨平台 远程 备份恢复
————————————————————————————————-

我们知道根据生产数据库的业务数据情况来安排备份的频率,比如:每月、每周、每日,有的甚至每小时备份一次。要备份sybase数据库,需要自己手动写命令。这样,下一次可能会覆盖上一次的备份文件。通过脚本在下一次备份时产生不同的备份文件名称就不会覆盖上一个备份文件了。这样,能够自动保留数据库的多个数据库备份文件,更有力的保障了数据库的安全。

将下面的脚本复制到记事本中,另存为bat格式。添加到windows的计划任务中,
============================================================================================

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
echo off
cls
:: 默认保留近7日来的数据库备份,可以把7改成自己想连续的天数
:: 其中d:\sybase\data为数据库备份地址,可以自己再次指定
:: master为默认备份的数据库名称,可以修改成其它用户数据库名称
set databak_path=d:\sybase\data
set databasename=master
echo dt=date()-7>%temp%\OldDate.vbs
echo s=right(year(dt),4) ^& "-" ^& right("0" ^& month(dt),2) ^& "-" ^& right("0" ^& day(dt),2)>>%temp%\OldDate.vbs
echo wscript.echo s>>%temp%\OldDate.vbs
for /f %%f in ('cscript /nologo %temp%\OldDate.vbs') do @set DelFlag=%%f
::删除七日前的数据库备份文件
if exist "%databak_path%\%databasename%_%DelFlag%.dump" del "%databak_path%\%databasename%_%DelFlag%.dump"
del %temp%\OldDate.vbs
if exist %temp%\dump_db.txt (del %temp%\dump_db.txt)
echo dump database %databasename% to "%databak_path%\%databasename%_%date:~0,10%.dump" >>%temp%\dump_db.txt
echo go >>%temp%\dump_db.txt
isql -Usa -P -Syour_servername <"%temp%\dump_db.txt" >>%databak_path%\dump_log.txt
del "%temp%\dump_db.txt"

————————————————————————————————————
——— 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
——— 转载务必注明原始出处 : http://www.dbainfo.net
——— 关键字: ASE 数据库 备份 自动 连续备份  删除旧备份
————————————————————————————————————