web-dev-qa-db-ja.com

SQL Server2005でデータベースデータファイルの名前を変更します

データベースのデータファイルの名前を変更する必要があります。これはSQLServer Management Studioを介して可能ですか?

参考までに、基になるボックスへのアクセス許可がありません。

編集:ファイルの場所も変更する必要があります。

24
Jason

はい、データベースをデタッチして再アタッチする権利があり、ディスク上のファイルの名前を物理的に変更する方法を見つけている限り、これを行うことができます。

1)これらのコマンドを発行します

ALTER DATABASE yourdatabase
MODIFY FILE (NAME = logical_file_name, FILENAME = 'your-new-file-on-disk.mdf' )

(DGGenuineがコメントで指摘したように: 'your-new-file-on-disk.mdf'は、ディスク上の完全なファイル名(パスを含む)である必要があります)

2)データベースをデタッチします

3)ディスク上のファイルの名前を変更します

4)データベースを再度接続します

33
marc_s
  1. データベースの完全バックアップを取ります。
  2. もうやめろ。
  3. 復元ダイアログで別のファイル名とパスを指定して、復元します。

物理ファイルを移動するのではなく、SQL Serverに代わりに新しいファイルを生成し、バックアップからそのファイルにデータをコピーするように要求しているため、基盤となるファイルシステムに対するアクセス許可なしでこれを行うことができます。

新しいファイル名とパスを設定するには、[復元]ダイアログの[オプション]タブに移動します。 SQL Serverのファイルシステムのビューではなく、ファイルシステムのビューを表示するフォルダー参照ダイアログも表示されます。

この手順に必要な最小権限:

  • db_backupoperatorデータベースでの役割
  • サーバーでのdbcreatorロール
2

試してください:

ALTER DATABASE <DBName> 
MODIFY FILE (NAME = logical_file_name, FILENAME = 'new-file-on-disk.mdf' )

これにより、SQL Serverのファイル名の内部定義のみが変更され、OSファイルシステム内のファイルの実際の名前は変更されません。

2
Yada

sp_detach_dbを使用して、データベースをオフラインにすることができます。ファイルを見つけて名前を変更し、何でも移動します。次に、sp_attach_dbを使用して、新しい場所からそれらを再接続します。それはとにかく私がそれをする方法です。

よろしく、ドン

1
Don Dickinson

はいおよびいいえ。データベースファイルオブジェクトのファイル名を変更できます。

ALTER DATABASE <dbname> MODIFY FILE (NAME=<logicalname>, FILENAME=<newfilename>);

これによりマスターカタログが更新され、最初に次のデータベースオープンイベントで新しいファイル名が検索されるようになります。ただし、Transact-SQLでファイルの名前を変更/移動する直接的な方法はありません。

ただし、xp_cmdshellを使用してファイルの名前を変更することも、ファイルの名前変更/移動操作を実行できるEXTERNAL_ACCESSを有効にしてCLRアセンブリを展開することもできます。

1
Remus Rusanu

Marc_sの答えのサンプルコードを次に示します。

データベースTestの名前をTestSimpleに変更した後、ファイルの名前を変更したいと思いました。以下はログファイルに対して機能しました。 (メインファイルの場合、NAME =部分がTestになり、そのファイルの代わりに必要なパスを使用しました。)

USE [master]
ALTER DATABASE [TestSimple] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [TestSimple]
MODIFY FILE (NAME = Test_log, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\TestSimple_log.ldf' )
GO
ALTER DATABASE TestSimple SET MULTI_USER
GO

上記は、SSMSが検索するファイルを変更しましたが、実際にはファイルの名前を変更しません。だから私はWindows経由でそれをしなければなりませんでした。

0

これをテキストモードのSSMSで実行して、すべての.ndfファイルの名前を変更するT-SQLスクリプトとDOSコマンドを取得します。これは、ファイルグループと同じ名前のファイルから、ファイルグループで使用したい「FG_」プレフィックスを除いたものが必要であることを前提としています。

乾杯。

/******************************************** ************************** 
 

スクリプト名:ファイル名の名前を02.sql に変更します。
目的:データベース上の複数のファイル名の名前を変更します。
変更履歴:
2010年3月19日4:15 PM --gmilner:作成されました。
************************************************** ********************/
カウントをオンに設定
DECLARE @DATABASE_NAME VARCHAR(64) SET @DATABASE_NAME = 'YOUR_DATABASE_NAME_HERE'
印刷 '------------------------------------------------ ---------------------------- ' PRINT'これらを別のSSMSウィンドウで実行する ' PRINT '------------------------------------------------- --------------------------- '
--ALTER DATABASEファイルを作成して、sys のファイル名を変更します。
/ * 注:「これにより、SQL Serverのファイル名の内部定義のみが変更されます。 OSファイルシステム内のファイルの実際の名前は変更されません。」 */
SELECT 'ALTER DATABASE' + @DATABASE_NAME + CHAR(13)+ 'MODIFY FILE(NAME =' + [name] + '、' + CHAR(13)+ 'FILENAME =' ' '+ /*以下の行は、(古い)ファイル名全体 からのみパスを削除するため、新しいファイルは古いファイル名と同じ場所にマップされます/ SUBSTRING(physical_name、1、PATINDEX( '%' + REVERSE(SUBSTRING(REVERSE(physical_name)、1、CHARINDEX( '\'、REVERSE(physical_name))-1))+ '%'、physical_name)-1)+ @ DATABASE_NAME + '_' +
REPLACE([name]、 'FG _'、 '')+ '。ndf' ');' /
注:すべてのファイルグループは「FG」で始まりますが、ファイルはそうではありません。 / + CHAR(13)/各コマンドの間に空白行を挿入*/ FROMsys.master_files WHERE database_id = DB_ID(@DATABASE_NAME ) AND Physical_name LIKE '%。ndf';
-実際のファイルの名前を変更するには、DOSBATCHコマンドが必要です。 -ボックス自体で管理者として実行します
印刷 '------------------------------------------------ ---------------------------- ' PRINT'今すぐ、データベースを切り離してから... ' PRINT 'これらをDOSバッチで管理者として実行します' PRINT '------------------------------ ---------------------------------------------- '
SELECT '名前の変更 "' +物理名+ '" "' + @ DATABASE_NAME + '' +
REPLACE([name]、 'FG
'、 '')+ '。ndf ";'/*注:すべてのファイルグループは「FG」で始まりますが、ファイルはそうではありません。*/
FROM sys.master_files WHERE database_id = DB_ID(@DATABASE_NAME) AND Physical_name LIKE '%。ndf';
印刷 '------------------------------------------------ ---------------------------- ' PRINT'DOSバッチ後IS実行し、データベースに再接続します ' PRINT' ------------------------------------- --------------------------------------- '
カウントをオフに設定
0
gdmlner

コンテキストメニューから[名前の変更]オプションを使用する場合は注意してください ManagementStudioでデータベースを右クリックすると表示されます。このオプションは、データベースファイル名を変更しません。 DATAファイルとLOGファイルの論理ファイル名を変更するにはManagement Studioインターフェイスを使用することもできますが、残念ながら機能しない場合があります

適切に実行しましょう...常に機能するはずです。

  1. データベースのデタッチ: Management Studioを使用して、データベースを右クリックし、[タスク]> [デタッチ]に移動し、[OK]をクリックしてデータベースをデタッチします(注:DBを使用してデータベースをデタッチすることはできません)
  2. 物理ファイルの名前の変更:データベースがデタッチされると、物理ファイルのロックが解除され、Windowsエクスプローラーを使用して名前を変更できます。 enter image description here
  3. 新しい名前でデータベースをアタッチしています: T SQLを使用します:

    [master] CREATE DATABASE [SqlAndMe] ON(FILENAME = N’C:\…\ NewName.mdf ’)、(FILENAME = N’C:\…\ NewName_log.LDF’)を使用して添付します

  4. 論理ファイル名の名前を変更:次のTSQLを実行します。

    USE [NewName] ALTER DATABASE [NewName] MODIFY FILE(NAME = N'OldName '、NEWNAME = N'NewName')ALTER DATABASE [NewName] MODIFY FILE(NAME = N'OldName_log '、NEWNAME = N'NewName_log')SELECT name 、physical_name FROM [NewName] .sys.database_files

それはうまくいくはずです!

0
paweln66

データベースの名前を変更した後、データとログファイル名も変更する場合は、次の手順を使用できます。

1.1。

USE master;  
GO  
ALTER DATABASE TESTDB
Modify Name = Northwind ;  
GO 

2.2。

ALTER DATABASE Northwind SET OFFLINE; 

ALTER DATABASE Northwind MODIFY FILE ( NAME = TESTDB, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Northwind.mdf' );
ALTER DATABASE Northwind MODIFY FILE ( NAME = TESTDB_log, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Northwind_log.ldf' );

3.3。

Windowsサーバーでファイル名を変更する

4.4。

ALTER DATABASE Northwind SET ONLINE;  
0
丽洁张