CENTOS 4.4,TSM5.3.2,ORACLE 10G
环境:
一台破PC机,P3 900Mhz,256M 内存,40G 硬盘
一台淘汰了的HP DAT 40 磁带
N个不知道多少年的DDS3和DDS4磁带
参考书籍:
IBM Tivoli Storage Manager for Linux 管理员指南
IBM Tivoli Storage Manager for Linux 管理员参考
IBM Tivoli Storage Manager for Linux 快速入门
IBM Tivoli Storage Manager for Database
IBM Tivoli Storage Manager for UNIX 备份-归档客户机安装与用户指南
IBM Tivoli Storage Manager 消息
安装包:
TIVsm-server-5.3.2-0.i686.tar.bz2
TSM532.tar
TDP FOR ORACLE
目的: 能够让oracle使用TSM作为第三方媒体管理层,将RMAN备份集等备份到磁带里面,并且自动备份TSM的数据库
安装步骤:
1. 最小化安装CENTOS.
2. 解压缩TIVsm-server-5.3.2-0.i686.tar.bz2,里面有server和tsmscsi两个rpm文件,一个是 服务器端,一个是设备的 驱动程序,都是必须的,想都不想,装上去先,记得会提示缺一个包,在CENTOS光盘中就有,装上就OK.
3. 解压缩TSM532.tar,安装里面的TIVsm-API.i386.rpm和TIVsm-BA.i386.rpm.
4. 全部4个rpm文件按照默认路径安装完成之后,会在/opt目录下生成tivoli子目录,内有N多东西,如server目录,client目录.
5. 执行:export DSMSERV_DIR=/opt/tivoli/tsm/server/bin
执行:export DSMSERV_CONFIG=/opt/tivoli/tsm/server/bin/dsmserv.opt
用来添加一下变量。
配置步骤一
1. 首先,进入/opt/Tivoli/tsm/client/ba/bin目录,里面有dsm.opt.smp和dsm.sys.smp两个示例文件,把他们分别copy成dsm.opt和dsm.sys文件.
2. 用VI编辑dsm.sys文件,如下:
######################################
SErvername centos
COMMMethod TCPip
TCPPort 1500
TCPServeraddress 172.16.9.165
nodename centos
passwordaccess generate
managedservices schedule
######################################
其中,第一行SErvername centos表示, 服务器的名称centos,
第二行 COMMMethod TCPip表示客户端和 服务器端的通讯方式
第三行 TCPPort 1500表示客户端和服务器端的通讯端口
第四行 TCPServeraddress 172.16.9.165表示服务器的IP地址
第五行 nodename centos表示这台客户端的节点名称centos
第六行 passwordaccess generate表示密码的提示方式
第七行 managedservices schedule表示CAD服务管理目标
由 于我只有一台破PC,所以服务器和客户端都是它,名字也都是centos,服务器IP就是自己,这些都好说,重点在第六,七行,第六行有两个值,其中 passwordaccess是选项名,generate是值,generate表示在客户端和服务器端联系的时候,不询问密码,另一个值prompt表示每次都询问密码,是默认值.由于我需要自动执行任务,所以需要指明是generate.第七行managedservices是指CAD程序管理调度程 序还是WEB客户机,两个值,webclient是默认值,schedule表示管理调度,可以两个都指定.
3. 用VI编辑dsm.opt文件,如下:
###############################
SErvername centos
###############################
这里我只写了一行,因为我没有很多个服务器,所以只有一行,要和dsm.sys里面对应
4. 进入/opt/Tivoli/tsm/server/bin,运行./dsmserv &启动服务器,并放入后台运行.
5. 进入/opt/Tivoli/tsm/client/ba/bin,运行./dsmadmc –con,用以查看服务器反馈的消息,这个很重要的,管理员帐号和密码都是admin.
6. 再次运行./dsmadmc,进入命令行控制台,帐号密码admin.此时,服务器的名字是server 1,用set servername centos把名字改成centos.最好把服务重启一次.
7. q do 发现,有一个domain是standard,我不喜欢他,删除掉,但需要先删除掉domain里面的客户机,remove node client可以删除原有的接点,client是接点名.然后再del do standard, 删除掉默认的domain,后面会重新建立一个.
8. 定义一个手动库newlibrary:
Def libr newlibrary libtype=manual
9. 定义newlibrary里面的 驱动器newdrive.
Def drive newlibrary newdrive
10. 定义newdrive的path:
Def path centos newdrive srctype=server desttype=drive library=newlibrary device=/dev/tsmscsi/mt0.
我曾在这里碰到很大一个麻烦,两天多才解决,就是device这个参数的值不知道是什么,在linux中, 磁带机 一般是/dev/st0,我用/dev/st0可以正常的tar,但定义path的时候,device设置/dev/st0就一直报错ANR8420E错 误,查《IBM Tivoli Storage Manager 消息》得知,就是device的值错误,弯弯饶,饶弯弯,终于在《IBM Tivoli Storage Manager for Linux 快速入门》中看到,原来需要一些配置,象我这种只连接了一个 磁带机的,运行/opt/Tivoli/tsm/devices/bin下的autoconf文件,就会生成/dev/tsmscsi/mt0,用这个做device的值就可以了.
配置步骤二
11. 定义设备类devclass:
Def devclass newdevclass library=newlibrary devtype=4mm format=dds4c estcapacity=40G
定义了一个newdevclass的设备类,属于newlibrary库,使用4mm 磁带,规格dds4C,C表示压缩,容量40G.
12. 定义一个新的 存储池newpool:
Def stgpool newpool newdevclass maxscratch=0
定义了一个属于newdevclass设备类的存储池newpool,不使用临时卷.
13. 给磁带做label:
Label libvolume newlibrary linuxtsm1 overwrite=yes
Label了一个linuxtsm1的磁带,覆盖了原由的label.如此反复几次,label所有要用的磁带
14. 把已经label好的磁带分配给存储池:
Def volume newpool linuxtsm1
把linuxtsm1分配给newpool这个存储池.
15. 定义一个位置在 硬盘上的存储池,以实现高速备份的目的:
Def stg diskpool disk maxsize=100M nextpool=newpool
定义了一个diskpool池,属于disk类,最大能存放的单个文件大小100M,超过100M的直接放到下一个存储池newpool,迁移时也迁移到newpool.
定义这个存储池的目的是为了实现高速备份,因为硬盘速度毕竟比磁带快多了,但要限制单个文件的大小,防止太大的文件写入导致空间不够,引起备份过程中就要迁移,很不好,下一个存储池就可以指向磁带存储池newpool.这个存储池对备份性能的提高很有作用.
16. 给diskpool存储池定义一个在硬盘上的卷:
Def vol diskpool /home/diskvol formatsize=5000
定义了一个在/home目录下的卷,名称diskvol,大小5000M,属于diskpool池,
17. 定义一个新的domain:
Def domain newdomain
18. 定义一个新的policyset:
Def policyset newdomain newset
定义了一个新的策略设置newset,属于newdomain
19. 定义一个新的管理类newmgclass
Def mgmtclass newdomain newset newmgclass
定义了一个新的管理类newmgclass,属于newdomain域的newset策略设置
20. 定义一个新的copygroup组standard
Def copygroup newdomain newset newmgclass destination=diskpool verdeleted=0 retonly=0
定义了一个新的copygroup组standard,这里不用写名字,默认就是standard,这个拷贝组的目标存储池是diskpool,就是说 有什么要备份的,先写到diskpool存储池.并且,关闭verdeleted 和 retonly 这两个选项,这两个选项的作用分别是:
verdeleted 当源文件不存在时,保留备份文件的版本个数
retonly 最后一个非活动版本的保留天数
由于我使用RMAN来给ORACLE做备份,版本控制由RMAN来做,所以这两个参数一定要关闭,不然搞不好会把RMAN备份的东西给删除的。
配置步骤三
21. 分配默认的管理类:
Assign defmgmtclass newdomain newset newmgclass
22. 激活一个策略设置:
Activate policyset newdomain newest
23. 注册客户机节点:
Register node oracle donggua domain=newdomain backupdelete=yes
注册了一个叫oracle的客户机,密码donggua,分配到newdomain域.并且允许这个客户端自己删除自己备份的数据,这个选项用来使RMAN能够使用“delete obsolete”等命令删除超过保留期的备份版本,一定要选yes.
24. 到此为止,TSM 服务器端的配置已经完成,现在需要做ORACLE端的配置了。如下:(此步骤以下,都是在ORACLE端操作。ORACLE数据库的安装就省略了,网上一搜一大把)
25. 解压缩TDP FOR ORACLE,安装其中的5.4.1.0-TIV-TSMORA-LinuxX86.bin 软件包,采取默认安装,没什么特殊的。
26. 进入/opt/Tivoli/tsm/agentOBA,参照第1,2,3步,编辑dsm.opt及dsm.sys,以确保oracle 服务器能够联系到TSM服务器。
27. 编辑tdpo.opt文件,将DSMI_ORC_CONFIG参数的值设置为第26步中的dsm.opt文件的绝对路径,如/PATH/PATH/dsm.opt
28. 运行/opt/Tivoli/tsm/agentOBA这个文件夹下的tdpoconf这个文件,并带参数password,如:tdpoconf password 按提示输入注册时给oracle这个客户端分配的密码donggua
29. 创建RMAN 备份脚本如下:
configure default device type to 'sbt_tape';
configure controlfile autobackup on;
configure controlfile autobackup format for device type 'sbt_tape' to '%F';
configure channel device type 'sbt_tape' parms
'ENV=(TDPO_OPTFILE=/opt/Tivoli/tsm/agentOBA/tdpo.opt)';
run {
backup incremental level 0 database plus archivelog delete all input;
}
配置默认备份设备为’sbt_tape’,配置通道’sbt_tape’,参数为
'ENV=(TDPO_OPTFILE=c:\program files\tivoli\tsm\agentoba\tdpo.opt)'。
或者在run {}里面分配:
allocate channel t1 type ’sbt_tape’
parms ’ENV=(TDPO_OPTFILE=C:\oracle\ora91\scripts\tdpo.opt)’;
30. 在 操作系统上设置计划任务,每天定时执行RMAN脚本,备份oracle 数据库。
31. 特别要注意的是,要使用TSM备份ORACLE,需要license 文件,agent.lic,放到/opt/Tivoli/tsm/agentOBA目录下,否则会无法备份,并报错的。
到此为止,配置部分已基本完成,大部分细节都使用的是默认设置,配置了一个在 硬盘上的 存储池diskpool,一个 磁带机 构成的存储池newpool,所有RMAN的备份数据先到diskpool,等diskpool满了后,迁移到newpool,以便加快备份速度(否则直 接备份到磁带的话,就要很长时间了)。这个过程的条件可以控制,后面会接着写,没有定义归档组,因为差不多,而且我的工作内容没有涉及到归档,也就没有动力,大家见谅哈~!也没有定义很多的管理类,策略设置,域什么的,太复杂的搞得头昏,以后慢慢完善.
接下来是TSM服务器端的设置了,涉及到存储池的自动迁移,TSM自身数据库的备份,旧数据库的删除等.
每日diskpool存储池的迁移:
每天备份后,由于是备份到diskpool池里的,也就是备份到 硬盘上,这就带来一个问题,如果这个存储池满了怎么办?虽然它在容量达到90%后会自动向下一个存储池(也就是 磁带存储池newpool)迁移文件,直到容量到70%时停止。
但如果我每天备的东西很多,那么会产生一种问题,备份一次需要迁移N次,严重影响备份速度,怎么办?设置一个管理任务,在每天备份完后,强制令 diskpool将所有的数据迁移到newpool,腾出空间,迎接明天的备份.具体的思路是将diskpool的最大迁移上限和最小迁移下限设为0,强 制使它迁移,迁移完了之后再设一个管理任务,把上限和下限改回来,免得影响明天的备份.
Def sch qianyi type=a cmd=”update stg diskpool hig=0 low=0” starttime=15:00:00 active=yes
定义了一个叫qianyi的管理任务,在每天的15点运行update stg diskpool hig=0 low=0命令,把diskpool存储池的上下限都设为0,强制迁移.
迁移完成后,需要把diskpool存储池的上下限都改回来,免得影响明天的备份:
Def sch gaihuilai type=a cmd=”update stg diskpool hig=90 low=70” starttime=16:00:00 active=yes
定义了一个叫gaihuilai的管理任务,在每天的16点运行update stg diskpool hig=90 low=70命令,把diskpool存储池的上限改回90,下限改回70.
TSM自身数据库的备份
TSM使用数据库来记录备份的一些信息,所以这个数据库显得很重要,不容有失,要每天备份,同样需要设置计划任务来自动备份,而且需要设置3个计划任务,两个用来每天备份数据库到两个 磁带上,一个用来删除旧的备份版本。
这里有个需要注意的,我在这里也饶了一天.TSM的数据库,不能够备份到以前已使用过的磁带上,就是说,我昨天在TSM1磁带上备份了数据库,今天还想 备份到这个磁带上,很不好意思,不允许,这怎么办?难道我每天要拿一个新的磁带来备份数据库吗?不用,可以每天使用del volhistory命令把过期的就的数据库备份删除掉。
所以这就是为什么我要用3个计划任务来备份新的数据库和删除旧的数据库了,我希望保持2天的数据库,所以用两个磁带,两个计划任务来备份数据库,如果需要保留N天的,需要用N个磁带,N个计划任务了.
其实,还有其他的方法,在我的生产环境中,数据库是直接备份到 硬盘上的,,备份到一个file类型的volume里面的,这种类型的volume不受上面说的限制,缺点是备份放置的地方有隐患,万一 服务器坏了就完了.
下面说我的方法吧,备份数据库的命令是:
Backup db type=full devclass=dbclass volumename=tsm1
其中,type=full是指完全备份,devclass是指用什么设备类,volumename是指用哪个卷.在这里,备份数据库只需要指定一个设备类,这个设备类下面不需要 存储池,为了管理清楚点,我新建一个设备类dbclass,并且专门label了两个磁带tsm1,tsm2来备份数据库:
Def devclass dbclass library=newlibrary devtype=4mm format=dds4c estcapacity=40G
Label libvolume newlibrary tsm1 overwrite=yes
Label libvolume newlibrary tsm2 overwrite=yes
准备好了之后,定义一个管理任务dbbackup1,备份数据库到TSM1磁带上,每天的22:00:00执行,今天开始执行,每两天一次:
Def sch dbbackup1 type=a cmd=”backup db type=full devclass=dbclass volume=tsm1” startdate=today starttime=22:00:00 period=2 active=yes
再定义一个管理任务dbbackup2,备份数据库到TSM2磁带上,每天的22:00:00执行,明天开始执行,每两天一次:
Def sch dbbackup2 type=a cmd=”backup db type=full devclass=dbclass volume=tsm2” startdate=today+1 starttime=22:00:00 period=2 active=yes
这样就实现了今天备份数据库到TSM1,明天到TSM2,后天又TSM1,再后天又TSM2,但还需要一个任务来实现删除过期的数据库版本:
Del volh todate=today-2 type=dbbackup
这是删除过期版本的命令,意思是删除掉前两天的数据库备份,那么任务命令是:
def sch delolddb type=a cmd=” Del volh todate=today-2 type=dbbackup” startdate=today starttime=21:00:00 period=1 active=yes
每天的21点执行,一天一次.一定要放在备份数据库之前执行,如果放在之后执行,会出错的,除非把命令修改掉.
到此为止,所有计划实现的目标已基本作到,所有的细节设置全部采用默认,没有进一步设置.
由于我也是初学TSM,错误在所难免,希望大家能予以指正.另外,在TSM自身数据库的备份方法上,还可以把该数据库备份到硬盘上,成为一个文件的形式,但我觉得不是很保险,故此选择了用磁带来备。谢谢~!