web-dev-qa-db-ja.com

自動拡張。プライマリデータファイルと追加データファイル

私のデータベースはすべて自動拡張を使用しており、プライマリMDF=ファイルが一定の割合で増加します。ただし、サードパーティアプリケーションのデータベースの1つは、.NDFファイルを追加することで増加します。

このオプションはどこに設定されていますか?自動拡張の設定を見ると、パーセンテージまたはxMBで拡張するかどうかを選択するオプションと、制限付きまたは無制限に拡張するオプションがあります。ただし、プライマリMDFを拡張するか、NDFを追加して拡張するかはわかりません。

そして、これらのNDFファイルをプライマリMDFに結合する方法はありますか?

ありがとう!

RZ

3
Robert Zeurunkl

上記の@JonSeigelのコメントで述べたように、これはSQL Serverアクションではありません。サードパーティのアプリケーションが自分でこれを行っているか、誰かが追加のデータファイルを手動で作成している必要があります。

そして、これらのNDFファイルをプライマリMDFに結合する方法はありますか?

探しているのはDBCC SHRINKFILE(YourDataFileName, EMPTYFILE);で、YourDataFileNameは* .ndfファイルの論理名です。これが行うことは、それを含むファイルグループ内の他のデータファイルに十分なスペースがある場合、すべてのデータを同じファイルグループ内の他のデータファイルに移動してデータベースデータファイルを空にすることです。その後、それを削除できます。

このBOLリファレンスを参照してください。 DBCC SHRINKFILE

同じページに、私が逐語的に引用する例があります(それはまさにあなたがやろうとしていることのようです[注:以下の抜粋は、上記のリンクからの抜粋])。

D。ファイルを空にする

次の例は、ファイルを空にしてデータベースから削除できるようにする手順を示しています。この例では、データファイルが最初に作成され、ファイルにはデータが含まれていると想定しています。

USE AdventureWorks2012; 
GO

-- Create a data file and assume it contains data. 
ALTER DATABASE AdventureWorks2012  
ADD FILE (
    NAME = Test1data,
    FILENAME = 'C:\t1data.ndf',
    SIZE = 5MB
    ); 
GO

-- Empty the data file. 
DBCC SHRINKFILE (Test1data, EMPTYFILE); 
GO

-- Remove the data file from the database. 
ALTER DATABASE AdventureWorks2012 
REMOVE FILE Test1data; 
GO
3
Thomas Stringer

しかし、プライマリMDFを拡張するか、NDFを追加して拡張するかを示すものは何もありません。

追加を明示的に指定しない限り、これを可能にするSQL Serverのネイティブ[〜#〜] no [〜#〜]オプションがあります Alter database コマンドを使用した追加のセカンダリファイル(.ndf)。

詳細 ファイルとファイルグループのアーキテクチャデータベースファイルとファイルグループ

これらのNDFファイルをプライマリMDFに結合する方法はありますか?

はいDBCC SHRINKFILE ('ndf-secondary-file-name', EMPTYFILE)を使用

注:あるFILEGROUPから別のFILEGROUPにデータを移動できます。ただし、同じファイルグループの場合、PROPORTIONAL FILLアルゴリズムを使用して(つまり、空き領域が最も多いファイルからエクステントを割り当てて)、同じファイルグループに複数のファイルがある場合、SQL Serverはデータの移動先を管理します。

ここで、別のファイルグループに属しているセカンダリファイルがある場合、何ですか

次に、クラスターインデックスを持つテーブルを新しいファイルグループに移動するには、ALTER TABLEを使用して、クラスターインデックスをホストするファイルグループ名を指定します。次に、REBUILD INDEXを発行すると、再構築されたインデックスが新しいファイルグループに作成されます。クラスターインデックスなしでテーブルを移動するには、最も簡単なオプションは、移動中にテーブルにクラスターインデックスを定義し、移動の完了後にそれを削除することです。

どのテーブルとインデックスがどのファイルグループとその物理的な場所に属しているかについて知りたい場合は、以下のクエリを使用してください。

select distinct
        idx.name as IndexName
        ,object_name(idx.id) as TableName
        ,fil.name as FileGroup
        ,dbf.physical_name as PhysicalFileName
    from sys.tables tb
         inner join sys.sysindexes idx
         on idx.id = tb.object_id 
         and tb.type = 'U' and idx.name is not null
         inner join sys.filegroups fil
         on fil.data_space_id = idx.groupid
         inner join sys.database_files dbf
         on fil.data_space_id = dbf.data_space_id
         inner join sys.data_spaces dsp
         on fil.data_space_id = dsp.data_space_id
3
Kin Shah