Directory corrente in sql server

mercoledì 22 ottobre 2008 - 13.38

ciccios100 Profilo | Junior Member

Buon giorno,
volevo porre una domanda, è possibile in SQL Server 2005 sapere qual'è la directory corrente? mi spiego meglio, ho un file con estensione .sql con il seguente codice:
USE model
BACKUP DATABASE model
TO DISK = 'D:\BACKUP_SQL\Full_BACKUP\model.bak'

la mia domanda è questa posso sostituire 'D:\BACKUP_SQL\Full_BACKUP\' con una variabile che in sql mi restituisca il percorso corrente ?
spero di essere stato chiaro nell'esposizione del problema, intanto ringrazio tutti coloro mi vorranno aiutare!
Ciao a tutti

Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia

Brainkiller Profilo | Guru

>la mia domanda è questa posso sostituire 'D:\BACKUP_SQL\Full_BACKUP\'
>con una variabile che in sql mi restituisca il percorso corrente

Ciao Francesco,
sei stato chiaro, ma il percorso corrente di cosa ?

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

ciccios100 Profilo | Junior Member

Ciao David,

>sei stato chiaro, ma il percorso corrente di cosa ?
intendevo il percorso in cui è salvato il file .bak
In poche parole ho un programmino con interfaccia grafica che lancia un file .bat.
Il file batch aggancia l'istanza di SQL server e poi lancia il file BackupCode.bak (salvato nel percorso'D:\BACKUP_SQL\Full_BACKUP).
Nel file .bak c'è il codice che ti ho postato prima, ma vorrei sostituire alla riga TO DISK = 'D:\BACKUP_SQL\Full_BACKUP\model.bak'
una riga tipo
TO DISK = @curdir + ' \model.bak', dove la variabile @curdir mi da come risultato il percorso in cui è salvato il file .bak, ma non so se una cosa del genere è possibile in sql server....
Spero di aver chiarito i dubbi,grazie

Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia

Brainkiller Profilo | Guru

>TO DISK = @curdir + ' \model.bak', dove la variabile @curdir
>mi da come risultato il percorso in cui è salvato il file .bak,
>ma non so se una cosa del genere è possibile in sql server....
>Spero di aver chiarito i dubbi,grazie

Mi sa di no. E non saprei neanche come parametrizzare questa cosa. Forse solo riscrivendo di volta in volta il file batch e impostando come directory il percorso voluto. Oppure da dentro SQL definendo una variabile che poi usi come Path però il valore devi passarglielo dall'esterno quindi dal batch e questo passaggio non credo si possa fare.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

ciccios100 Profilo | Junior Member

>Forse solo riscrivendo di volta in volta il file batch
>e impostando come directory il percorso voluto.
Per quanto riguarda il batch faccio così,anche perchè dal programma puoi decidere a quale istanza il batch si deve collegare....
>da dentro SQL definendo una variabile che poi usi come Path però il valore devi passarglielo dall'esterno quindi dal batch e questo passaggio non
>credo si possa fare.
avrei voluto fare una cosa del genere per poter pilotare il backup senza modificare lo script SQL (a meno che non ci siano nuovi db da backappare)...
Vabbè se no si può fare mi toccherà modificare lo scrit di volta in volta oppure lanciare il backup con l'istruzione:
TO DISK = '\model.bak'
così facendo dovrebbe andarmi a fare il backup nella cartella di default che dovrebbe essere :
C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Backup
giusto?
>Ciao
>
>David De Giacomi | <empty>
>http://blogs.dotnethell.it/david/

Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia

lbenaglia Profilo | Guru

>avrei voluto fare una cosa del genere per poter pilotare il backup
>senza modificare lo script SQL (a meno che non ci siano nuovi
>db da backappare)...
>Vabbè se no si può fare mi toccherà modificare lo scrit di volta
>in volta oppure lanciare il backup con l'istruzione:
>TO DISK = '\model.bak'
>così facendo dovrebbe andarmi a fare il backup nella cartella
>di default che dovrebbe essere :
>C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Backup
>giusto?

Il path del device non è parametrizzabile.
Ma la vera domanda è: per quale motivo hai la necessità di parametrizzare il path dei backup?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ciccios100 Profilo | Junior Member

Semplicemente perchè potrei impostare il device di backup direttamente dal mio programmino.....
Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia

lbenaglia Profilo | Guru

>Semplicemente perchè potrei impostare il device di backup direttamente
>dal mio programmino.....

Cosa intendi con "device di backup"?
Un device backup è un oggetto per definizione statico, che "non si importa" ma si definisce a livello di istanza.

Inoltre non è una buona idea far gestire "esternamente" la politica di backup, dato che è compito di un DBA gestire centralmente i backup. Delegare ad un utente i backup equivale a non eseguire alcun backup.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ciccios100 Profilo | Junior Member

>Cosa intendi con "device di backup"?
>Un device backup è un oggetto per definizione statico, che "non
>si importa" ma si definisce a livello di istanza.

Volevo dire che potrei impostare il percorso di salvataggio del backup...in poche parole ho fatto un programmino con autoit, che provvede a fare le seguenti operazioni:
-Lanciare un file .bat che si aggancia all'istanza SQL
-Dal File .bat lancio uno script con estensione .sql con al suo interno il codice per backuppare i miei db
-Comprimo i file .bak con 7zip
-Masterizza i file zippati
-Nel programma è previsto una specie di scheduler interno, che mi permette se impostato di fare almeno una copia a giorno....

>Inoltre non è una buona idea far gestire "esternamente" la politica
>di backup, dato che è compito di un DBA gestire centralmente
>i backup. Delegare ad un utente i backup equivale a non eseguire
>alcun backup.
So che sarebbe meglio provvedere personalmente ai backup, ma avendo circa 100 clienti che utilizzano un CRM con db in SQL server non posso provvedere personalmente al backup giornaliero dei 100 clienti, così ho creato questo programma in modo da poter pianificare il backup giornaliero dei db che mi interessano...non so se sia una soluzione ottimale...secondo te potrebbe andar bene?
Per quanto riguarda il problema originale nel file con estensione .sql ho la seguente istruzione
USE model
BACKUP DATABASE model
TO DISK = 'D:\BACKUP_SQL\model.bak'
Volevo sapere possibile parametrizzare in qualche modo la stringa 'D:\BACKUP_SQL\model.bak'

>Ciao!
Ciao e grazie mille per l'aiuto sia a te che a David
Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia

lbenaglia Profilo | Guru

>So che sarebbe meglio provvedere personalmente ai backup, ma
>avendo circa 100 clienti che utilizzano un CRM con db in SQL
>server non posso provvedere personalmente al backup giornaliero
>dei 100 clienti, così ho creato questo programma in modo da poter
>pianificare il backup giornaliero dei db che mi interessano...non
>so se sia una soluzione ottimale...secondo te potrebbe andar
>bene?
Ovviamente non è compito tuo provvedere al backup dei db dei tuoi clienti, ma devono essere loro a mettere a disposizione una persona che provveda al backup non solo del CRM, ma anche di tutti i loro db.
Supponiamo che il tuo tool abbia eseguito un full backup alle 02:00 del mattino.
Alle 17:00 c'è un crash del sottositema dischi del server che ospita il db del CRM.

Ora, cosa succede?
Chi si occupa del restore?
Al cliente sta bene perdere una intera giornata di lavoro?

Questo è solo un banale esempio per sottolineare l'importanza di avere in azienda una persona preposta a garantire la continuità dei servizi.

>Per quanto riguarda il problema originale nel file con estensione
>.sql ho la seguente istruzione
>USE model
>BACKUP DATABASE model
>TO DISK = 'D:\BACKUP_SQL\model.bak'
>Volevo sapere possibile parametrizzare in qualche modo la stringa
>'D:\BACKUP_SQL\model.bak'
L'utility sqlcmd prevede il parametro -v per definire variabili che possono essere utilizzate per parametrizzare uno script.
Supponiamo di avere il seguente script C:\Backup.sql:

BACKUP DATABASE AdventureWorks2008 TO DISK="$(Device)";

Puoi richiamarlo nel seguente modo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ATTENZIONE: l'account utilizzato dal servizio MSSQLServer dovrà avere le permission di full control nel path dove andrai a salvare il backup set.

>Ciao e grazie mille per l'aiuto sia a te che a David
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ciccios100 Profilo | Junior Member

>Ovviamente non è compito tuo provvedere al backup dei db dei
>tuoi clienti, ma devono essere loro a mettere a disposizione
>una persona che provveda al backup non solo del CRM, ma anche
>di tutti i loro db.
>Supponiamo che il tuo tool abbia eseguito un full backup alle
>02:00 del mattino.
>Alle 17:00 c'è un crash del sottositema dischi del server che
>ospita il db del CRM.
>
>Ora, cosa succede?
Succede che mi chiamano ed io inizio ad imprecare in una lingua quasi del tutto sconosciuta fuori dal territorio tarantino
>Chi si occupa del restore?
Naturalmente lo faccio io da remoto...
>Al cliente sta bene perdere una intera giornata di lavoro?
Se non vogliono spendere per comprare un software che permetta di schedulare i backup in modo più adeguato,e non hanno una persona al loro interno responsabile dei backup(o meglio la hanno ma è come se nn la avessero, e succede nel 90% dei casi), per me gli deve star bene per forza...

>L'utility sqlcmd prevede il parametro -v per definire variabili
>che possono essere utilizzate per parametrizzare uno script.
>Supponiamo di avere il seguente script C:\Backup.sql:

>BACKUP DATABASE AdventureWorks2008
>TO DISK="$(Device)";

>Puoi richiamarlo nel seguente modo:
>
>sqlcmd -E -i"C:\Backup.sql" -v Device="C:\Programmi\Microsoft
>SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\AdventureWorks2008.bak"

Grazie mille dell'aiuto, ....era prorpio quello che cercavo
Francesco Laliscia
>>Domandare è lecito,rispondere è cortesia

lbenaglia Profilo | Guru

>>Ora, cosa succede?
>Succede che mi chiamano ed io inizio ad imprecare in una lingua
>quasi del tutto sconosciuta fuori dal territorio tarantino


>>Chi si occupa del restore?
>Naturalmente lo faccio io da remoto...
Ah, bene

>>Al cliente sta bene perdere una intera giornata di lavoro?
>Se non vogliono spendere per comprare un software che permetta
>di schedulare i backup in modo più adeguato,e non hanno una persona
>al loro interno responsabile dei backup(o meglio la hanno ma
>è come se nn la avessero, e succede nel 90% dei casi), per me
>gli deve star bene per forza...
Puoi schedulare il BACKUP (full, differenziale o del t-log) via sqlcmd utilizzando lo scheduler di Windows che trovi nel pannello di controllo.
Il problema è poi sapere come si fa il restore avendo a disposizione diverse tipologie di backup...

>Grazie mille dell'aiuto, ....era prorpio quello che cercavo
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5