Hai cannato l'installazione di un'istanza sql e non hai cambiato il default dove andare a piazzare il DB?
In effetti è abbastanza facile sbagliare il percorso di installazione del db perchè sql di default ti propone un percorso e non ti chiede se vuoi cambiarlo ma lo devi capire tu nel wizzard, chiaramente se non sei un esperto è facile farselo sfuggire. Il percorso che ti propone lui di default è "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data" che se propio vogliamo vedere non è molto corretto, perchè i dati non centrano un cazzo nella cartella dei programmi, e se un giorno devo formattare o reistallare qualcosa devo spostare il db o recuperare i dati. Mentre l'ideale è creare i file di db su un'altro disco, insieme hai backup.
Cmq ora il danno è fatto...parlo per esperienza personale, per recuperare e spostare il db da un'altra parte bisogna seguire una procedura abbastanza delicata.
Per prima cosa bisogna mandare offline i DB che si vogliono spostare per farlo si può usare questo script:
use master
go
declare @status nvarchar(10);
--set @status = 'offline'
set @status = 'online'
declare stmts cursor local fast_forward for
select 'alter database ' + quotename(name) + ' set ' + @status
from sys.databases
where owner_sid <> 0x01
open stmts
declare @sql nvarchar(max)
while 1 = 1
begin
fetch stmts into @sql
if @@fetch_status <> 0 break
print @sql
execute(@sql)
end
close stmts
deallocate stmts
go
Dopo di chè quando i DB sono offline posso cambiargli il puntamento. Se per caso non riesco a mandarli offline è probabilmente perchè c'è qualche processo che li blocca e quindi prima bisogna killare questi processi usando la sp_who2, per capire chi stà loccando il DB ,e lanciare il comando kill.
Per cambiare il puntamento dei DB posso usare questo script:
use master
go
declare @path nvarchar(250); set @path = 'E:\DataBase'
declare @inst_name nvarchar(250); set @inst_name = 'ins02'
declare stmts cursor local fast_forward for
select
/*'!!dir ' + replace(
@path + '\' + @inst_name + '\' + d.name
+ case mf.type
when 4 then ''
else + '\' + right(physical_name,charindex('\',reverse(physical_name))-1)
end
,'''', '''''')
*/
'alter database ' + quotename(d.name)
+ ' modify file (name = ' + quotename(mf.name)
+ ', filename = ''' + replace(
@path + '\' + @inst_name + '\' + d.name
+ case mf.type
when 4 then ''
else + '\' + right(physical_name,charindex('\',reverse(physical_name))-1)
end
,'''', '''''')
+ ''')'
from
sys.master_files mf
join sys.databases d
on mf.database_id = d.database_id
where d.owner_sid <> 0x01
open stmts
declare @sql nvarchar(max)
while 1 = 1
begin
fetch stmts into @sql
if @@fetch_status <> 0 break
--print(@sql)
execute(@sql)
end
close stmts
deallocate stmts
go
E infine fatti i dovuti controlli posso rimettere i DB online.