sql-server - كيفية - نقل قاعدة بيانات sql server من جهاز الى اخر




إصدار قاعدة بيانات SQL Server (20)

1+ لكل من أوصى بأدوات RedGate ، مع توصية إضافية وتحذير.

يحتوي SqlCompare أيضًا على واجهة برمجة تطبيقات موثقة بشكل لائق: بحيث يمكنك ، على سبيل المثال ، كتابة تطبيق وحدة التحكم الذي يقوم بمزامنة مجلد البرامج النصية التي يتم التحكم بها في المصدر الخاص بك مع قاعدة بيانات اختبار تكامل CI عند تسجيل الوصول ، بحيث عندما يقوم شخص ما بالتحقق من تغيير المخطط في مجلد البرامج النصية الخاصة به يتم نشره تلقائيًا مع تغيير رمز التطبيق المطابق. هذا يساعد على سد الفجوة مع المطورين الذين يسعون إلى نشر التغييرات في ديسيبل المحلية حتى DB تطوير مشترك (حوالي نصفنا ، على ما أظن :)).

التحذير هو أنه باستخدام حل برمجي أو غير ذلك ، فإن أدوات RedGate سلسة بما فيه الكفاية بحيث يسهل نسيانها حقائق SQL الكامنة وراء التجريد. إذا قمت بإعادة تسمية جميع الأعمدة في جدول ، فلن يكون لدى SqlCompare أي وسيلة لتعيين الأعمدة القديمة إلى الأعمدة الجديدة وسيقوم بإسقاط جميع البيانات الموجودة في الجدول. سيؤدي ذلك إلى ظهور تحذيرات لكني رأيت أشخاصًا ينقرون فوق ذلك. أعتقد أن هناك نقطة عامة تستحق القيام بها ، وهي أنه لا يمكنك فقط أتمتة إصدار DB وترقيتها حتى الآن - فالتجريدات متسربة للغاية.

أريد الحصول على قواعد البيانات الخاصة بي تحت التحكم في الإصدار. هل لديها أي نصيحة أو المقالات الموصى بها لتبدأ لي؟

alumb دائمًا الحصول على بعض البيانات على الأقل (كما يذكر alumb : أنواع المستخدمين والمسؤولين). سأحتاج غالبًا أيضًا إلى مجموعة كبيرة من بيانات الاختبار التي تم إنشاؤها لقياس الأداء.


أنا أيضا استخدام نسخة في قاعدة البيانات المخزنة عبر قاعدة بيانات ممتدة خصائص الإجراءات. يحتوي طلبي على نصوص لكل خطوة إصدار (على سبيل المثال ، الانتقال من 1.1 إلى 1.2). عند النشر ، ينظر إلى الإصدار الحالي ، ثم يقوم بتشغيل البرامج النصية واحدة تلو الأخرى حتى يصل إلى آخر إصدار للتطبيق. لا يوجد برنامج نصي يحتوي على الإصدار "النهائي" المستقيم ، حتى النشر على قاعدة بيانات نظيفة يقوم بالنشر عبر سلسلة من خطوات الترقية.

ما أود إضافته الآن هو أنني رأيت قبل يومين عرضًا تقديميًا في حرم MS حول إصدار VS DB الجديد والقادم. تم التركيز في العرض التقديمي بشكل خاص على هذا الموضوع وقد فُجرت من الماء. يجب عليك بالتأكيد التحقق من ذلك ، وتركز المرافق الجديدة على الحفاظ على تعريف المخطط في البرامج النصية T-SQL (CREATEs) ، محرك دلتا وقت التشغيل لمقارنة مخطط النشر مع مخطط محدد والقيام دلتا ALTERs والتكامل مع تكامل شفرة المصدر ، حتى بما في ذلك MSBUILD التكامل المستمر لقطرات البناء الآلي. سيحتوي الهبوط على نوع ملف جديد ، ملفات .dbschema ، التي يمكن نقلها إلى موقع النشر ويمكن لأداة سطر الأوامر القيام بـ "deltas" الفعلية وتشغيل النشر. لديّ مدونة حول هذا الموضوع مع روابط لتنزيلات VSDE ، يجب عليك التحقق منها: http://rusanu.com/2009/05/15/version-control-and-your-database/


أولاً ، يجب عليك اختيار نظام التحكم في الإصدار المناسب لك:

  • نظام مركزي للتحكم في الإصدار - نظام قياسي حيث يقوم المستخدمون بتسجيل الخروج / تسجيل الوصول قبل / بعد العمل على الملفات ، ويتم حفظ الملفات في خادم مركزي واحد

  • نظام التحكم في الإصدار الموزع - نظام يتم فيه استنساخ المستودع ، وكل نسخة هي في الواقع نسخة احتياطية كاملة من المستودع ، لذلك في حالة تعطل أي خادم ، يمكن استخدام أي مستودع مستنسخ لاستعادته بعد اختيار النظام المناسب لاحتياجاتك ، ستحتاج إلى إعداد المستودع الذي يمثل جوهر كل نظام للتحكم في الإصدار. كل هذا موضح في المقالة التالية: http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding-source-control-basics/

بعد إعداد مستودع ، وفي حالة نظام التحكم في الإصدار المركزي ، مجلد العمل ، يمكنك قراءة هذه المقالة . يوضح كيفية إعداد التحكم بالمصادر في بيئة التطوير باستخدام:

  • مزود إدارة خادم SQL عبر مزود MSSCCI ،

  • Visual Studio و SQL Server أدوات البيانات

  • أداة الطرف الثالث ApexSQL التحكم المصدر

إذا كان لديك قاعدة بيانات صغيرة وتريد إصدار الأمر بالكامل ، فقد يساعد هذا البرنامج النصي الدفعي . يقوم بفصل وضغط وفحص ملف MDF لقاعدة بيانات MSSQL في Subversion.

إذا كنت تريد غالبًا إصدار مخططك ولديك فقط كمية صغيرة من البيانات المرجعية ، يمكنك استخدام SubSonic Migrations للتعامل مع ذلك. الفائدة هناك هي أنه يمكنك بسهولة الانتقال لأعلى أو لأسفل إلى أي إصدار محدد.


إنها طريقة جيدة لحفظ البرامج النصية لقاعدة البيانات في التحكم في الإصدار باستخدام البرامج النصية للتغيير بحيث يمكنك ترقية أي قاعدة بيانات واحدة لديك. قد ترغب أيضًا في حفظ المخططات لإصدارات مختلفة حتى تتمكن من إنشاء قاعدة بيانات كاملة دون الحاجة إلى تطبيق جميع البرامج النصية للتغيير. يجب أن تتم معالجة النصوص تلقائيًا حتى لا تضطر إلى القيام بعمل يدوي.

أعتقد أنه من المهم أن يكون لديك قاعدة بيانات منفصلة لكل مطور وعدم استخدام قاعدة بيانات مشتركة. بهذه الطريقة ، يمكن للمطورين إنشاء حالات اختبار ومراحل التطوير بشكل مستقل عن المطورين الآخرين.

يجب أن يكون لأداة التشغيل الآلي وسائل للتعامل مع البيانات الأولية لقاعدة البيانات ، والتي تخبر ما هي قواعد البيانات في حالة التطوير وأي الجداول تحتوي على بيانات يمكن التحكم في الإصدار وما إلى ذلك.


الحل النموذجي هو تفريغ قاعدة البيانات حسب الضرورة واحتياطي تلك الملفات.

بناءً على نظام التطوير لديك ، قد يكون هناك مكونات إضافية مفتوحة المصدر. المتداول رمز الخاص بك للقيام بذلك عادة ما تكون تافهة إلى حد ما.

ملاحظة: قد ترغب في عمل نسخة احتياطية من تفريغ قاعدة البيانات بدلاً من وضعها في التحكم في الإصدار. يمكن أن تحصل الملفات بسرعة كبيرة في التحكم في الإصدار ، وتتسبب في أن يصبح نظام التحكم في المصدر بأكمله بطيئًا (أتذكر قصة رعب CVS في الوقت الحالي).


تحقق من DBGhost DBGhost . لقد استخدمت بطريقة آلية لمدة عامين الآن ويعمل بشكل رائع. إنها تتيح للبنايات DB أن تحدث إلى حد كبير مثل حدوث بناء Java أو C ، باستثناء قاعدة البيانات. تعرف قصدي.


في تجربتي الحل مزدوج:

  1. تحتاج إلى معالجة التغييرات في قاعدة بيانات التطوير التي يتم تنفيذها بواسطة عدة مطورين أثناء التطوير.

  2. تحتاج إلى معالجة ترقيات قاعدة البيانات في مواقع العملاء.

من أجل التعامل مع # 1 ستحتاج إلى أداة فرق / دمج قاعدة بيانات قوية. يجب أن تكون أفضل أداة قادرة على إجراء دمج تلقائي قدر الإمكان مع السماح لك بحل التعارضات غير المعالجة يدويًا.

يجب أن تتعامل الأداة المثالية مع عمليات الدمج عن طريق استخدام خوارزمية دمج ثلاثية الاتجاهات تأخذ في الاعتبار التغييرات التي تم إجراؤها في قاعدة بيانات THEIRS وقاعدة MINE المتعلقة بقاعدة بيانات BASE.

لقد كتبت أداة تجارية توفر دعم دمج يدوي لقواعد بيانات SQLite وأضيف حاليًا دعمًا لخوارزمية دمج ثلاثية الاتجاه لـ SQLite. التحقق من ذلك في http://www.sqlitecompare.com

من أجل التعامل مع # 2 ستحتاج إلى إطار عمل للترقية.

تتمثل الفكرة الأساسية في تطوير إطار عمل للترقية التلقائية يعرف كيفية الترقية من مخطط SQL موجود إلى مخطط SQL الأحدث ويمكنه إنشاء مسار ترقية لكل تثبيت DB موجود.

راجع مقالتي حول هذا الموضوع في http://www.codeproject.com/KB/database/sqlite_upgrade.aspx للحصول على فكرة عامة عما أتحدث عنه.

حظا طيبا وفقك الله

ليرون ليفي


كان لدينا حاجة إلى إصدار قاعدة بيانات SQL الخاصة بنا بعد أن انتقلنا إلى منصة x64 وكسر الإصدار القديم لدينا مع الهجرة. لقد كتبنا تطبيق C # الذي استخدم SQLDMO لتعيين كافة كائنات SQL إلى مجلد:

                Root
                    ServerName
                       DatabaseName
                          Schema Objects
                             Database Triggers*
                                .ddltrigger.sql
                             Functions
                                ..function.sql
                             Security
                                Roles
                                   Application Roles
                                      .approle.sql
                                   Database Roles
                                      .role.sql
                                Schemas*
                                   .schema.sql
                                Users
                                   .user.sql
                             Storage
                                Full Text Catalogs*
                                   .fulltext.sql
                             Stored Procedures
                                ..proc.sql
                             Synonyms*
                                .synonym.sql
                             Tables
                                ..table.sql
                                Constraints
                                   ...chkconst.sql
                                   ...defconst.sql
                                Indexes
                                   ...index.sql
                                Keys
                                   ...fkey.sql
                                   ...pkey.sql
                                   ...ukey.sql
                                Triggers
                                   ...trigger.sql
                             Types
                                User-defined Data Types
                                   ..uddt.sql
                                XML Schema Collections*
                                   ..xmlschema.sql
                             Views
                                ..view.sql
                                Indexes
                                   ...index.sql
                                Triggers
                                   ...trigger.sql

سيقوم التطبيق بعد ذلك بمقارنة الإصدار المكتوب حديثًا بالإصدار المخزن في SVN ، وإذا كانت هناك اختلافات فسوف يقوم بتحديث SVN. لقد قررنا أن إدارة العملية مرة واحدة في الليلة كانت كافية لأننا لا نجري العديد من التغييرات على SQL. يتيح لنا تتبع التغييرات على جميع الكائنات التي نهتم بها بالإضافة إلى أنه يسمح لنا بإعادة بناء مخططنا الكامل في حالة وجود مشكلة خطيرة.


كتب مارتن فاولر مقالتي المفضلة حول هذا الموضوع ، http://martinfowler.com/articles/evodb.html . اخترت عدم وضع مقالب المخطط تحت التحكم في الإصدار كما يقترح الآخرون لأنني أريد طريقة سهلة لترقية قاعدة بيانات الإنتاج الخاصة بي.

بالنسبة لتطبيق الويب حيث سيكون لدي مثيل قاعدة بيانات إنتاج واحد ، أستخدم أسلوبين:

البرامج النصية ترقية قاعدة البيانات

البرامج النصية لترقية قاعدة البيانات التسلسلية التي تحتوي على DDL اللازمة لنقل المخطط من الإصدار N إلى N + 1. (هذه موجودة في نظام التحكم في الإصدار الخاص بك.) جدول _version_history_ ، يشبه شيء ما

create table VersionHistory (
    Version int primary key,
    UpgradeStart datetime not null,
    UpgradeEnd datetime
    );

يحصل على إدخال جديد في كل مرة يتم فيها تشغيل برنامج نصي للترقية يتوافق مع الإصدار الجديد.

هذا يضمن أنه من السهل معرفة إصدار مخطط قاعدة البيانات الموجود وأنه يتم تشغيل البرامج النصية لترقية قاعدة البيانات مرة واحدة فقط. مرة أخرى ، هذه ليست مقالب قاعدة البيانات. بدلاً من ذلك ، يمثل كل برنامج نصي التغييرات اللازمة للانتقال من إصدار واحد إلى آخر. إنه البرنامج النصي الذي تقوم بتطبيقه على قاعدة بيانات الإنتاج الخاصة بك "لترقية".

المطور رمل التزامن

  1. برنامج نصي لنسخ قاعدة بيانات الإنتاج وتطهيرها وتقليصها. قم بتشغيل هذا بعد كل ترقية إلى قاعدة بيانات الإنتاج.
  2. برنامج نصي لاستعادة (والقرص ، إذا لزم الأمر) النسخ الاحتياطي على محطة عمل المطور. يقوم كل مطور بتشغيل هذا البرنامج النصي بعد كل ترقية إلى قاعدة بيانات الإنتاج.

تحذير: اختباراتي الآلية تعمل مقابل قاعدة بيانات صحيحة لكنها فارغة ، لذلك لن تتناسب هذه النصيحة مع احتياجاتك.


لا يتيح لك منتج مقارنة SQL من Red Gate إمكانية إجراء مقارنات على مستوى الكائن ، وإنشاء برامج نصية للتغيير من ذلك ، ولكنه يسمح لك أيضًا بتصدير كائنات قاعدة البيانات الخاصة بك إلى تسلسل هرمي للمجلدات مرتبة حسب نوع الكائن ، مع إنشاء واحد [اسم الكائن] .sql البرنامج النصي لكل كائن في هذه الدلائل. التسلسل الهرمي لنوع الكائن يشبه هذا:

\المهام
\الأمان
\ الأمن \ الأدوار
\ الأمن \ المخططات
\ الأمن \ المستخدمين
\الإجراءات المخزنة
\الجداول

إذا قمت بتفريغ البرامج النصية الخاصة بك إلى نفس الدليل الجذر بعد إجراء التغييرات ، فيمكنك استخدام هذا لتحديث SVN repo ، والاحتفاظ بسجل قيد التشغيل لكل كائن على حدة.


لجعل تفريغ نظام التحكم في التعليمات البرمجية المصدر أسرع قليلاً ، يمكنك معرفة الكائنات التي تغيرت منذ آخر مرة باستخدام معلومات الإصدار في sysobjects.

الإعداد: قم بإنشاء جدول في كل قاعدة بيانات تريد التحقق منها تدريجياً للاحتفاظ بمعلومات الإصدار من آخر مرة قمت فيها بالتحقق منها (فارغة في أول تشغيل). امسح هذا الجدول إذا كنت تريد إعادة فحص بنية البيانات بالكامل.

IF ISNULL(OBJECT_ID('last_run_sysversions'), 0) <> 0 DROP TABLE last_run_sysversions
CREATE TABLE last_run_sysversions (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

وضع التشغيل العادي: يمكنك الحصول على النتائج من sql ، وإنشاء نصوص sql للبرامج التي تهتم بها فقط ، ووضعها في عنصر تحكم مصدر تختاره.

IF ISNULL(OBJECT_ID('tempdb.dbo.#tmp'), 0) <> 0 DROP TABLE #tmp
CREATE TABLE #tmp (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

SET NOCOUNT ON

-- Insert the values from the end of the last run into #tmp
INSERT #tmp (name, id, base_schema_ver, schema_ver, type) 
SELECT name, id, base_schema_ver, schema_ver, type FROM last_run_sysversions

DELETE last_run_sysversions
INSERT last_run_sysversions (name, id, base_schema_ver, schema_ver, type)
SELECT name, id, base_schema_ver, schema_ver, type FROM sysobjects

-- This next bit lists all differences to scripts.
SET NOCOUNT OFF

--Renamed.
SELECT 'renamed' AS ChangeType, t.name, o.name AS extra_info, 1 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id
WHERE o.name <> t.name /*COLLATE*/
AND o.type IN ('TR', 'P' ,'U' ,'V')
UNION 

--Changed (using alter)
SELECT 'changed' AS ChangeType, o.name /*COLLATE*/, 
       'altered' AS extra_info, 2 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id 
WHERE (
   o.base_schema_ver <> t.base_schema_ver
OR o.schema_ver      <> t.schema_ver
)
AND  o.type IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT oi.name 
         FROM sysobjects oi INNER JOIN #tmp ti ON oi.id = ti.id
         WHERE oi.name <> ti.name /*COLLATE*/
         AND oi.type IN ('TR', 'P' ,'U' ,'V')) 
UNION

--Changed (actually dropped and recreated [but not renamed])
SELECT 'changed' AS ChangeType, t.name, 'dropped' AS extra_info, 2 AS Priority
FROM #tmp t
WHERE    t.name IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
AND  t.name IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Deleted
SELECT 'deleted' AS ChangeType, t.name, '' AS extra_info, 0 AS Priority
FROM #tmp t
WHERE NOT EXISTS (SELECT * FROM sysobjects o
                  WHERE o.id = t.id)
AND t.name NOT IN (  SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Added
SELECT 'added' AS ChangeType, o.name /*COLLATE*/, '' AS extra_info, 4 AS Priority
FROM sysobjects o
WHERE NOT EXISTS (SELECT * FROM #tmp t
                  WHERE o.id = t.id)
AND      o.type  IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
ORDER BY Priority ASC

ملاحظة: إذا كنت تستخدم ترتيب غير قياسي في أي من قواعد البيانات الخاصة بك ، فسوف تحتاج إلى استبدال /* COLLATE */ مع ترتيب قاعدة البيانات الخاصة بك. أي COLLATE Latin1_General_CI_AI


لقد كتبت هذا التطبيق منذ فترة ، http://sqlschemasourcectrl.codeplex.com/ والتي ستقوم بمسح MSFT SQL db الخاص بك في كثير من الأحيان كما تريد وتفريغ الكائنات الخاصة بك تلقائيا (الجداول ، وجهات النظر ، procs ، وظائف ، إعدادات SQL) في SVN. يعمل كالسحر. يمكنني استخدامه مع Unfuddle (والذي يتيح لي الحصول على تنبيهات على عمليات الإيداع)


لم تذكر أي تفاصيل حول البيئة أو القيود المستهدفة ، لذلك قد لا يكون هذا قابلاً للتطبيق بالكامل ... ولكن إذا كنت تبحث عن وسيلة لتتبع مخطط قاعدة بيانات متطور بفعالية ولا تتعارض مع فكرة استخدام روبي ، هجرات ActiveRecord هي ما يصل الزقاق الخاص بك.

تحدد عمليات الترحيل تحويلات قاعدة البيانات بطريقة برمجية باستخدام Ruby DSL؛ يمكن تطبيق كل تحويل أو (عادة) التراجع ، مما يسمح لك بالانتقال إلى إصدار مختلف من مخطط قاعدة بياناتك في أي وقت من الأوقات. يمكن التحقق من الملف الذي يحدد هذه التحولات في التحكم في الإصدار مثل أي جزء آخر من التعليمات البرمجية المصدر.

نظرًا لأن عمليات الترحيل جزءًا من ActiveRecord ، فإنها عادةً ما تجد استخدامها في تطبيقات Rails كاملة الحزمة ؛ ومع ذلك ، يمكنك استخدام ActiveRecord بشكل مستقل عن Rails بأقل جهد ممكن. انظر here للحصول على علاج أكثر تفصيلا لاستخدام هجرات AR خارج القضبان.


منذ فترة عثرت على وحدة VB bas التي تستخدم كائنات DMO و VSS للحصول على وحدة برمجية db بالكامل وإيقافها في VSS. لقد حولتها إلى VB Script ونشرتها here . يمكنك بسهولة إخراج مكالمات VSS واستخدام عناصر DMO لإنشاء جميع البرامج النصية ، ثم استدعاء SVN من نفس الملف الدفعي الذي يستدعي VBScript للتحقق منها؟

ديف ي


نستخدم DBGhost لإدارة قاعدة بيانات SQL الخاصة بنا. ثم تضع البرامج النصية الخاصة بك لإنشاء قاعدة بيانات جديدة في عنصر تحكم الإصدار الخاص بك ، وستقوم إما بإنشاء قاعدة بيانات جديدة أو ترقية أي قاعدة بيانات موجودة إلى المخطط في عنصر تحكم الإصدار. بهذه الطريقة ، لا داعي للقلق بشأن إنشاء برامج نصية للتغيير (على الرغم من أنه لا يزال بإمكانك القيام بذلك ، على سبيل المثال إذا كنت ترغب في تغيير نوع بيانات عمود وتحتاج إلى تحويل البيانات).


هذه هي واحدة من "المشاكل الصعبة" المحيطة بالتنمية. بقدر ما أعرف لا توجد حلول مثالية.

إذا كنت بحاجة فقط لتخزين بنية قاعدة البيانات وليس البيانات ، يمكنك تصدير قاعدة البيانات كاستعلامات SQL. (في Enterprise Manager: انقر بزر الماوس الأيمن فوق قاعدة البيانات -> إنشاء برنامج نصي SQL. أوصي بتعيين "إنشاء ملف واحد لكل كائن" في علامة التبويب "خيارات") ، ثم يمكنك إلزام هذه الملفات النصية بـ svn والاستفادة من وظائف فرق التسجيل وتسجيل svn.

لدي هذا مرتبطًا مع نص برمجي Batch يأخذ معلمات زوجين ويقوم بإعداد قاعدة البيانات. أضفت أيضًا بعض الاستعلامات الإضافية التي تُدخل البيانات الافتراضية مثل أنواع المستخدمين والمستخدم المسؤول. (إذا كنت تريد المزيد من المعلومات حول هذا الموضوع ، فأرسل شيئًا وأستطيع وضع البرنامج النصي في مكان ما)

إذا كنت بحاجة إلى الاحتفاظ بجميع البيانات أيضًا ، أوصي بالاحتفاظ بنسخة احتياطية من قاعدة البيانات واستخدام منتجات Redgate ( http://www.red-gate.com/ ) لإجراء المقارنات. أنها لا تأتي رخيصة ، لكنها تستحق كل بنس.


هنا في Red Gate ، نقدم أداة ، red-gate.com/products/SQL_Source_Control/index.htm ، والتي تستخدم تقنية SQL Compare لربط قاعدة البيانات الخاصة بك مع مستودع TFS أو SVN. تتكامل هذه الأداة في SSMS وتتيح لك العمل كما تفعل عادةً ، إلا أنها تتيح لك الآن الالتزام بالكائنات.

بالنسبة للنهج القائم على الترحيل (أكثر ملاءمة للنشر الآلي) ، نحن نقدم أتمتة تغيير SQL (المعروفة سابقًا باسم ReadyRoll) ، والتي تنشئ وتدير مجموعة من البرامج النصية الإضافية كمشروع Visual Studio.

في SQL Source Control ، من الممكن تحديد جداول البيانات الثابتة. يتم تخزين هذه في عنصر تحكم مصدر كـ عبارات INSERT.

إذا كنت تتحدث عن بيانات الاختبار ، فنوصيك إما بإنشاء بيانات اختبار باستخدام أداة أو عبر برنامج نصي لما بعد النشر تحدده ، أو يمكنك ببساطة استعادة نسخة احتياطية من الإنتاج إلى بيئة التطوير.


يجب أن تكون كل قاعدة بيانات تحت تحكم التعليمات البرمجية المصدر. ما ينقصنا هو أداة لتسجيل جميع كائنات قاعدة البيانات تلقائيًا - و "بيانات التكوين" - إلى الملف ، والتي يمكن إضافتها بعد ذلك إلى أي نظام تحكم مصدر. إذا كنت تستخدم SQL Server ، فإن الحل هنا هو: http://dbsourcetools.codeplex.com/ . إستمتع. - ناثان.


يمكنك أيضًا إلقاء نظرة على حل الهجرة. هذه تتيح لك تحديد مخطط قاعدة البيانات الخاصة بك في رمز C # ، ولف نسخة قاعدة البيانات الخاصة بك لأعلى ولأسفل باستخدام MSBuild.

أنا أستخدم حاليًا DbUp ، وهو يعمل بشكل جيد.






version-control