Резервное копирование БД из хранимой процедуры работает локально, но не работает - PullRequest
3 голосов
/ 06 июня 2019

Мне нужно сделать резервную копию моей базы данных с помощью кнопки в веб-приложении.Я помещаю код в SP, который вызывается щелчком мыши, он создает .bak и хранит его в папке сервера.Это прекрасно работает, выполняя SP прямо в SQL SERVER, нажимая кнопку в локальном веб-приложении, но не в рабочем режиме.

Код на локальном и производственном уровне совпадает.

Я пытался сделать BK разными способами:

  • резервное копирование базы данных DATABASENAME на диск = @ route
  • set @query = 'резервная копия базы данных DATABASENAME на диск =' + '' '' + @route + '' '' exec (@query) Перехват информации в переменной.
  • set @query = 'резервное копирование базы данных DATABASENAME на диск =' + '' '' + @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);
}

1 Ответ

0 голосов
/ 06 июня 2019

Это скорее всего разрешения.Когда вы запускаете сайт под VS, пользователь работает как локальный пользователь Windows.При развертывании в IIS он работает как пользователь пула приложений.Чтобы проверить, под каким пользователем он работает, перейдите в раздел IIS> Сайты> Правый клик по сайту> Управление веб-сайтом> Расширенные настройки.Это пользователь, с которым он работает, и этому пользователю может потребоваться доступ к SQL.Если вам нужно добавить новый пул приложений, посмотрите здесь: https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/applicationpools/add/#how-to

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...