TSM+Mhvtl虚拟带库搭建备份恢复环境:版本坑与实战指南
简介面向系统/备份运维工程师的原创技术资料围绕 TSM 6.3、Mhvtl 虚拟带库、Oracle 与 DB2 数据库在 Linux 平台上的备份恢复测试展开适合正在规划集中备份或灾备方案的团队参考。全文以四个章节组织先介绍 Mhvtl 虚拟带库在 CentOS 6.5 上的安装配置再讲解 TSM 主服务器安装、存储设备与卷配置、备份策略制定随后聚焦 Oracle 数据库的 TSM 客户端配置与手工备份最后补充异机恢复的完整流程。文档覆盖从底层虚拟带库到上层应用恢复的完整链路包含编译安装 MHVLT、测试带库可用性、基于 tgt 的 iSCSI 映射、NUB 客户端安装、RMAN 恢复数据库、异机恢复授权等关键操作并配有分区截图与命令示例可作为搭建虚拟带库备份环境或制定灾备演练方案的参考模板。压缩包内共有 1 个 docx 格式的完整技术文档约 1.83MB共 53 页目录层级清晰直接打开即可通读。目前已有 241 人学习下载适合需要评估 TSM 备份方案、或正在实施数据库备份恢复项目的工程师。1. 搭一套 TSMMhvtl 备份恢复测试环境你也会踩的版本坑在备份运维圈子里MhvtlLinux 虚拟带库加 TSM 6.3.5再配上 Oracle 和 DB2 客户端做备份恢复验证是搭测试环境最常见的组合之一。这套环境本身不难但版本链路很长Mhvtl 1.5-2 的编译要求 kernel-devel 与当前内核精确匹配TSM 6.3.5 的存储设备定义又依赖虚拟带库的设备路径一个环节写错后边的卷、策略、RMAN 备份全部连不上。我曾经在这上面折腾了两天最后发现只是 sg 设备号漂移。这份文档适合两类人一类是要在测试机里复现“TSM 备份 Oracle/DB2 到带库”全流程的运维另一类是准备做异机恢复演练但不想占用真实磁带库的团队。后面会按“装 Mhvtl → 映射 iSCSI → 配置 TSM → 发起备份 → 异机恢复”的顺序完整走一遍。2. Mhvtl 虚拟带库编译安装从依赖包到 tar 读写验证2.1 环境基线四个节点一台虚拟带库这套测试环境对应的是某评测中心的一个简化备份拓扑全部跑在虚拟化平台上。参与备份的节点一共四个角色划分非常清楚服务器角色主机名IP 地址操作系统应用备份主服务器tsm6192.168.81.7CentOS 6.6TSM 6.3.5虚拟带库mhvtl192.168.81.6CentOS 6.6Mhvtl 1.5-2 iSCSI备份客户端 1oracle192.168.81.11RHEL 5.7Oracle 11g备份客户端 2db2192.168.81.12RHEL 5.7DB2 9.7带库节点和 TSM 服务器都是 CentOS 6.6两个数据库客户端是老牌的 RHEL 5.7。这套组合有一个典型特征数据库版本和操作系统版本都偏旧但这恰恰是很多存量生产环境还在跑的真实形态。后面所有安装操作都以这张表为准主机名和 IP 别改配置里到处都要用。2.2 安装前准备依赖包和 vtl 用户Mhvtl 不是那种解压即用的软件它需要编译内核模块所以先把编译工具链和 SCSI 管理工具装齐。用 yum 一次装完yum install lsscsi mt-st mtx zlib-devel sg3_utils zlib kernel-devel kernel-headers gcclsscsi列出 SCSI 设备及其 sg 设备号后面验证带库设备全靠它mt-st和mtx前者是磁带机控制工具后者是机械手控制工具测试带库可用性时直接对应/dev/st*和/dev/sg*zlib-devel、zlib、kernel-devel、kernel-headers编译 Mhvtl 内核模块必需的开发包gcc编译器没它什么都编不了。依赖装完后创建专用用户和目录useradd vtl passwd vtl mkdir -p /opt/mhvtl mkdir -p /etc/mhvtl chown -Rf vtl:vtl /opt/mhvtl chown -Rf vtl:vtl /etc/mhvtl这里/opt/mhvtl是虚拟带库的存储路径所有“磁带”介质文件都落在这里/etc/mhvtl是配置文件路径。把属主改成 vtl 用户是因为 Mhvtl 服务默认以这个用户运行目录权限不对会导致写介质失败或者服务起不来。我在 2.1 环境表里特意把 mhvtl 节点单列出来也是因为它的目录规划直接影响后边 iSCSI 映射能不能透传设备。提示确认kernel-devel版本与uname -r完全一致不一致的话编译必报错具体现象放到第 5 章排查部分说。2.3 编译安装 MHVLT 1.5-2 与内核模块依赖和目录就绪后开始装软件包。Mhvtl 的安装分两部分rpm 包提供用户态工具zip 源码包提供内核模块。顺序不能反rpm -ivh mhvtl-utils-1.5-2.x86_64.rpm unzip mhvtl-1.5-2.zip cd markh794-mhvtl-d9f6115/kernel make make installmhvtl-utils-1.5-2.x86_64.rpm装的是 mtx 之外的 Mhvtl 管理工具和启动脚本解压后的目录名markh794-mhvtl-d9f6115是源码仓库的默认目录名进入kernel子目录才是内核模块源码make make install编译并安装内核模块这步必须有第 2.2 小节的 kernel-devel 支撑。编译安装完成后启动服务并设置开机自启service mhvtl start chkconfig mhvtl on首次启动时系统会看到类似Could not locate library config file: /etc/mhvtl/library_contents.10的提示然后自动生成默认的 library_contents 文件。这是正常现象不是报错说明服务已经在按默认配置创建两套带库。默认情况下 Mhvtl 会模拟两个带库一个对应/dev/sg10机械手一个对应/dev/sg11机械手。启动后改一下磁带容量配置默认 500MB 一盘带根本不够 TSM 写归档日志cat /etc/mhvtl/mhvtl.conf# Home directory for config file(s) MHVTL_CONFIG_PATH/etc/mhvtl # Default media capacity (500 M) CAPACITY2046 # Set default verbosity [0|1|2|3] VERBOSE1 # Set kernel module debuging [0|1] VTL_DEBUG0CAPACITY2046的含义是每盘磁带默认容量 2046MB约等于 2GB。这个值直接影响后面 TSM 定义卷时对带库容量的判断建议测试环境直接设成 2046不要用默认的 500。VERBOSE控制日志详细度排查问题时调到 2 或 3 能看到更多内核模块输出VTL_DEBUG平时保持 0 即可。注意修改CAPACITY后必须重启 mhvtl 服务而且该设置只对新生成的磁带介质生效槽位里已存在的卷标签介质容量不会变。2.4 设备验证lsscsi、mtx 与 tar 读写服务启动后第一件事是看设备是否被内核识别这一步能过滤掉大半配置问题lsscsi -g[3:0:0:0] mediumx STK L700 0105 /dev/sch0 /dev/sg10 [3:0:1:0] tape IBM ULT3580-TD5 0105 /dev/st0 /dev/sg2 [3:0:2:0] tape IBM ULT3580-TD5 0105 /dev/st1 /dev/sg3 [3:0:3:0] tape IBM ULT3580-TD4 0105 /dev/st2 /dev/sg4 [3:0:4:0] tape IBM ULT3580-TD4 0105 /dev/st3 /dev/sg5 [3:0:8:0] mediumx STK L80 0105 /dev/sch1 /dev/sg11 [3:0:9:0] tape STK T10000B 0105 /dev/st4 /dev/sg6 [3:0:10:0] tape STK T10000B 0105 /dev/st5 /dev/sg7 [3:0:11:0] tape STK T10000B 0105 /dev/st6 /dev/sg8 [3:0:12:0] tape STK T10000B 0105 /dev/st7 /dev/sg9设备类型这一列要重点看mediumx是机械手SCSI Media Changertape是磁带机。/dev/sg10对应 STK L700 机械手/dev/sg11对应 STK L80 机械手这两个是 TSM 定义 library 时用的设备路径。/dev/st0到/dev/st7是八台磁带机但注意 st 设备不是按 sg 顺序排列的/dev/st0对应/dev/sg2/dev/st4对应/dev/sg6定义 path 时容易搞混我一般直接以lsscsi -g输出为准抄写。设备识别无误后用 mtx 验证机械手mtx -f /dev/sg10 statusStorage Changer /dev/sg10:4 Drives, 43 Slots ( 4 Import/Export ) Data Transfer Element 0:Empty Data Transfer Element 1:Empty ... Storage Element 1:Full :VolumeTagE01001L4 ... Storage Element 22:Full :VolumeTagCLN101L4 Storage Element 30:Full :VolumeTagF01030L5Storage Changer后面那行是带库概要4 个驱动器、43 个槽位。Data Transfer Element是驱动器元素号TSM 定义 drive 时用的 element 编号就对应这里的 0 到 3。Storage Element是槽位VolumeTag是介质卷标签这里是 E01001L4 这种命名L4 表示 LTO4 介质后半段的 F01030L5 是 LTO5 介质。还有CLN101L4这种是清洁带备份策略里要过滤掉不能当普通卷用。机械手验证通过后做一次真实的写读测试mtx -f /dev/sg10 load 1 0 tar -cvf /dev/st0 /boot mt -f /dev/st0 rewind tar -tvf /dev/st0load 1 0把 1 号槽位的磁带加载到 0 号驱动器相当于机械手抓带动作。tar -cvf /dev/st0 /boot把/boot目录写入磁带c创建归档v显示文件列表f指定输出设备为 st0。写完必须mt rewind倒带因为磁带写完后停在带尾直接读会什么都读不到。tar -tvf列出带内内容能看到文件就说明整条带库链路已经通了。3. iSCSI 带库映射与 TSM 服务器端配置让备份软件看到一个“真实”带库3.1 用 tgt 把带库映射给 iSCSIMhvtl 装好之后带库设备在 mhvtl 节点本地。要让 TSM 服务器能用上它通常做法是装一个基于 tgt 的 iSCSI target把带库的 sg 设备和 st 设备原样映射出去TSM 服务器通过 iSCSI 登录后就能看到完整的机械手和磁带机跟接了一台真实带库没有区别。先装 tgt 服务端并编辑 targets 配置yum install scsi-target-utils vim /etc/tgt/targets.confinclude /etc/tgt/tgt.local target iqn.2015-04.test.mhvtl:library backing-store /dev/sg10 backing-store /dev/sg11 backing-store /dev/st0 backing-store /dev/st1 backing-store /dev/st2 backing-store /dev/st3 backing-store /dev/st4 backing-store /dev/st5 backing-store /dev/st6 backing-store /dev/st7 /targettarget iqn...定义了一个 iSCSI target客户端登录时用这个 IQN 找到设备组每个backing-store把一个本地设备映射成一个 LUN。这里映射的全部是lsscsi -g输出里的 sg 字符设备不是块设备这是关键机械手sg10、sg11必须映射只映射磁带机不映射机械手的话TSM 定义 library 时找不到/dev/smc设备。配置完启动 tgt然后在 TSM 服务器侧发起 iSCSI 连接service tgtd start chkconfig tgtd on iscsiadm -m discovery -t sendtargets -p 192.168.81.6 iscsiadm -m node -T iqn.2015-04.test.mhvtl:library -p 192.168.81.6 --logindiscovery用来发现带库节点上有哪些 target--login是正式建立会话。登录成功后 TSM 服务器本地lsscsi -g会出现和 mhvtl 节点几乎一样的设备列表设备号可能从别的 scsi 总线号开始但类型和型号完全一致。提示target 名称里的日期段可以随意但整条 IQN 在客户端登录时必须原样使用少一个字母都登录不上。3.2 TSM 6.3.5 主服务器安装TSM 主服务器安装本身不复杂常见做法是解压安装介质后按组件顺序安装先装 GSKit 加密库再装服务器端主程序最后装服务端命令行工具。安装过程中需要指定实例名和数据库目录生产习惯是单独划一个分区给 TSM 的数据库和日志测试环境可以共用根分区但目录要分开规划。装完后 TSM 会创建一个实例默认的管理员账号是 admin初始密码在安装过程中设置。进入管理命令行是后面所有配置操作的前置条件/opt/tivoli/tsm/server/bin/dsmadmc -idadmin -passwordadmin进入后是tsm: SERVER1提示符所有定义带库、卷、策略的命令都在这下面执行。如果密码忘了可以用安装时的实例用户执行dsmadmc -idadmin -password重置这是 TSM 预留的本地认证通道生产环境建议安装后立刻改掉默认密码。3.3 定义带库设备机械手与驱动器TSM 把物理带库抽象成三层library 对应机械手drive 对应驱动器path 把服务器和这些设备关联起来。在 dsmadmc 里执行define library L700TO typescsi define path SERVER1 to L700TO srctypeserver desttypelibrary device/dev/sg10 define drive L700TO drive0 element0 define path SERVER1 L700TO drive0 srctypeserver desttypedrive libraryL700TO device/dev/st0define library ... typescsi声明一个 SCSI 带库TSM 会通过机械手设备发送 SMC 指令define path ... device/dev/sg10把 TSM 服务器和机械手设备路径绑定这里的设备路径必须是 TSM 服务器本地lsscsi -g看到的路径define drive ... element0element 号对应mtx status里 Data Transfer Element 的编号第一个驱动器是 0最后一条 path 把服务器和驱动器绑定libraryL700TO指定它归属于哪个带库device/dev/st0是磁带机设备路径。这里最容易踩的坑是 library 名和实际带库型号混用。Mhvtl 节点上两个机械手一个是 STK L700、一个是 STK L80TSM 里定义两个 library 时命名要能区分我习惯直接叫L700TO和L80TO避免后面定义卷时对着名字发呆。3.4 配置卷、备份策略与本地磁盘备份池带库设备定义完成后还要让 TSM 知道“磁带”的容量规格和卷标签。Mhvtl 模拟的是 LTO 驱动器所以设备类按 LTO 定义define devclass LTO5LG devtypeLTO libraryL700TO formatdrive define volume L700TO E01001L4 define volume L700TO F01030L5devtypeLTO告诉 TSM 这是 LTO 设备类后面建存储池时直接引用formatdrive表示容量格式由驱动器协商决定不做强制覆盖define volume定义带库里的卷卷标签必须和mtx status里已存在的 VolumeTag 一致填一个不存在的标签TSM 调用机械手抓带时会找不到介质。卷有了再建备份存储池和策略define stgpool BACKUPPOOL LTO5LG maxscratch30 update copygroup STANDARD STANDARD STANDARD destBACKUPPOOLBACKUPPOOL是备份数据最终落地的存储池maxscratch30表示允许 TSM 自动从带库抓取最多 30 盘空带作为临时卷。update copygroup把默认管理类的备份目标指向 BACKUPPOOL这样客户端备份的数据默认进带库池。TSM 还支持把备份池的数据再复制到磁盘池这个设计在文档里叫本地磁盘备份。做法是先定义一个磁盘存储池然后执行池间备份define stgpool DISKPOOL disk maxscratch30 backup stgpool BACKUPPOOL DISKPOOLbackup stgpool是 TSM 的存储池备份功能把 BACKUPPOOL 里的数据复制一份到 DISKPOOL这样同一份备份数据既有带库副本又有磁盘副本。测试环境的习惯做法是把 DISKPOOL 指向本机一块独立目录验证恢复时优先从磁盘池取数据速度比从虚拟带库读快很多也顺便验证了 TSM 的层级存储。4. 基于 TSM 的 Oracle 备份从客户端注册到手工发起4.1 客户端环境准备与 TDP for Oracle 安装Oracle 数据库备份不能靠 TSM 基础客户端直接完成需要安装 TDP for Oracle 模块这份测试文档里写作 NUB 客户端实际对应的就是 TSM 的 TDPO 模块。它负责在 RMAN 和 TSM 之间搭桥RMAN 的备份通道以sbt_tape类型调用 TSM API数据流从 Oracle 到 TSM 再到虚拟带库。安装顺序有讲究先装 TSM API 和 BA 客户端再装 TDPO两个包缺一个RMAN 分配 channel 时都会报找不到 TDPO 库文件。Oracle 客户端节点是 RHEL 5.7安装时要选兼容该系统的客户端版本装完确认 TDPO 的libobk.so存在于安装目录。4.2 dsm.opt / dsi.opt 配置与节点注册客户端要和 TSM 服务器通信核心是三个文件dsm.opt是 BA 客户端的连接配置dsi.opt是 TDPO 的选项文件密码文件由 TDPO 安装时生成。先写连接配置cat /usr/tivoli/tsm/client/oracle/bin/dsm.opt EOF NODE oracle TCPADDRESS 192.168.81.7 TCPPORT 1500 EOFcat /usr/tivoli/tsm/client/oracle/bin/dsi.opt EOF TDPO_NODE oracle TDPO_PSWDPATH /usr/tivoli/tsm/client/oracle/bin EOFNODE oracle客户端节点名必须和 TSM 服务器上注册的节点完全一致TCPADDRESS指向 TSM 主服务器的 IP也就是 192.168.81.7不是 mhvtl 带库节点TCPPORT 1500TSM 默认开放 1500 端口接收客户端连接改过端口的话这里要跟着改TDPO_PSWDPATH指向存放 TDPO 密码文件的目录RMAN 备份时 TSM 会从这里读节点密码。节点要在服务器端先注册才能在客户端发起备份。在 TSM 服务器上执行dsmc reg node oracle oracle123 dsmc query nodereg node注册一个名为 oracle 的客户端节点第二个参数是节点密码。query node验证注册结果能看到节点的平台、策略域、上次备份时间等信息。节点密码在客户端配置文件里不会明文出现TDPO 安装时会提示输入密码并写入加密的密码文件这一点和直接写死明文的普通 dsm.opt 不一样。4.3 服务器端策略确认与手工发起备份节点注册后要把它放进能用的策略域。默认 STANDARD 策略域可以直接用但要确认管理类里的 copygroup 指向了第 3.4 小节创建的 BACKUPPOOL。确认无误后在 Oracle 服务器上用 RMAN 发起一次手工备份rman target /run { allocate channel t1 type sbt_tape; send ENV(TDPO_OPTFILE/usr/tivoli/tsm/client/oracle/bin/dsi.opt); backup database plus archivelog; release channel t1; }allocate channel t1 type sbt_tape指定备份通道走 TSM 的 SBT 接口没有这一步数据只会落在本地磁盘send命令把 TDPO 的选项文件路径传给 TSM APIdsi.opt里已经写好了节点名backup database plus archivelog备份整个数据库并附带归档日志这是数据库在线备份的常规姿势跑完后 TSM 会把数据写成带库上的卷。备份发起后在 TSM 服务器端可以实时看到任务状态和最终落卷情况q process q content BACKUPPOOLq process显示正在执行的备份进程能看到读写字节数q content BACKUPPOOL列出存储池里已经写入的卷和数据对象看到备份产生的新卷说明整条链路已经打通。到这一步“客户端 → TSM 服务器 → 虚拟带库”的备份通路就算正式跑起来了。5. TSMMhvtl 环境排查避坑五个翻车现场这套环境搭建过程中有一半时间花在排错上而且很多错是重复出现的。以下五条按现象到解决的方式记录每条都是我实际遇到过的。5.1 kernel-devel 版本不匹配编译第一步就报错现象在make编译 Mhvtl 内核模块时报一堆找不到generated/autoconf.h或linux/version.h的错误无论怎么重装 kernel-devel 都一样。原因系统里有多个 kernel-devel 版本yum install kernel-devel默认装的是 yum 源里最新的版本而当前运行的内核是另一个版本源码编译时引用的/usr/src/kernels/$(uname -r)目录不存在。解决安装和当前内核精确匹配的开发包yum install kernel-devel-$(uname -r)。装完先确认/usr/src/kernels/$(uname -r)存在再重新make make install。从那以后我每台机器编译前都先执行uname -r看一眼。5.2 mhvtl 服务起来了但 lsscsi 看不到 mediumx 设备现象service mhvtl start提示进程已启动PID 也打印出来了但lsscsi -g里只有原来的磁盘和光驱看不到任何带库设备。原因八成是/opt/mhvtl或/etc/mhvtl的属主不是 vtl服务启动后没有权限创建介质描述文件另一种情况是内核模块没真正加载lsmod | grep mhvtl输出为空。解决先停服务重新执行chown -Rf vtl:vtl /opt/mhvtl /etc/mhvtl再启动服务。如果依然没有设备手动加载内核模块后重启 mhvtl然后重新执行lsscsi -g不用重启系统。设备出来后注意记下 sg 号重启后设备号可能漂移TSM 里定义 path 的路径要跟着更新。5.3 iSCSI 客户端看到的不是 mediumx 而是 disk现象TSM 服务器 iSCSI 登录成功后lsscsi -g里能看到设备但类型不是mediumx和tape而是disk设备型号也变成了 tgt 的默认仿真型号。原因/etc/tgt/targets.conf里backing-store指向了块设备路径或者指向了本地磁盘设备而不是 sg 字符设备。tgt 对 sg 设备透传时会把 SCSI INQUIRY 数据原样转发客户端看到的才是 STK 机械手和 LTO 驱动器指向块设备时tgt 只能按普通磁盘导出客户端的 SCSI 层就把它识别成 disk。解决回到带库节点确认lsscsi -g输出的设备路径把 targets.conf 里的backing-store全部改成/dev/sgX和/dev/stX格式重启 tgtd客户端重新iscsiadm --logout后再--login重新扫描后设备类型就正常了。排查时可以对比带库节点和 TSM 服务器两侧的lsscsi -g输出类型应该完全一致。5.4 磁带容量只有 500MB备份跑一会儿就写满现象RMAN 备份开始后没几分钟TSM 服务器端报卷满q content里看到一个卷被写了大量小对象但备份进程反复换带速度极慢最后归档日志备份失败。原因默认CAPACITY500一盘磁带 500MBOracle 的归档日志和数据文件很快就把带写满了。TSM 通过设备类容量感知到卷满后会不断抓新卷而虚拟带库换带本身有开销整个备份就被拖垮了。解决修改/etc/mhvtl/mhvtl.conf里的CAPACITY2046重启 mhvtl。注意只对新生成的介质生效槽位里已存在的旧卷标签容量不会自动扩大建议把模拟的槽位介质清掉重新生成或者直接换新的卷标签。改完在 TSM 里重新定义新的卷再跑一次备份验证。5.5 TSM 客户端报 TCP 连接失败先查 1500 端口再查节点名现象dsmc backup或 RMAN 分配 channel 时报连接失败错误信息里出现 TCP 相关字样客户端日志和服务器端日志各执一词。原因两个最常见的原因一是 TSM 服务器 1500 端口没有监听二是客户端dsm.opt里TCPADDRESS写错了地址或NODE名和服务器端注册的不一致。iSCSI 映射带库的拓扑里经常有人把TCPADDRESS写成带库节点的 IP这是把带库当成了备份服务器。解决先在 TSM 服务器上执行netstat -an | grep 1500确认端口监听再在客户端执行dsmc query session测试连通性。确认网络没问题后核对dsm.opt里的NODE和服务器端dsmc query node的输出是否完全一致节点名区分大小写。最后检查dsmerror.log错误码会直接告诉你认证失败还是网络不可达。6. 用 Oracle 异机恢复验收整套链路从 restore spfile 到 open database备份做完只算完成一半验证备份能不能恢复才算是闭环。我做这套测试的最后一个动作是拿一台空机器做 Oracle 异机恢复目标很直接把第 4 章备份的 11g 数据库通过 TSM 从虚拟带库拉回到一台没有原始数据的新主机上恢复完成并打开数据库。恢复前先做两个检查。第一目标机必须装好 TDP for Oracle 客户端dsi.opt和dsm.opt里的节点名写原生产库的节点 oracle密码要和服务器端注册的一致。第二在 TSM 服务器端确认备份数据还在dsmc query session q content BACKUPPOOLq content能看到当年备份产生的卷和对象确认 BACKUPPOOL 里的数据没被过期回收。接下来在目标机上创建恢复必要的目录结构Oracle 的 adump、闪回区、数据文件目录都要预先存在否则 restore 会因路径缺失直接失败mkdir -p /u01/app/oracle/admin/orcl/adump mkdir -p /u01/app/oracle/flash_recovery_area mkdir -p /u01/app/oracle/oradata/orcl然后通过 RMAN 走 TSM 通道恢复先恢复 spfile 和 controlfilestartup nomount; run { allocate channel t1 type sbt_tape; send ENV(TDPO_OPTFILE/usr/tivoli/tsm/client/oracle/bin/dsi.opt); restore spfile to pfile /tmp/initorcl.ora; restore controlfile to /u01/app/oracle/oradata/orcl/control01.ctl; release channel t1; }恢复完 spfile 和 controlfile 后用恢复出来的参数文件重新启动实例并挂载数据库startup force nomount; alter system set control_files/u01/app/oracle/oradata/orcl/control01.ctl scopespfile; alter database mount;mount成功后执行数据文件和归档日志的完整恢复run { allocate channel t1 type sbt_tape; send ENV(TDPO_OPTFILE/usr/tivoli/tsm/client/oracle/bin/dsi.opt); restore database; recover database; release channel t1; } alter database open resetlogs;restore database从虚拟带库拉回全部数据文件recover database应用归档日志把数据库推进到一致性状态open resetlogs是异机恢复的必选动作它会重置 redo 日志序列号。打开成功后执行一次select count(*) from v$tablespace能查到所有表空间就说明整条链路完全跑通。从那以后我每次搭完这类环境都不急着拆机器强制把异机恢复全流程再走一遍才收工——因为只有在空机器上成功 open 过一次你才知道备份是真能用而不是只在日志里“备份成功”。DB2 9.7 的恢复思路和 Oracle 类似同样是客户端走 TSM API 取数据核心验证动作换成本身的管理命令即可。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Kafka 2.8 KRaft模式实战:无ZooKeeper集群部署与配置详解

Kafka 2.8 KRaft模式实战:无ZooKeeper集群部署与配置详解

1. 站在2.8这个版本门槛前,为什么要去掉Zookeeper先说结论:Kafka从2.8版本开始,正式允许你在一片没有Zookeeper的世界里运行Kafka集群。这可不是一个小改动,这是Kafka社区憋了好几年的大招——把Zookeeper从Kafka的架构里踢出去&a…

2026/10/18 20:32:27 阅读更多 →
笛卡尔心形线绘制源码:Python与Canvas实现及参数调试指南

笛卡尔心形线绘制源码:Python与Canvas实现及参数调试指南

简介:这份源码资源面向对数学可视化与前端开发感兴趣的开发者,围绕笛卡尔心形线这一经典平面曲线,提供从数学方程到网页绘制的完整实现思路。资源包共3个文件,以html页面为主体,辅以inscode配置与gitignore文件&#x…

2026/10/18 21:09:54 阅读更多 →
计算机实验室安全教育:从隐患识别到应急演练的实用指南

计算机实验室安全教育:从隐患识别到应急演练的实用指南

简介:面向计算机类专业学生的实验室安全教育课件,聚焦机房防火与防电两大核心场景。内容先分析人为操作不当与客观因素两类起火原因,再讲火灾发生后的冷静撤离、报警、报告老师及湿毛巾捂口鼻等应对方法,并通过清华大学何添实验楼…

2026/10/19 0:01:43 阅读更多 →

最新新闻

PyCharm 安装激活全流程避坑指南:从版本选择到环境配置

PyCharm 安装激活全流程避坑指南:从版本选择到环境配置

简介:面向初学Python编程语言或需要重新配置开发环境的人群,这份PyCharm安装教程以Word文档形式,完整梳理了从获取安装包、安装选项配置到激活授权的整个操作链路。文档采用分步骤讲解,先介绍在浏览器搜索入口找到下载页面&#x…

2026/10/19 2:20:36 阅读更多 →
算法分析底层拆解:大O、递归式与平摊分析实战

算法分析底层拆解:大O、递归式与平摊分析实战

简介:这是《数据结构与算法分析(C语言版)》第二版配套的习题解答手册,面向使用该教材学习数据结构、准备考研或希望强化算法基础的程序员与在校学生。全书按章节组织,覆盖算法分析、列表/栈/队列、树、哈希、优先队列、…

2026/10/19 2:20:36 阅读更多 →
8086机器语言解码:字节级译码手记与指令编码实战

8086机器语言解码:字节级译码手记与指令编码实战

简介:这是一份针对8086机器语言解码的浓缩型学习笔记,主题聚焦于为汇编器编写者梳理指令编码规则,适合对x86底层机制、机器码生成或汇编工具实现感兴趣的开发者参考。笔记系统覆盖8086指令格式、16位寄存器、五种寻址模式、操作码与立即数概念…

2026/10/19 2:20:36 阅读更多 →
自动化立体仓库规划:先算清库存、频率与堆垛机周期

自动化立体仓库规划:先算清库存、频率与堆垛机周期

简介:聚焦物流规划领域,这份自动化立体仓库的规划与评估专题文档,面向物流规划工程师、仓储管理人员及相关专业学生,解决立体仓库从方案设计到落地评估的关键问题。文档系统梳理了高层货架与巷道堆垛机作业的核心优势,…

2026/10/19 2:20:36 阅读更多 →
数据结构期末试卷精讲:图、树、查找与排序考点全解析

数据结构期末试卷精讲:图、树、查找与排序考点全解析

简介:湖北大学数据结构期末试卷(2022—2023学年度第一学期A卷)是一份面向“信息安全”专业本科生的闭卷试题,适合备考期末或系统复习数据结构核心章节。卷面设置判断分析、简答与应用分析三类题型,其中判断分析题要求说…

2026/10/19 2:20:36 阅读更多 →
ASP.NET Core 6 Web API 实战:从 CRUD 到 JWT 认证的完整落地指南

ASP.NET Core 6 Web API 实战:从 CRUD 到 JWT 认证的完整落地指南

简介:这是一份面向 .NET 开发者的 ASP.NET Core 6.0 Web API 入门示例资源,演示如何结合 Entity Framework Core 与 RESTful 风格构建数据接口。项目完整包含 Program.cs 服务配置、WeatherForecast 模型、Controllers 控制器、Migrations 数据迁移以及 …

2026/10/19 2:19:36 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →