javascript - 从存储过程执行备份数据库在本地有效但在生产中无效

标签 javascript php sql-server

我需要通过网络应用程序上的点击按钮备份我的数据库。我将代码放在由 clic 调用的 SP 中,它创建一个 .bak 并将其存储在服务器文件夹中。 这可以完美地直接在 SQL SERVER 中执行 SP,单击本地 Web 应用程序中的按钮,但在生产中没有。

本地和生产中的代码是一样的。

我尝试以多种方式进行 BK:

  • 备份数据库DATABASENAME到磁盘= @route
  • set @query = 'backup database DATABASENAME to disk = ' + '''' + @route + '''' 执行(@查询) 捕获变量中的信息。
  • set @query = 'backup database DATABASENAME to disk = ' + '''' + @route + '''' exec @respuesta = sp_executesql @query

同样,所有这些方式都适用于本地,但不适用于生产。

这是我的SP:

ALTER procedure [dbo].[sp_IWBackupDatabase]
as
begin
declare @route nvarchar(500), @query nvarchar(1000), @respuesta int = 1
set nocount on
set @route = 'I:\SERVERFOLVER\BackupDB\DATABASENAMEFull.bak'

begin try
backup database DATABASENAME to disk = @route
set @respuesta = 0
end try
begin catch
set @respuesta = 1
end catch

select @respuesta Respuesta
end

这是我对 JS 的调用:

function BackupDatabase() {
    $.post('main.php', {
        action: 'BackupDatabase'
    }, function(e) {
        if (e.error) {
            if (e.r == "SQLSTATE[IMSSP]: The active result for the query contains no fields.") {
                Core.ShowNotific8('It WORKS', 'lime', false);
                DBWasBackUp = 1;
                $('#btn_CreateDBBK').attr('disabled', 'disabled');
            } else {
                Core.ShowNotific8('It NOT WORKS', 'ruby', false);
                DBWasBackUp = 0;
                $('#btn_CreateDBBK').removeAttr('disabled');
            }
        } else {
            if (e.r[0]['Respuesta'] == '0') {
                Core.ShowNotific8('It WORKS', 'lime', false);
                DBWasBackUp = 1;
                $('#btn_CreateDBBK').attr('disabled', 'disabled');
            } else {
                Core.ShowNotific8('It NOT WORKS', 'ruby', false);
                DBWasBackUp = 0;
                $('#btn_CreateDBBK').removeAttr('disabled');
            }
        }

    });
    return false;
}

最后,这是来自 PHP 的调用:

function BackupDatabase()
{
$cnx = $this->connectSqlSrv():
$sth = $cnx->prepare("Exec sp_IWBackupDatabase");
$retval json_encode($retval);
}

最佳答案

可能是权限。当您在 VS 下运行站点时,用户以本地 Windows 用户身份运行。当您部署到 IIS 时,它作为应用程序池用户运行。通过转到 IIS > 站点 > 右键单击​​站点 > 管理网站 > 高级设置来检查它正在运行的用户。这是运行它的用户,该用户可能需要具有 SQL 访问权限。如果您需要添加新的应用程序池,请查看此处:https://learn.microsoft.com/en-us/iis/configuration/system.applicationhost/applicationpools/add/#how-to

关于javascript - 从存储过程执行备份数据库在本地有效但在生产中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483370/

相关文章:

javascript - Firestore 未捕获类型错误 : doc. 数据不是函数

javascript - 获取 Repeater 中控件的 ClientId

php - Elasticsearch:为PHP数组中的多个匹配设置参数

mysql - 从当前月份动态声明开始/结束日期

sql - SQL Server 2008中ELSE IF语句中是否可以写IN子句

sql - 列出 SQL Server 2012 架构中所有表的名称

javascript - Jquery动态表不工作

javascript - setTimeout 在耗时内将 +1 添加到 for 循环 "i"

php - 使用 htaccess 在共享主机中将网站 http 重定向到 Laravel 中的 https

javascript - 编码浏览器扩展、插件、Firefox、Safari、Chrome 等……这可能吗?