sql >> Databáze >  >> RDS >> Sqlserver

Php volající skript zálohování databáze sqlserver, záložní soubor vytvořen a poté odstraněn

Zde je řešení, které pro mě funguje:

  • spustit sqlsrv_configure("WarningsReturnAsErrors", 0); změnit nastavení pro zpracování chyb.
  • odebrat WITH STATS = 1 ze BACKUP DATABASE prohlášení.

Tento problém jsem schopen reprodukovat pomocí testovacího případu pomocí Apache 2.4, PHP 7.1.12 a Microsoft PHP Driver pro SQL Server (php_sqlsrv_71_ts_x86.dll, verze 4.3). Jediný rozdíl je v tom, že příklad používá ovladač SQLSRV (v testovacím prostředí nemohu použít ovladač PDO_SQLSRV).

PHP

<?php
    sqlsrv_configure("WarningsReturnAsErrors", 0);

    // Connection
    $serverName = "127.0.0.1\instance,1433";
    $connectionInfo = array(
        "UID"=>"user",
        "PWD"=>"password",
        "Database"=>"ProdDB"
    );
    $conn = sqlsrv_connect($serverName, $connectionInfo);
    if ($conn === false) {
        echo "Unable to connect.</br>";
        die(var_export(sqlsrv_errors(), true));
    }

    // Backup database
    $strSQL = file_get_contents("archdata.sql");
    if (!empty($strSQL)) {
        $query = sqlsrv_query($conn, $strSQL);
        if ($query === false) {
            die(var_export(sqlsrv_errors(), true));
        } else {
            sleep(5);  
            echo "Success";
        }
    }   
?>

T-SQL (archdata.sql)

declare 
    @path varchar(100),
    @fileDate varchar(20),
    @fileName varchar(140)

SET @path = 'd:\Backup\'   
SELECT @fileDate = CONVERT(VARCHAR(20), GETDATE(), 112)  
SET @fileName = @path + 'ProdDB_' + @fileDate + '.BAK' 
BACKUP DATABASE ProdDB TO [email protected]

Nezapomeňte udělit potřebná práva složce 'D:\Backup'.




  1. Top 30 nejužitečnějších souběžných manažerských dotazů

  2. je nějaká výhoda pro varchar(500) oproti varchar(8000)?

  3. Jedinečné omezení tabulky SQLite a použití ON CONFLICT REPLACE

  4. Žádná forma ukládání do mezipaměti databáze ke snížení duplicitních databázových dotazů.