web-dev-qa-db-ja.com

「論理ファイル名「MyDB」はすでに使用されています」データベースが存在しないにもかかわらず

最近、SANがいくつかのRAIDアレイとともにデータベースサーバーに適用され、パフォーマンスを向上させるために与えられました。私はDDASという1つのユーザーデータベースを持っています、SQL Serverと共にインストールされるシステムデータベースに加えて。

私の意図は、DDASが独自のドライブを指し、tempdbが独自のドライブを指し、トランザクションログが独自のドライブを指し示すことでした。 SQL Serverを実行しているユーザーアカウントには、すべてのドライブへのフルコントロールアクセス権があります。何かを行う前に、それを確認しました。

次のSQLステートメントを使用してtempdbを正常に移動しました。

_ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'tempdev', FILENAME = N'F:\tempdb.mdf')
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'templog', FILENAME = N'F:\templog.ldf')
_

SQL Serverを再起動しましたが、tempdbは再配置されました(古いtempdbファイルを元の場所から安全に削除できますか?おそらく別の質問です...)

現在、DDASはまだ開発中であるため、独自のドライブに移動する前に、すべてのテーブルからすべてのデータを削除することができました。したがって、ファイルのサイズは約5MBになります。 DDASファイルを使用して同じステートメントを実行します。

_ALTER DATABASE [DDAS] MODIFY FILE ( NAME = N'DDAS', FILENAME = N'E:\DDAS.mdf')
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'DDAS_log', FILENAME = N'G:\DDAS_log.ldf')
_

SQL Serverを再起動すると動作しません... Management StudioのデータベースでDDAS (Recovery Pending)を無期限に取得します。すべてのオブジェクトなどを作成するスクリプトがあるので、データベースを完全に削除しました...存在するはずのドライブにデータベースを再作成しようとするだけです。次のステートメントでデータベースを作成しようとしました。

_IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'DDAS')
BEGIN
    CREATE DATABASE [DDAS]
    CONTAINMENT = NONE
    ON  PRIMARY 
        ( NAME = N'DDAS', FILENAME = N'E:\DDAS.mdf' , SIZE = 1024000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024000KB  ) 
    LOG ON      
        ( NAME = N'DDAS', FILENAME = N'G:\DDAS_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    END
GO
_

しかし、私は今このエラーを受け取ります:

what

このクエリを使用して、SQL Serverで使用されているファイル名を一覧表示しました。

_SELECT DB_NAME(database_id) AS DatabaseName, 
       name AS LogicalFileName, 
       physical_name AS PhysicalFileName 
FROM sys.master_files AS mf
_

そしてこの結果を得ました:

result

これはどのようにして可能ですか?何回かSQL Serverを再起動してみましたが、うまくいきませんでした。また、DDASが使用していた_C:\_ドライブ上の元のファイルとそのトランザクションログが削除されていることも確認しました。このエラーメッセージ以外にDDASの痕跡はありません。また、DDASへの接続が開いていないため、これらの再起動が何とか続いた可能性があります。

重要な場合:SQL Server Enterprise 2014 x64

1
Brandon

以下のクエリから正しく理解できる場合

ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'DDAS_log', FILENAME = N'G:\DDAS_log.ldf')

tempdb[DDAS] ここに..

また、CREATE DATABASEクエリ

IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'DDAS')
BEGIN
    CREATE DATABASE [DDAS]
    CONTAINMENT = NONE
    ON  PRIMARY 
        ( NAME = N'DDAS', FILENAME = N'E:\DDAS.mdf' , SIZE = 1024000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024000KB  ) 
    LOG ON      
        ( NAME = N'DDAS', FILENAME = N'G:\DDAS_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    END
GO

LOG ONではなく、ログファイルの論理ファイル名の上が間違っているようです
NAME = N'DDAS '....)NAME = N'DDAS_log '..

詳しくは CREATE DATABASE を参照してください

3
KASQLDBA