Резервное копирование SQL Сервер с использованием PHP - PullRequest
1 голос
/ 25 марта 2020

Я хотел бы сделать резервную копию базы данных на SQL Server 2017 с помощью сценария PHP и поместить файл в мою файловую систему на веб-сервере (IIS).

Мой PHP сценарий:

$sql = "BACKUP DATABASE BGEDB TO DISK='\\\WWWDEV02\WWWDEV02-BGEDB\backups\BGEDB.bak'";
// $sql = BACKUP DATABASE BGEDB TO DISK='\\WWWDEV02\WWWDEV02-BGEDB\backups\BGEDB.bak'
$stmt = sqlsrv_query($conn, $sql);
if ($stmt) {
  echo "Statement executed.<br>\n";
}
else {
  echo "Error in statement execution.\n";
  die( print_r( sqlsrv_errors(), true));
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);

Результат:

Ошибка в выполнении оператора. Array ([0] => Array ([0] => 01000 [SQLSTATE] => 01000 [1] => 4035 [code] => 4035 [2] => [Microsoft] [ODB C Драйвер 17 для SQL Сервер] [SQL Сервер] 536 Seiten wurden für d ie BGEDB-Datenbank, Datei "BGEDB" для Datei 2, verarbeitet. [Сообщение] => [Microsoft] [ODB C Драйвер 17 для SQL Сервер] [SQL Сервер] 536 Seiten wurden für d ie BGEDB-Datenbank, Datei "BGEDB" для Datei 2, verarbeitet.))

В SQL Server Management Studio есть нет проблем с использованием команды в $ sql:

BACKUP DATABASE BGEDB TO DISK='\\WWWDEV02\WWWDEV02-BGEDB\backups\BGEDB.bak'

Пожалуйста, кто-нибудь может мне помочь с моей проблемой? Это из-за прав пользователя между SQL Сервером и веб-сервером? Или я сделал что-то не так с экранированием обратной косой черты в PHP?

Edit:

Я написал хранимую процедуру BGEDB_Backup на SQL Server:

CREATE PROCEDURE BGEDB_Backup 
AS
BEGIN
    SET NOCOUNT ON;
    BACKUP DATABASE BGEDB TO DISK='\\WWWDEV02\WWWDEV02-BGEDB\backups\Datenbank_per_Skript\BGEDB1.bak'
END
GO

Когда я запускаю это в Management Studio, файл резервной копии будет записан в файловой системе IIS-веб-сервера. Теперь я попытался выполнить c хранимую процедуру в моем php:

$sql = "EXEC BGEDB_Backup";
echo "SQL ---> ".$sql."<br /><br />";
$stmt = sqlsrv_prepare($conn, $sql);
if ($stmt) {
  echo "Statement executed.<br>\n";
}
else {
  echo "Error in statement execution.\n";
  die( print_r( sqlsrv_errors(), true));
}

К сожалению, ничего не происходит в файловой системе веб-сервера ...

Спасибо за вашу помощь!

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