私のデータベースはすべて自動拡張を使用しており、プライマリMDF=ファイルが一定の割合で増加します。ただし、サードパーティアプリケーションのデータベースの1つは、.NDFファイルを追加することで増加します。
このオプションはどこに設定されていますか?自動拡張の設定を見ると、パーセンテージまたはxMBで拡張するかどうかを選択するオプションと、制限付きまたは無制限に拡張するオプションがあります。ただし、プライマリMDFを拡張するか、NDFを追加して拡張するかはわかりません。
そして、これらのNDFファイルをプライマリMDFに結合する方法はありますか?
ありがとう!
RZ
上記の@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
しかし、プライマリ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