Scenariusz:
Często spotykamy się z sytuacją, w której musimy zmienić nazwę bazy danych. Pomyśl o sytuacji, pracujesz jako programista SQL Server dla firmy finansowej i mają nazwę bazy danych TechBrothersIT i chcieliby zmienić nazwę na Techbrothers. Musisz dostarczyć skrypty, które można uruchomić w środowisku QA, UAT i produkcyjnym.Rozwiązanie:
Zmiana nazwy przez GUI:Zmiana nazwy bazy danych jest bardzo łatwa, wystarczy kliknąć prawym przyciskiem myszy bazę danych, a następnie wybrać opcję Zmień nazwę.
Jak zmienić nazwę bazy danych w SQL Server - SQL Server / Samouczek TSQLzobacz, że nazwa bazy danych poprosi Cię o zmianę. Śmiało, zmień to i naciśnij Enter.
Jak zmienić nazwę bazy danych w programie SQL Server — samouczek dotyczący SQL Server / TSQLJak zmienić nazwę bazy danych za pomocą TSQL: Możesz użyć TSQL do zmiany nazwy bazy danych w SQL Server.
1) Używając procedury składowanej systemu Sp_Rename Możemy użyć procedury składowanej systemu sp_rename do zmiany nazwy bazy danych na serwerze SQL. Załóżmy, że chcielibyśmy zmienić nazwę TechBrtohersIT na TechBrother. Możemy użyć poniższego skryptu.
sp_renamedb 'OldDatabaseName','NewDatabaseName' EXEC sp_renamedb 'TechBrothersIT','TechBrothers'
2) Użyj Alter Database z Modyfikacją Możemy użyć poniższego skryptu do zmiany nazwy. W tym przykładzie zmieniam nazwę TechBrothersIT na TechBrothers.
USE master; GO ALTER DATABASE TechBrothersIT Modify Name = TechBrothers ; GO
Typowy błąd: Załóżmy, że baza danych jest używana przez różne aplikacje. może pojawić się poniżej błędu.
Msg 5030, Poziom 16, Stan 2, Wiersz 4
Baza danych nie może być zablokowana wyłącznie w celu wykonania operacji.
W tym przypadku może zabić wszystkie połączenia przed uruchomieniem skryptu zmiany nazwy. Poniższy skrypt może zostać użyty do zabicia wszystkich połączeń w bazie danych. Upewnij się ze swoim zespołem i innymi zespołami, zanim zabijesz wszystkie połączenia w bazie danych w celu zmiany nazwy.
USE MASTER
GO
DECLARE @DatabaseName AS VARCHAR(500)
-->Provide the DataBaseName for which want to Kill all processes.
SET @DatabaseName='YourDataBaseName'
DECLARE @Spid INT
DECLARE KillProcessCur CURSOR FOR
SELECT spid
FROM sys.sysprocesses
WHERE DB_NAME(dbid) = @DatabaseName
OPEN KillProcessCur
FETCH Next FROM KillProcessCur INTO @Spid
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @SQL VARCHAR(500)=NULL
SET @SQL='Kill ' + CAST(@Spid AS VARCHAR(5))
EXEC (@SQL)
PRINT 'ProcessID =' + CAST(@Spid AS VARCHAR(5))
+ ' killed successfull'
FETCH Next FROM KillProcessCur INTO @Spid
END
CLOSE KillProcessCur
DEALLOCATE KillProcessCur