Rinominare DB e files

lunedì 11 aprile 2011 - 19.02

dandi.box Profilo | Junior Member

Ciao a tutti, vorrei rinominare un DB ma anche i file presenti nella cartella data

Per il DB, OK da Management Studio ho cambiato nome

volevo poi rinominare fisicamente i files e poi linkarli nuovamente ma non ho i privilegi per farlo (da file system) anche se sto accedendo come amministratore del sistema

in sintesi: come posso cambiare nome del DB e dei relativi files che linka?

grazie

lbenaglia Profilo | Guru

>volevo poi rinominare fisicamente i files e poi linkarli nuovamente
>ma non ho i privilegi per farlo (da file system) anche se sto
>accedendo come amministratore del sistema
>
>in sintesi: come posso cambiare nome del DB e dei relativi files
>che linka?

Dai una lettura a questo thread:
http://www.ms-news.net/f2003/cambiare-nome-ai-file-mdf-e-log-11476753.html

>grazie
Prego.

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

dandi.box Profilo | Junior Member

Grazie per la risposta.

Stavo seguendo il thread ma sono già bloccato al primo punto

facendo

EXEC sp_detach_db 'Mio_DB_Che_Voglio_Rinomiare'

ottengo

Msg 3703, Level 16, State 3, Line 1
Cannot detach the database '....' because it is currently in use.

lbenaglia Profilo | Guru

>Stavo seguendo il thread ma sono già bloccato al primo punto
>
>facendo
>
>EXEC sp_detach_db 'Mio_DB_Che_Voglio_Rinomiare'
>
>ottengo
>
>Msg 3703, Level 16, State 3, Line 1
>Cannot detach the database '....' because it is currently in
>use.

Devi fare in modo che la tua connessione sia l'unica ativa.
Per scollegare tutti gli altri utenti, eseguendo una rollback automatica delle eventuali connessioni in corso, puoi utilizzare il comando:

ALTER DATABASE <nome db> SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

Al termine dell'attività ricordati di riabilitare l'accesso concorrente al db con il comando:

ALTER DATABASE <nome db> SET MULTI_USER;

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

dandi.box Profilo | Junior Member

Scusa ma sono ancora in alto mare

ALTER DATABASE Mio_DB
MODIFY FILE (NAME = 'VecchioNomeFile', NEWNAME = 'NuovoNomeFile')

Msg 5041, Level 16, State 1, Line 1
MODIFY FILE failed. File 'VecchioNomeFile' does not exist.

Ovviamente nella cartella C:\Programmi\SQL Server.... \Data\ sono presenti i due files con questo nome

Dove sbaglio?

Grazie

lbenaglia Profilo | Guru

>Scusa ma sono ancora in alto mare
>
>ALTER DATABASE Mio_DB
>MODIFY FILE (NAME = 'VecchioNomeFile', NEWNAME = 'NuovoNomeFile')
>
>Msg 5041, Level 16, State 1, Line 1
>MODIFY FILE failed. File 'VecchioNomeFile' does not exist.
>
>Ovviamente nella cartella C:\Programmi\SQL Server.... \Data\
>sono presenti i due files con questo nome
>
>Dove sbaglio?

'VecchioNomeFile' non è il nome del file FISICO ma il nome LOGICO.
Nell'esempio che ti ho riportato viene riportata la sp di sistema sp_helpdb che ti permette di recuperare tra le altre cose anche il nome logico dei file che costituiscono il db (colonna namre):

EXEC sp_helpdb '<nome db>';

>Grazie
Prego.

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

dandi.box Profilo | Junior Member

Allora.... il risultato della SP mi da come "name" il nome corretto modificato come "file name" il path a SQL Server e come nome file quello "vecchio"

Stessa domanda iniziale... come cambio il nome del file fisico?

Grazie mille

lbenaglia Profilo | Guru

>Allora.... il risultato della SP mi da come "name" il nome corretto
>modificato come "file name" il path a SQL Server e come nome
>file quello "vecchio"
>
>Stessa domanda iniziale... come cambio il nome del file fisico?
Questo mi porta a pensare che non hai letto il thread che ti ho indicato.
Fai un bel respiro e riparti dall'inizio...

>Grazie mille
Prego.

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

dandi.box Profilo | Junior Member

Allora....

se faccio

ALTER DATABASE PROVA
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;

EXEC sp_detach_db 'PROVA'

ottengo

Cannot detach the database 'PROVA' because it is currently in use.



Se proseguo e faccio:

!!ren "c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Prova.mdf" "Nuovo.mdf";

ottengo

Incorrect syntax near '!'.

se tolgo i due !! ottengo

Incorrect syntax near 'Nuovo.mdf'.


Cosa/Dove sbaglio?

Grazie

gsflash80 Profilo | Junior Member

è normale che ti ha respinto, perchè stavi usando lo stesso DB!

fai questo:

USE master GO ALTER DATABASE VecchioDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO EXEC master sp_renamedb 'VecchioDB', 'NuovoDB' GO ALTER DATABASE NuovoDB SET MULTI_USER GO

ma ricorda di usare master o altro, m non dallo stesso DB da rinominare.
Ciao


Mi dimenticavo, se prefiresti che si modifica il file:

USE [master] GO EXEC xp_cmdshell 'RENAME "C:\Program Files\Microsoft SQL ServerMSSQL10.SQL2008\ MSSQL\DATA\VecchioDB.mdf", "NuovoDB.mdf"' GO EXEC xp_cmdshell 'RENAME "C:\Program Files\Microsoft SQL ServerMSSQL10.SQL2008\ MSSQL\DATA\VecchioDB_log.ldf", "NuovoDB_log.ldf"' GO

Ancora ciao
----

..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard

lbenaglia Profilo | Guru

>Allora....
>
>se faccio
>
>ALTER DATABASE PROVA
>SET SINGLE_USER
>WITH ROLLBACK IMMEDIATE;
>
>EXEC sp_detach_db 'PROVA'
>
>ottengo
>
>Cannot detach the database 'PROVA' because it is currently in
>use.

Verifica di aver selezionato un db differente rispetto a quello che stai scollegando, altrimenti SEI TU la causa dell'errore!

>Se proseguo e faccio:
Non puoi rinominare i files di un db in uso!!!

>!!ren "c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Prova.mdf"
>"Nuovo.mdf";
>
>ottengo
>
>Incorrect syntax near '!'.
!! identifica un comando eseguito in SSMS in modalità SQLCMD Mode che devi abilitare dal menu Query > SQLCMD Mode.

>Grazie
Prego.

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

dandi.box Profilo | Junior Member

Quando cerco di rinominare i files ottengo:


Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', see "Surface Area Configuration" in SQL Server Books Online.
Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', see "Surface Area Configuration" in SQL Server Books Online.

gsflash80 Profilo | Junior Member

sei entrato come SA?
----

..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard

dandi.box Profilo | Junior Member

yesssss

gsflash80 Profilo | Junior Member

credo che non sia abilitato xp_cmdshell

allora vai su

Programmi-->Microsoft SQL server 2005-->Configuration Tools-->Surface Configuration Tool

troverai Surface Area Configuration for Features e poi clicca su xp_cmdshell per abilitarlo.
Prova

oppure scrivi questo:
EXECUTE SP_CONFIGURE 'show advanced options', 1 RECONFIGURE WITH OVERRIDE GO EXECUTE SP_CONFIGURE 'xp_cmdshell', '1' RECONFIGURE WITH OVERRIDE GO EXECUTE SP_CONFIGURE 'show advanced options', 0 RECONFIGURE WITH OVERRIDE GO
----

..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard

lbenaglia Profilo | Guru

Non occorre abilitare la xp 'xp_cmdshell' dato che apriresti un bel buco di sicurezza.
Tutte le info che ti servono sono nel primo thread indicato.

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

gsflash80 Profilo | Junior Member

è vero che aprirebbe un bel buco di sicurezza, solo in quel momento potrebbe rinominare e poi disabilitare, che ne pensi?

come giustamente che ha postato il primo link

oppure quello che ho postato:
USE master GO ALTER DATABASE VecchioDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO EXEC master sp_renamedb 'VecchioDB', 'NuovoDB' GO ALTER DATABASE NuovoDB SET MULTI_USER GO

va bene questo?
----

..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard

lbenaglia Profilo | Guru

>è vero che aprirebbe un bel buco di sicurezza, solo in quel momento
>potrebbe rinominare e poi disabilitare, che ne pensi?
Ma scusa, per rinominare un file non puoi usare banalmente Windows Explorer o aprire una shell DOS ed utilizzare il comando ren?

>oppure quello che ho postato:
>
>USE master
>GO
>ALTER DATABASE VecchioDB
>SET SINGLE_USER
>WITH ROLLBACK IMMEDIATE
>GO
>EXEC master sp_renamedb 'VecchioDB', 'NuovoDB'
>GO
>ALTER DATABASE NuovoDB
>SET MULTI_USER
>GO
>
>
>va bene questo?
Questo NON rinomina i nomi dei file fisici che costituiscono il db, modifica banalmente il nome logico del db.

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

gsflash80 Profilo | Junior Member

>è vero che aprirebbe un bel buco di sicurezza, solo in quel momento
>potrebbe rinominare e poi disabilitare, che ne pensi?
>Ma scusa, per rinominare un file non puoi usare banalmente Windows Explorer o aprire una shell DOS ed utilizzare il comando ren?


se lui usa sql server nello stesso pc o usando vnc del server dove si trova sql server, ovviamente rinomina il file db, se usa client come farebbe a rinominare?
----

..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard

lbenaglia Profilo | Guru

>se lui usa sql server nello stesso pc o usando vnc del server
>dove si trova sql server, ovviamente rinomina il file db, se
>usa client come farebbe a rinominare?
Via SQLCMD Mode richiamando il comando ren.
Ad ogni modo chi ha detto che non può salire in console sul server?

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

gsflash80 Profilo | Junior Member

>se lui usa sql server nello stesso pc o usando vnc del server
>dove si trova sql server, ovviamente rinomina il file db, se
>usa client come farebbe a rinominare?
>Via SQLCMD Mode richiamando il comando ren.
>Ad ogni modo chi ha detto che non può salire in console sul server?

>Ciao!

è vero, non ci avevo pensato.
grazie di avermi chiarito, perchè anche io sto cercando di capire su quest'altra possibilità.
buona serata
----

..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard

dandi.box Profilo | Junior Member

!!ren "c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Prova.mdf" "Nuovo.mdf";

dove lo eseguo questo??

lbenaglia Profilo | Guru

>!!ren "c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Prova.mdf"
>"Nuovo.mdf";
>
>dove lo eseguo questo??
Da SQL Server Management Studio in modalità SQLCMD Mode.

Ma toglimi una curiosità: sei in console sul server che ospita l'istanza SQL (fisicamente, via RDP, VNC, o qualunque altro sistema di accesso remoto)?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

dandi.box Profilo | Junior Member

USE master
GO
ALTER DATABASE MIODB
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
GO

ALTER DATABASE MIODB
SET MULTI_USER
GO



!!ren "c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\OLD.mdf" "MIODB.mdf";
!!ren "c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\OLD_log.ldf" "MIODB_log.ldf";


Ottengo

Accesso negato!
Accesso negato!

lbenaglia Profilo | Guru

>Ottengo
>
>Accesso negato!
>Accesso negato!

Fai così:

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

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

dandi.box Profilo | Junior Member

Graaaaazie mille!!!

Finalmente sono riuscito

Grazie infinite
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5