Msg 3059 This BACKUP or RESTORE command is not supported on a database mirror or secondary replica

尝试在辅助数据库上进行备份时遇到限制,发现只能使用特定类型的备份方式。本文介绍了在SQL Server AlwaysOn高可用组中辅助副本上的备份限制及解决方法。

配置好 2012 AlwaysOn High availability Group就想体验一下在辅助数据库做备份的新功能。在辅助服务器备份,这样可以减轻主服务器的负载(非常好的一项改进,以前Databasemirroring辅助数据库是不可以访问的)。

但是备份的时候却报错:

Backup databasetesttodisk ='c:\test.bak'

Msg 3059, Level 16, State 1, Line 2

This BACKUP or RESTORE command is not supported ona database mirror or secondary replica.

Msg 3013, Level 16, State 1, Line 2

BACKUP DATABASE is terminating abnormally.

查了一下微软的网站才发现在辅助服务器备份有限制和局限性的:

·辅助副本只完全支持 BACKUP LOGBACKUP DATABASE仅支持数据库、文件或文件组的仅复制完整备份。辅助副本不支持差异备份。

注意

仅复制备份不影响日志链。同样,仅复制备份也不清除差异位图。

·若要备份辅助数据库,辅助副本必须能够与主副本进行通信,并且状态必须为 SYNCHRONIZED SYNCHRONIZING

·配置可用性组以支持辅助副本备份只会为要执行备份的位置创建备份首选项。

将脚本修改为Copy_Only选项备份成功:

backup databasetesttodisk ='c:\test.bak'withcopy_only

Processed 328 pages for database 'test', file'test' on file 1.

Processed 1 pages for database 'test', file'test_log' on file 1.

BACKUP DATABASE successfully processed 329 pages in0.140 seconds (18.327 MB/sec).

备份日志不需要Copy_Only选项:

Backup log test to disk='c:\test.trn'

参考:http://msdn.microsoft.com/zh-cn/library/hh710053.aspx

<think>我们正在解决 Windows 环境下执行 pg_restore 时出现的命令未识别错误。该错误表明系统无法找到 pg_restore 可执行文件,通常是因为 PostgreSQL 的 bin 目录未添加到系统环境变量 PATH 中。 解决方案:将 PostgreSQL 安装路径下的 bin 目录添加到系统环境变量 PATH 中,然后重新打开命令行窗口。 步骤: 1. 确定 PostgreSQL 的安装路径。默认安装路径通常是 "C:\Program Files\PostgreSQL\<version>\bin",其中 <version> 是你安装的 PostgreSQL 版本,如 14, 15, 16 等。 2. 将 bin 目录的完整路径添加到系统环境变量 PATH 中。 3. 重新启动命令行窗口(CMD 或 PowerShell)以使更改生效。 详细操作步骤: ### 步骤 1:查找 PostgreSQL 安装路径 通常默认安装路径为: ``` C:\Program Files\PostgreSQL\16\bin (以 16 版本为例) ``` 如果你不确定安装路径,可以通过以下方式查找: - 打开文件资源管理器,导航到 `C:\Program Files\PostgreSQL`,然后查看里面的子目录。 - 或者在开始菜单中搜索 PostgreSQL,右键点击任意一个 PostgreSQL 工具(如 SQL Shell(psql)),选择“打开文件位置”,然后查看属性,找到目标所在的路径。 ### 步骤 2:将 bin 目录添加到 PATH 环境变量(Windows 10/11) 1. 在任务栏的搜索框中输入“环境变量”,然后选择“编辑系统环境变量”。 2. 在弹出的“系统属性”窗口中,点击“环境变量”按钮。 3. 在“系统变量”区域,找到名为 `Path` 的变量,选中并点击“编辑”。 4. 在“编辑环境变量”窗口中,点击“新建”,然后输入 PostgreSQL 的 bin 目录路径(例如:`C:\Program Files\PostgreSQL\16\bin`)。 5. 点击“确定”保存更改,关闭所有窗口。 ### 步骤 3:验证配置 重新打开一个新的命令行窗口(CMD 或 PowerShell),执行: ```powershell pg_restore --version ``` 如果配置正确,将显示 pg_restore 的版本信息,例如: ``` pg_restore (PostgreSQL) 16.1 ``` 如果仍然出现同样的错误,请检查: - 添加的路径是否正确(特别是版本号部分)。 - 确保重新打开了命令行窗口(因为环境变量更新后新的命令行窗口才会生效)。 - 如果系统中有多个 PostgreSQL 版本,确保添加的是包含 pg_restore 的 bin 目录。 如果用户不想修改环境变量,也可以在每次使用 pg_restore 时使用完整路径,例如: ```powershell & "C:\Program Files\PostgreSQL\16\bin\pg_restore.exe" -l "D:\backup\your_file.dmp" ``` 注意:在 PowerShell 中,如果路径包含空格,需要用引号括起来,并且使用调用运算符 `&`。 ### 其他可能的问题 1. **未安装 PostgreSQL 客户端工具**:如果系统中根本没有安装 PostgreSQL,那么需要先下载并安装。可以从 [PostgreSQL 官网](https://www.postgresql.org/download/windows/) 下载安装程序,安装时记得选择“Command Line Tools”选项(如果不需要安装数据库服务器,可以只安装命令行工具)。 2. **多个版本冲突**:如果安装了多个版本的 PostgreSQL,确保 PATH 环境变量中设置的是你希望使用的版本路径。 根据引用[2]中关于恢复策略的考虑,我们也可以类比:这个问题的解决类似于“降级运行”策略中的简化操作,即通过调整环境配置(而非修复程序本身)来恢复功能。 根据引用[3]中关于路径问题的改进,我们也可以注意到路径管理的重要性,因此建议使用绝对路径或正确配置环境变量以避免路径问题。 现在,我们将上述步骤整理成清晰的回答。 注意:用户可能是在Windows Server上操作,步骤与普通Windows系统类似。 最后,生成相关问题。 </think>### 解决 "pg_restore is not recognized" 错误的完整指南 该错误表明系统无法找到 `pg_restore` 可执行文件,通常由以下原因导致: #### 解决方案 1️⃣:将 PostgreSQL bin 目录添加到 PATH 环境变量 **步骤:** 1. 查找 PostgreSQL 安装路径(默认位置): ``` C:\Program Files\PostgreSQL\<版本号>\bin ``` 示例:`C:\Program Files\PostgreSQL\16\bin` 2. 添加 PATH 环境变量: - Win + R → 输入 `sysdm.cpl` → 高级 → 环境变量 - 在"系统变量"中找到 `Path` → 编辑 → 新建 - 粘贴您的 bin 目录路径(如上方示例) - 确定保存所有窗口 3. **验证:** 新开 CMD/PowerShell 输入: ```powershell pg_restore --version ``` 应显示类似:`pg_restore (PostgreSQL) 16.1` #### 解决方案 2️⃣:使用绝对路径执行命令 若不想修改环境变量,可直接指定完整路径: ```powershell & "C:\Program Files\PostgreSQL\16\bin\pg_restore.exe" -l "D:\backup\file.dmp" ``` #### 解决方案 3️⃣:安装 PostgreSQL 客户端工具集 若未安装 PostgreSQL: 1. 访问 [PostgreSQL 官网下载页](https://www.postgresql.org/download/windows/) 2. 安装时**必须勾选**: - ✅ Command Line Tools - ✅ pg_restore (位于安装组件列表) 3. 选择与备份文件匹配的版本(参考版本兼容表) #### 解决方案 4️⃣:使用 Docker 容器(无本地安装) ```powershell docker run --rm -v D:\backup:/backup postgres:16 \ pg_restore -l /backup/file.dmp ``` #### 验证与诊断技巧 - 检查文件是否存在: ```powershell Get-ChildItem "C:\Program Files\PostgreSQL" -Recurse -Filter pg_restore.exe ``` - 多版本冲突处理: ```powershell # 临时切换版本 $env:Path = "C:\Program Files\PostgreSQL\15\bin;" + $env:Path ``` ### 关键注意事项 1. **权限问题**:以管理员身份运行 PowerShell/CMD 2. **路径空格处理**:路径含空格时需加引号:`& "C:\Progra~1\PostgreSQL\..."` 3. **版本匹配**:`pg_restore` 版本需 ≥ 备份文件版本(参考[兼容性表](#版本兼容性参考表)) 4. **安装验证**:运行 `psql --version` 检查基础工具链是否完整 > **故障恢复参考**: > 遵循"恢复策略选择"原则[^2],优先采用修改环境变量(自愈方案),其次考虑重装工具(从备份恢复方案)。 --- ### 版本兼容性参考表 | 备份文件版本 | 最小所需 pg_restore 版本 | |-------------|-------------------------| | 1.14 | PostgreSQL 14.x | | 1.15 | PostgreSQL 15.x | | 1.16 | PostgreSQL 16.x |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值