عدم تكرار عملية التقليص على قاعدة بيانات متطابقة عند استخدام النسخ المتطابق لقاعدة البيانات في SQL Server 2005

الأعراض

عند استخدام النسخ المتطابق لقاعدة البيانات في Microsoft SQL Server 2005، نشر SQL Server تلقائياً أية تغييرات على قاعدة البيانات الرئيسي إلى قاعدة بيانات متطابقة. ومع ذلك، إذا قمت بتشغيل DBCC SHRINKDATABASE عبارة أو عبارات DBCC SHRINKFILE لتقليص قاعدة البيانات الأساسي، عملية التقليص ولا يتكرر على قاعدة بيانات متطابقة.

السبب

نسخ قاعدة البيانات تغيير أحجام الملفات الفعلية إلا بعد نقطة.

الحل البديل

الطريقة الأولى

للتغلب على هذه المشكلة، قم بتشغيل العبارات التالية لإنشاء إجراء مخزن جديد في قاعدة البيانات الرئيسية. وبعد ذلك، استخدم هذا الإجراء المخزن لتقليص قاعدة البيانات الأساسي بدلاً من تشغيل عبارة DBCC SHRINKDATABASE أو عبارة DBCC SHRINKFILE.
     use master       go
if object_id ('sp_shrink_mirrored_database', 'P') is not null
drop proc sp_shrink_mirrored_database
go
create procedure sp_shrink_mirrored_database @dbname sysname, @target_percent int = null
as
begin
declare @filename sysname
declare @filesize int
declare @sql nvarchar(4000)

if @target_percent is null
dbcc shrinkdatabase (@dbname)
else
dbcc shrinkdatabase (@dbname, @target_percent)
declare c cursor for
select [name], [size] from sys.master_files where type=0 and database_id = db_id (@dbname)
open c
fetch next from c into @filename, @filesize
while @@fetch_status=0
begin
set @filesize=(@filesize+1)*8
set @sql='alter database [' + @dbname + '] modify file ( name='
+ @filename + ', size=' + cast(@filesize as nvarchar) + 'kb )'
execute sp_executesql @sql
fetch next from c into @filename, @filesize
end
close c
deallocate c
end
go

على سبيل المثال، إذا كنت تريد تقليص قاعدة بيانات mydb ، تشغيل العبارة التالية.
EXEC sp_shrink_mirrored_database 'mydb'

الطريقة الثانية

إصدار نقطة اختبار يدوي بعد تقليص ملفات رأس المال.

الحالة

أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في قسم "ينطبق على".
خصائص

رقم الموضوع: 937531 - آخر مراجعة: 14‏/01‏/2017 - المراجعة: 1

تعليقات