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 TSQL
zobacz, ż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 / TSQL
Jak 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