Versuche über SQL Server Management Studio und Transact SQL, eine auf einer SQL Server Amazon RDS-Instanz gehostete Datenbank umzubenennen, führen zu folgendem Fehler.
Der Benutzer hat keine Berechtigung zum Ändern der Datenbank 'Morningstar', die Datenbank existiert nicht oder die Datenbank befindet sich nicht in einem Zustand, der Zugriffsprüfungen zulässt.
Beachten Sie, dass dies die Transact SQL-Anweisung ist, die ich ausprobiert habe.
ALTER DATABASE <OldName> Modify Name = <NewName>;
Die beste Option, die ich bisher gefunden habe, besteht darin, eine Kopie der Originaldatenbank mit dem neuen Namen wiederherzustellen und dann das Original zu löschen. Weitere Informationen hierzu finden Sie in meinem StackOverflow-Beitrag .
Dieser Ansatz weist mindestens die folgenden Nachteile auf.
- Die Export- und Importvorgänge für einen Bacpac können lange dauern.
- Alle Anwendungen oder Websites, die Schreibvorgänge in die Datenbank ausführen, müssen während des gesamten Vorgangs offline geschaltet werden.
- Es sind manuelle Schritte erforderlich, die zu Fehlern führen können.
- Die RDS-Instanz muss groß genug sein, um zwei Kopien der Datenbank zu hosten, wenn Sie das Original als Rollback-Strategie dort belassen möchten, bis die neue verfügbar ist.
Kann jemand einen alternativen Ansatz vorschlagen, der diese Nachteile nicht aufweist?
Update: Ich möchte eine SQL Server-Datenbank umbenennen, die in einer RDS-Instanz gehostet wird - nicht in der RDS-Instanz.
quelle
Antworten:
RDS hat kürzlich eine gespeicherte Prozedur hinzugefügt, um dies zu erreichen:
Quelle: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.RenamingDB.html
quelle
AWS hat die folgenden Informationen für den Fall bereitgestellt, dass ich geöffnet habe (umschrieben).
Obwohl der Hauptbenutzer Mitglied der Datenbankrolle db_owner ist, erfordert eine Datenbankumbenennung eine Änderung in sys.sysdbreg, die sich in der Hauptdatenbank befindet. Die Mitgliedschaft in der Rolle "db_owner" bietet diese Berechtigung nicht.
Die Problemumgehung, die ich in meiner Frage beschrieben habe, ist die Methode, die sie empfehlen würden. Ich habe um Bestätigung gebeten, dass es kein einfacheres Mittel zum Kopieren von Datenbanken von und nach RDS gibt als das, das ich in meinem StackOverflow-Beitrag beschrieben habe .
quelle
EXEC rdsadmin.dbo.rds_modify_db_name N'OLD Database name', N'New Database Name' GO
Quelle: http://mytecksolution.blogspot.com/2017/09/rds-mssql-database-name-change-or-rename.html
quelle