在logical standby端执行skip操作

本文介绍如何查询Oracle Logical Standby的状态,并提供了解决大事务导致的日志应用延迟问题的方法,包括使用skip命令和dbms_logstdby.instantiate_table过程。

1.查询logical standby的状态:

相关视图如下:

DBA_LOGSTDBY_EVENTS
DBA_LOGSTDBY_LOG
V$LOGSTDBY_STATS
V$LOGSTDBY_PROCESS
V$LOGSTDBY_PROGRESS
V$LOGSTDBY_STATE

2.如果主库有一个大事务产生大量的日志文件,导致日志应用延迟,可以通过skip的方法将此事务先跳过去,然后再手工执行(通过dbms_logstdby.instantiate_table或者手工DBLINK操作)。

skip的过程:

alter database stop logical standby apply;
executexecute dbms_logstdby.skip('SCHEMA_DDL','JSS','TMP%');
executedbms_logstdby.skip('DML','JSS','TMP%');
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

dbms_logstdby.instantiate_table:

DBMS_LOGSTDBY.INSTANTIATE_TABLE (
schema_name     IN VARCHAR2,
table_name      IN VARCHAR2,
dblink          IN VARCHAR2);

alter database stop logical standby apply;
EXECUTE DBMS_LOGSTDBY.INSTANTIATE_TABLE('JSS','TMP1','GETJSSWEB');

如果以上方法比较慢,那就直接采用DBLINK来做。

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

转载于:http://blog.itpub.net/10322123/viewspace-610550/

<think>我们正在处理一个关于SQLServer数据库备份与恢复的详细教程请求。用户希望了解如何使用SQL语句执行备份和恢复操作,包括创建备份设备、完全备份、事务日志备份以及恢复操作,特别是`withnorecovery`选项的使用。根据引用内容,我们可以总结以下关键点:1.创建备份设备:使用`sp_addumpdevice`系统存储过程(引用[5])。2.完全备份:使用`BACKUPDATABASE`命令(引用[1]、[3]、[5])。3.事务日志备份:使用`BACKUPLOG`命令(引用[5])。4.数据库恢复:使用`RESTOREDATABASE`命令,并可结合`WITHNORECOVERY`选项(引用[5])。下面将逐步解释这些操作。###1.创建备份设备在SQLServer中,备份设备是一个逻辑设备,指向物理文件(磁盘)或磁带设备。使用`sp_addumpdevice`可以创建备份设备。语法:```sqlEXECsp_addumpdevice@devtype='disk',@logicalname='logical_name',@physicalname='physical_path'```-`@devtype`:设备类型,可以是'disk'(磁盘)或'tape'(磁带)。-`@logicalname`:备份设备的逻辑名称。-`@physicalname`:备份文件的物理路径(包括文件名和扩展名,通常为.bak)。示例(引用[5]):```sqlUSE[master]GOEXECmaster.dbo.sp_addumpdevice@devtype=N'disk',@logicalname=N'beifen',@physicalname=N'D:\beifen.bak'GO```此示例在磁盘上创建了一个名为`beifen`的备份设备,对应的物理文件是`D:\beifen.bak`。###2.完全备份数据库完全备份是指备份整个数据库,包括所有数据和日志(以便恢复数据库到备份时的状态)。语法:```sqlBACKUPDATABASEdatabase_nameTO{logical_device_name|DISK='physical_path'}WITHoptions```常用选项:-`FORMAT`:格式化备份介质(谨慎使用,会覆盖所有备份集)。-`NOFORMAT`:不格式化(默认)。-`INIT`:覆盖备份设备上的所有备份集。-`NOINIT`:追加到现有备份集(默认)。-`NAME`:备份集的名称。-`SKIP`:跳过检查备份过期。-`STATS`:显示进度(如每完成10%显示一次:STATS=10)。示例(引用[5]):```sqlBACKUPDATABASE[student]TO[beifen]WITHNOFORMAT,NOINIT,NAME=N'student-完整数据库备份',SKIP,NOREWIND,NOUNLOAD,STATS=10GO```此示例将`student`数据库完全备份到之前创建的备份设备`beifen`中。###3.事务日志备份事务日志备份只备份自上次备份(完全备份或事务日志备份)以来的事务日志。这允许进行时间点恢复。语法:```sqlBACKUPLOGdatabase_nameTO{logical_device_name|DISK='physical_path'}WITHoptions```选项与完全备份类似。示例(引用[5]):```sqlBACKUPLOG[student]TO[beifen]WITHNOFORMAT,NOINIT,NAME=N'student-事务日志备份',SKIP,NOREWIND,NOUNLOAD,STATS=10GO```###4.数据库恢复恢复数据库时,需要根据备份类型(完全备份、差异备份、事务日志备份)按顺序恢复,并使用适当的选项。####4.1恢复完全备份基本语法:```sqlRESTOREDATABASEdatabase_nameFROM{logical_device_name|DISK='physical_path'}WITHoptions```常用选项:-`FILE`:指定备份集中的文件号(从1开始,每个备份集可能有多个文件)。-`NORECOVERY`:恢复后数据库处于“正在恢复”状态,允许继续恢复后续的日志备份或差异备份。如果不使用此选项,则恢复完成后数据库可用,但不能再应用后续备份。-`RECOVERY`:恢复完成后数据库可用(默认)。-`REPLACE`:覆盖现有数据库(如果存在同名数据库)。-`STATS`:显示进度。示例(恢复完全备份并覆盖现有数据库,引用[5]):```sqlRESTOREDATABASE[student]FROM[beifen]WITHFILE=1,NOUNLOAD,REPLACE,STATS=10GO```####4.2使用NORECOVERY恢复事务日志备份当需要恢复多个备份(如完全备份+多个事务日志备份)时,除了最后一个恢复操作外,其他恢复操作都应使用`WITHNORECOVERY`。最后一个恢复操作使用`WITHRECOVERY`(可省略)使数据库可用。示例(引用[5]):```sql--恢复完全备份(使用NORECOVERY,以便后续恢复)RESTOREDATABASE[student]FROM[beifen]WITHFILE=1,NORECOVERY,NOUNLOAD,STATS=10GO--恢复差异备份(如果有,使用NORECOVERY)RESTOREDATABASE[student]FROM[beifen]WITHFILE=2,NORECOVERY,NOUNLOAD,STATS=10GO--恢复事务日志备份(最后一个恢复操作,使用RECOVERY)RESTORELOG[student]FROM[beifen]WITHFILE=3,NOUNLOAD,STATS=10,RECOVERYGO```###注意事项1.备份和恢复操作需要相应的权限(通常由`sysadmin`或`db_owner`角色成员执行)。2.恢复数据库时,如果数据库正在使用,可能需要设置数据库为单用户模式或断开其他连接。3.使用`WITHNORECOVERY`时,数据库不可用,直到执行了`WITHRECOVERY`。###总结通过以上步骤,我们可以使用SQL语句完成数据库备份和恢复的全过程:-创建备份设备(可选,也可以直接备份到磁盘文件)。-执行完全备份、差异备份和事务日志备份。-恢复时,按顺序恢复备份,并在最后一个备份恢复时使用`RECOVERY`选项。§§相关问题§§1.如何创建差异备份并使用它进行恢复?2.在恢复事务日志备份时,如何恢复到特定时间点?3.如何将数据库备份和恢复操作自动化(如使用SQLServer代理作业)?4.使用`WITHNORECOVERY`和`WITHSTANDBY`有什么区别?</think>### SQL Server 数据库备份与恢复教程 #### 一、创建备份设备 备份设备是逻辑对象,指向物理备份文件(磁盘或磁带)。使用系统存储过程 `sp_addumpdevice` 创建: ```sql USE master; GO -- 创建磁盘备份设备 EXEC sp_addumpdevice @devtype = 'disk', @logicalname = 'MyBackupDevice', @physicalname = 'D:\SQLBackups\MyDB.bak'; GO ``` - **参数说明**: - `@devtype`: 设备类型 (`disk` 或 `tape`) - `@logicalname`: 逻辑设备名称 - `@physicalname`: 物理文件路径(需确保目录存在) [^2][^5] #### 二、完全数据库备份 备份整个数据库的数据和事务日志: ```sql BACKUP DATABASE MyDatabase TO MyBackupDevice -- 使用备份设备 WITH NAME = 'MyDB-FullBackup', DESCRIPTION = '完整数据库备份', STATS = 5; -- 每完成5%显示进度 ``` 或直接备份到磁盘文件: ```sql BACKUP DATABASE MyDatabase TO DISK = 'D:\SQLBackups\MyDB_Full.bak' WITH FORMAT; -- 覆盖现有文件 ``` [^1][^3][^5] #### 三、事务日志备份 需先设置数据库恢复模式为 **FULL**: ```sql ALTER DATABASE MyDatabase SET RECOVERY FULL; GO -- 事务日志备份 BACKUP LOG MyDatabase TO MyBackupDevice WITH NAME = 'MyDB-LogBackup', STATS = 5; ``` [^5] #### 四、数据库恢复操作 ##### 1. 恢复完整备份(覆盖现有数据库) ```sql USE master; GO RESTORE DATABASE MyDatabase FROM MyBackupDevice WITH FILE = 1, -- 备份集中的文件编号 REPLACE, -- 覆盖现有数据库 RECOVERY; -- 使数据库可访问 ``` [^5] ##### 2. 恢复事务日志链(使用 NORECOVERY) ```sql -- 恢复完整备份(保持NORECOVERY状态) RESTORE DATABASE MyDatabase FROM MyBackupDevice WITH FILE = 1, NORECOVERY; -- 数据库不可访问 -- 恢复事务日志备份 RESTORE LOG MyDatabase FROM MyBackupDevice WITH FILE = 2, RECOVERY; -- 最后一个恢复操作 ``` [^5] ##### 3. 恢复到特定时间点 ```sql RESTORE LOG MyDatabase FROM MyBackupDevice WITH STOPAT = '2023-10-01 12:00:00', -- 指定时间点 RECOVERY; ``` #### 五、关键选项说明 | 选项 | 作用 | 使用场景 | |------|------|----------| | `NORECOVERY` | 数据库保持恢复中状态 | 需应用后续日志或差异备份时 | | `RECOVERY` | 完成恢复并使数据库可用 | 最后一个恢复操作 | | `REPLACE` | 覆盖现有数据库文件 | 强制还原到新位置时 | | `STANDBY` | 设置待命状态 | 允许只读访问恢复过程 | > **重要原则**:恢复顺序必须是 `完整备份 → 差异备份(若有)→ 事务日志备份`,且除最后一个操作外都需使用 `WITH NORECOVERY`[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值