5

サイズが最大4GBのデータベースがあります。スキーマと基本データのみを含むデータベースが必要なため、そのデータベースをコピーして99%のデータを削除しました(ほとんどの場合、静的データが保持されます)。

現在の問題は、MDFファイルのサイズがまだ最大4GBであるということです。(たとえば、これを使用して)テーブルのサイズを読み取ると、合計で20MB未満になります。ログファイルはすでに縮小されていますが、実行したスクリプトはどれもDBファイルを縮小するために機能しませんでした。

注:私は通常これを行いませんが、今回はデータベースを縮小する必要があります(推奨されていないことはわかっています)

編集:+有用な情報

指示:

exec sp_spaceused

出力:

database_name       database_size   unallocated_space
AccudemiaEmptyDb    3648.38 MB      4.21 MB

指示:

select object_name(id) as objname, SUM(dpages*8) as dpages, COUNT(*) as cnt
from sysindexes
group by id
order by dpages desc

出力:

object_name(id)            sum(dpages*8)    count(*)
sysdercv                   675328           1
sysxmitqueue               359776           1
sysdesend                  72216            1
sysconvgroup               47704            1
sysobjvalues               4760             5
sec_OperationAccessRule    3472             5
sec_PageAccessRule         2232             5
syscolpars                 656              11
AuditObjects               624              2
sysmultiobjrefs            408              5
HelpPage                   376              8
sysschobjs                 352              9
syssoftobjrefs             328              7
sysidxstats                272              10
sysrscols                  200              1
Translation                160              3
sysallocunits              128              3
sysiscols                  128              8
syssingleobjrefs           96               5
sysrowsets                 80               4
4

5 に答える 5

3

ファーストラン

exec sp_spaceused

データベース内で、回復できる量を確認します。未使用のスペースが表示されない場合は、スペースの割り当てを誤解しています。

これは私が通常私のtest1dbを縮小する方法であり、それは私がすべてのStackOverflowクエリを再生する場所です。3GBから8MBにカットしました。

use test1;
exec sp_spaceused;
checkpoint;
alter database test1 set recovery simple;
alter database test1 set recovery full;
dbcc shrinkfile(1,1);
dbcc shrinkfile(2,1);

価値があるので、これは私がテーブルごとに割り当てサイズをチェックするために使用するものです。たぶんあなたは間違ってチェックしていましたか?これにはインデックスが含まれます。

select object_name(id), SUM(dpages*8), COUNT(*)
from sysindexes
group by id

編集-問題に編集されたスペースを占有しているテーブルに基づく

マーティンのコメントは答えに移動しました:関係するテーブルはサービスブローカーの会話です。http://social.msdn.microsoft.com/Forums/en/sqlservicebroker/thread/03180f45-cd83-4913-8f0e-3d8306f01f06 リンクには回避策があります。

別の方法があります。すでに削減されたデータベースを使用する

  1. スクリプトの生成-すべてのオブジェクト-すべてのオプション(キー、フルテキスト、デフォルトなど)を含める
  2. データをスクリプト化するオプションを含める
  3. 新しいデータベースを作成し、スクリプトからデータを入力します

(記憶から、SSSBキューは生成データスクリプトに含まれていません)

于 2011-03-02T20:54:32.473 に答える
2

編集:スペースはまだどこかに割り当てられているようです。このクエリを試すことができますか(に基づくsp_spaceused)?

select OBJECT_NAME(p.object_id),
 reservedpages = sum(a.total_pages),
    usedpages = sum(a.used_pages),
    pages = sum(
            CASE
                -- XML-Index and FT-Index internal tables are not considered "data", but is part of "index_size"
                When it.internal_type IN (202,204,211,212,213,214,215,216) Then 0
                When a.type <> 1 Then a.used_pages
                When p.index_id < 2 Then a.data_pages
                Else 0
            END
        )
from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id
    left join sys.internal_tables it on p.object_id = it.object_id
GROUP BY p.object_id
with rollup
于 2011-03-02T20:53:52.130 に答える
2

皆さん、そして主にリチャードにすべての情報をありがとう!

この問題を解決するには、サービスを削除して再作成する必要がありました。

DROP SERVICE [//Audit/DataWriter] 
GO

CREATE SERVICE [//Audit/DataWriter] 
    AUTHORIZATION dbo 
ON QUEUE dbo.TargetAuditQueue ([//Audit/Contract])

それをしたら、データベースは5GBでした!しかし、今回は質問に入れた2番目のクエリで、最初の結果としてsysxmitqueueが表示されました。インターネットをもう少し掘り下げて、大きなテーブルを一掃することができました。

ALTER DATABASE [your_database] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [your_database] SET NEW_BROKER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [your_database] SET MULTI_USER
GO

次に、DBCC SHRINKFILEを実行すると、これですべてです。=)今はたった40MBです

君たちありがとう!

于 2011-03-03T12:40:50.977 に答える
0

DBCCコマンドを使用して、データベースを縮小できます。

DBCCSHRINKDATABASEおよびDBCCSHRINKFILEへの参照は次のとおりです。

于 2011-03-02T20:08:18.963 に答える
0

データベースをコピーするとどうなりますか?データベースを右クリックしてタスクを実行し、データベースをコピーします。試してみるのは簡単かもしれないと思っただけです。

于 2011-03-02T21:26:42.280 に答える