Я пытаюсь сделать резервную копию и восстановить базу данных из более старой резервной копии.
Я использую этот код SQL для этого:
ALTER DATABASE [UKBYTEDB] SET RECOVERY FULL;
BACKUP DATABASE [UKBYTEDB] TO DISK = 'C:/xampp/htdocs/UKBYTEDB/dev/UKBYTEDB- 2017-02-20.Bak' WITH FORMAT, MEDIANAME = 'Z_SQLServerBackups', NAME = 'Full Backup of [UKBYTEDB] - 2017-02-20';
ALTER DATABASE UKBYTEDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
BACKUP LOG UKBYTEDB TO DISK = 'C:/xampp/htdocs/UKBYTEDB/dev/UKBYTEDB-LOG- 2017-02-20.Bak' WITH NORECOVERY
RESTORE DATABASE [UKBYTEDB] FROM DISK = 'C:/xampp/htdocs/UKBYTEDB/dev/UKBYTEDB-defualt.Bak' WITH RECOVERY;
Мой PHP-код с подключением к Master DB:
$RUN = sqlsrv_query($masterDBlink,$RestoreDefualtDB);
if($RUN === false)
{
die(print_r(sqlsrv_errors()));
}
else
{
echo 'Done!';
}
Тогда я получаю эту ошибку:
Array ( [0] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 4035 [code] => 4035 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Processed 2304 pages for database 'UKBYTEDB', file 'wardobsliveisle' on file 1. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Processed 2304 pages for database 'UKBYTEDB', file 'wardobsliveisle' on file 1. ) ) 1
Если код работает в Management Studio и у вас хорошее соединение, я предлагаю вам поставить NOCOUNT перед вашим первым утверждением и посмотреть, работает ли он:
SET NOCOUNT ON
ALTER DATABASE [UKBYTEDB]...
Наконец-то нашел то, что заставило его работать:
добавить этот код сразу после подключения
sqlsrv_configure( "WarningsReturnAsErrors", 0 );
затем добавьте это после запроса резервного копирования и восстановления
usleep(600);
set_time_limit(2000);
затем выполните этот запрос в конце кода
$sql = "USE [UKBYTEDB]";
$stmt = sqlsrv_query($masterDBlink, $sql);
У меня была именно эта проблема — запрос не работал в PHP, но запрос работал в SQL Management Studio. Оказалось, что хранимая процедура, которую я выполнял, содержала пару операторов PRINT, оставшихся после отладки. Как только я удалил эти заявления, это сработало.