2017-02-20 20 views
0

Я пытаюсь создать резервную копию и восстановить базу данных из старой резервной копии.Почему этот код не работает в PHP, но отлично работает в Management Studio

Я использую этот 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 
+2

Это не сообщение об ошибке. –

+0

@JayBlanchard у вас есть идея, почему он терпит неудачу и возвращает false? –

ответ

0

Если код работает в Management Studio, и ваше соединение хорошее, я предлагаю вам поставить NOCOUNT перед вашим первым заявлением и посмотреть если он работает:

SET NOCOUNT ON 
ALTER DATABASE [UKBYTEDB]... 
+0

Я тестировал его с помощью NOCOUNT, но все же показывает тот же результат. Я попробовал USE MASTER перед заявлением, и возврат был TRUE вместо ложных ошибок, но резервный файл не сохранялся. Я проверил соединение, и я могу вставить, удалить и выбрать, просто резервная копия не удалась. –

0

Наконец нашел то, что получил его на работу:

добавить этот код сразу после подключения

sqlsrv_configure("WarningsReturnAsErrors", 0); 

затем добавить это после того, как резервное копирование и восстановление Query

usleep(600); 
set_time_limit(2000); 

затем запустите этот запрос в конце кода

$sql = "USE [UKBYTEDB]"; 
$stmt = sqlsrv_query($masterDBlink, $sql); 
0

У меня была эта точная проблема: запрос не работал в PHP, но запрос работал в SQL Management Studio. Оказалось, что в хранимой процедуре, которую я выполнял, было несколько инструкций PRINT, оставшихся после отладки. Как только я удалил эти заявления, он сработал.