Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 43
  1. #1

    Programma PHP che esegue backup e ripristino di database SQL SERVER

    Ciao a tutti, spiego subito il problema che mi ritrovo: devo eseguire dei backup su un SQL SERVER 2000, copiarli su un nuovo server che supporta SQL 2008 ed eseguire quindi i ripristini uno alla volta.
    Tenete presente che questo programma dovrebbe spostare circa un migliaio di database anche molto pesanti, relativi ad anni passati e, soprattutto, 146 database del corrente anno una volta al giorno.

    Ho creato un programma che esegue i vari passaggi:
    - Esegue i vari backup (uno alla volta) dei database che si trovano su un SQL SERVER 2000 con relativa query BACKUP DATABASE che si crea di volta in volta un file di backup in base al nome del database, alla data e all'ora in cui viene eseguito.
    - Verifica il corretto backup con la query RESTORE VERIFYONLY.
    - Copia il file backup appena creato sul nuovo server e cancella quello presente sul vecchio server.
    - Fa il restore sul nuovo server (che come detto, è un SQL SQRVER 2008) con la query di RESTORE DATABASE.

    Tutto questo in teoria... perchè il problema principale è che il comando che lancia la query (sqlsrv_query , preciso che il mio programma è lanciato da un terzo server che supporta le librerie PHP di SQL SERVER 2008) è come se venisse interrotto e la query va sempre in errore nonostante i backup o le verifiche o gli stessi ripristini siano andati a buon fine (e questo vuol dire che le query sono corrette anche perchè sono state verificate con il Management Studio).

    Io penso che come accade sul Management Studio, dove all'esecuzione della query mi vengono restituiti dei messaggi di completamento delle varie operazioni (ad esempio quando viene eseguito il backup, Man Studio mi ritorna messaggio che mi dicono l'avanzamento della fase di backup, ad esempio "41 percent backed up.") e che questi messaggi vengano interpretati da sqlsrv_query come messaggi di errore e che quindi vada in errore.
    Sul manuale ho trovato alcuni stati di errore SQLSTATE che potrebbero anche essere evitati ed infatti ho dovuto creare una funzione di rilevazione di questo tipo di stati e che quindi mi evita la rilevazione dell'errore, di seguito il codice di esempio.

    Codice PHP:
    sqlsrv_query($connect$sql) or trigger_error("La query ha ritornato falso : ".erroriQuerySql2008($backup$bkPathFile"Errore durante il Backup del database"$bkDBName$Log));


    //funzione per segnalare più esplicitamente gli errori derivanti dalle query SQL 2008
    function erroriQuerySql2008($result$path$errore$bkDBName$Log){
        
    $errText="";
        if(
    $result===false){
            if((
    $errors=sqlsrv_errors())!=null){
                foreach(
    $errors as $error){
                    
    $errText.="SQLSTATE: ".$error'SQLSTATE']."\n";
                    
    $errText.="code: ".$error'code']."\n";
                    
    $errText.="message: ".$error'message']."\n";
                    if(
    $error['SQLSTATE'] == '01000' || $error'SQLSTATE'] == '01001' || $error'SQLSTATE'] == '01003' || $error'SQLSTATE'] == '01S02' ){
                        
    $errText "ma non ci sono errori!!! \n";
                        return 
    $errText;
                    }else{
                        echo 
    $errore;
                        
    $array explode("\\"$path);
                        
    $Log->BackupLog("Server: ".$array[2]." DB: ".$bkDBName$errorebasename($_SERVER["PHP_SELF"]));
                        
    $GLOBALS['erroriBackup']++;
                        return 
    $errText;
                    }
                }
            }
        }

    Il problema persiste nel momento in cui mi ritrovo di cmq che i restore non vengono effettuati in nessun caso.
    In più nel momento in cui provo a fare anche solamente eseguire il tutto per i db del 2012 senza fare i restore molte volte durante la verifica del backup mi ritrovo errori di questo tipo:
    codice:
    SQLSTATE: 42000
    code: 3201
    message: [Microsoft][SQL SERVER Native Client 10.0][SQL server]Cannot open backup device <percorso del file di backup>. Device error or device off-line. See the SQL Server error log for more details.
     in <percorso del programma> on line <nr linea>
    L'sql server non riesce ad aprire il backup il device, nonostante questo sia online e funzionante: il risultato di tutto ciò è che in genere di 146 db del 2012, circa 35/38 a seconda, e non sempre gli stessi, non vengono copiati nel nuovo server...

    Qualche idea? Non so se sono stato abbastanza chiaro su quello che sto cercando di risolvere...

    Tenete anche presente che ho provato ad effettuare anche con il Man Studio le copie dei database con il comando di Wizard, ma questo non parte nemmeno perchè mi dà errore durante la "configurazione del pacchetto di Integration Services" e quindi andando in errore subito senza nemmeno eseguire una sola azione.

  2. #2
    nessuno sa darmi delle indicazioni o dei suggerimenti???

  3. #3
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Lo sai che SQL Server ha tutte queste funzioni integrate vero? E che i backup si possono schedulare vero? Se non lo sapevi ora lo sai :-)

  4. #4
    Originariamente inviato da _debo
    Lo sai che SQL Server ha tutte queste funzioni integrate vero? E che i backup si possono schedulare vero? Se non lo sapevi ora lo sai :-)
    e quindi come la traduco in codice PHP questa schedulazione?

  5. #5
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    La mia risposta era intesa a dire che non la devi riscrivere in PHP anzi la devi evitare come la peste a meno che non ci sia una reale e comprensibile spiegazione al perché tu voglia far fare a PHP qualcosa per cui il linguaggio non è stato pensato, o meglio, perché impazzire a volere riscrivere da zero un tool in grado di fare un decimo di quello che SQL Server fa già da solo?

  6. #6
    Originariamente inviato da _debo
    La mia risposta era intesa a dire che non la devi riscrivere in PHP anzi la devi evitare come la peste a meno che non ci sia una reale e comprensibile spiegazione al perché tu voglia far fare a PHP qualcosa per cui il linguaggio non è stato pensato, o meglio, perché impazzire a volere riscrivere da zero un tool in grado di fare un decimo di quello che SQL Server fa già da solo?
    quindi dovrei utilizzare per tutto il Man Studio? e dove trovo tutte ste meravigliose funzioni?

  7. #7
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Purtroppo non sono riuscito a trovare documentazione specifica per SQL Server 2008 con screenshots ma ti assicuro che non cambia poi molto quindi puoi tranquillamente seguire questa guida.

    http://technet.microsoft.com/en-us/l.../cc966495.aspx

    Mi sorge però spontanea una domanda che avrei dovuto fare prima. Stai usando un full 2008 o stai usando la express?

  8. #8
    mmmmmmmmmmmmmmmmm ma le documentazioni niente proprio?
    DOCUMENTAZIONE
    klamis.it Il primo socialnetwork per chi ama le figurine

  9. #9
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Documentazione? Che cos'è?

  10. #10
    Quella cosa dove qualcuno ci sbatte la testa tante ma tante tante volte
    klamis.it Il primo socialnetwork per chi ama le figurine

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.