还原数据库失败,尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'

1、用打包软件Setup Factory安装软件时,执行bat文件还原数据库出错

bat文件:

@echo off
rem %1 为路径参数;
rem %2 数据库实例名;
rem %3 用户名;
rem %4 密码;
rem /q 执行查询完毕不退出cmd,/Q执行查询完毕退出cmd,-i:Input_File:要在osql中执行的T-SQL脚本的名称(包括路径)。
echo 正在启动SQL SERVER服务...
net start mssqlserver


echo 正在创建数据库,请稍等...

osql -S %2 -U %3 -P %4 /Q 
"IF Not Exists (SELECT name FROM master.dbo.sysdatabases WHERE name = N'AlarmDB') RESTORE DATABASE AlarmDB FROM DISK ='%1\Data\AlarmDB.bak' WITH MOVE 'AlarmDB' TO '%1\Data\AlarmDB.mdf',MOVE 'AlarmDB_log' TO '%1\Data\AlarmDB.ldf'"

echo 数据库创建结束!

osql -S %2 -U %3 -P %4 -i %1\升级sql语句.sql

echo 数据库更新成功!


pause

其中还原数据库的语句实际如下:

IF Not Exists (SELECT name FROM master.dbo.sysdatabases WHERE name = N'AlarmDB') 
RESTORE DATABASE AlarmDB FROM DISK ='C:\Program Files\My\服务器\Data\AlarmDB.bak' 
WITH MOVE 'AlarmDB' TO 'C:\Program Files\My\服务器\Data\AlarmDB.mdf',
MOVE 'AlarmDB_log' TO 'C:\Program Files\My\服务器\Data\AlarmDB.ldf'


执行时出错:

消息 3634,级别 16,状态 1,第 3 行

在对 'C:\Program Files\My\服务器\Data\AlarmDB.mdf' 尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'。
消息 3156,级别 16,状态 5,第 3 行
文件 'AlarmDB' 无法还原为 'C:\Program Files\My\服务器\Data\AlarmDB.mdf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 3634,级别 16,状态 1,第 3 行
在对 'C:\Program Files\My\服务器\Data\AlarmDB.ldf' 尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'。
消息 3156,级别 16,状态 5,第 3 行
文件 'AlarmDB_log' 无法还原为 'C:\Program Files\My\服务器\Data\AlarmDB.ldf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 3119,级别 16,状态 1,第 3 行
在计划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。
消息 3013,级别 16,状态 1,第 3 行
RESTORE DATABASE 正在异常终止。


2、原因:安装目录 'C:\Program Files\My\服务器\Data‘的Data文件夹权限不够,是只读的,不能写入。


3、解决办法:

方法一:
更换安装路径,不安装在C:\Program Files\My\服务器\Data\,安装在C:\My\服务器\Data\
打包软件中也可以设置为C:\My\%ProductName%,或者D:\My\%ProductName%

还原数据库失败,尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'_第1张图片


方法二:
更改文件夹权限:(win7系统)


还原数据库失败,尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'_第2张图片 还原数据库失败,尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'_第3张图片

还原数据库失败,尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'_第4张图片还原数据库失败,尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'_第5张图片


还原数据库失败,尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'_第6张图片




4、完成第三步后执行结果如下:

已为数据库 'AlarmDB',文件 'AlarmDB' (位于文件 1 上)处理了 176 页。
已为数据库 'AlarmDB',文件 'AlarmDB_log' (位于文件 1 上)处理了 2 页。
RESTORE DATABASE 成功处理了 178 页,花费 0.036 秒(38.574 MB/秒)。



...

你可能感兴趣的:(SQL)