Skip to main content
TechNet

تطوير مهارات ادارة قواعد البيانات باستخدام الاكواد الديناميكية ( 1/ 100 )

Shehap El-Nagar

نيسان/أبريل عام 2015

بعد النجاح الذي حققته سلسلة مقالات "SQL Server Administration skills jump start" في الكشف عن خبرات و مهارات عديدة في كيفية ادراة العديد من المهام اليومية في قواعد البيانات بشكل سريع و سلس و دقيق سواء في مجال ادراة قواعد بيانات البيئة الحية (Database Administration) أو مجال تحليل و تصميم قواعد البيانات (Database Analysis and Architecture) لذا بناء على طلب العديد من القراء فقد بدأت بترجمة هذه السلسلة من المقالات إلى اللغة العربية لضمان انتشاراها و وصولها إلى كل متخصص لقواعد البيانات في الوطن العربي.

هذه السلسلة ترمي إلى توضيح احدث الأساليب و الممارسات في ادارة و تحليل و تصميم قواعد البيانات من خلال حزم الاكواد الديناميكية DMV (Dynamic Management views) فضلا عن حزم اكواد ال CMD (Command Prompt) و حزم الأكواد المتطورة (CMDlet) او ال (Powershell) التي سوف تلعب دور هائل في تبسيط مهام العمل و اداءها بشكل اسرع و اسهل مما لا يدع اي مجال للشك أن حجم انجازات العمل سوف يتضعاف لأن عادة ما تمثل قواعد البيانات الجزء الأعظم من تصميم و ادارة اي منظومة الكترونية .

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

  1. نقل قواعد البيانات من خادم A إلى خادم من غير اي وقت استقطاع أو  خسارة بيانات حتى..!
  2. نسخ كل خصائص و اعدادت قواعد البيانات الخاصة التي لم نسخهم تلقائيا خلال عملية التخزين و الاسترجاع السابق ذكرها  مثل :
  3. RCSI (Read committed snapshot isolation level using row versioning)
    Service brokers
    Encryption keys and certificates

  4. نسخ كل حسابات المحرك (SQL logins) مع  الاخذ في الاعتبار مستخدمينهم على كل قواعد البيانات و الخادم كذلك ايضا فضلا عن كلمة السر ( ان كان الحساب غير موصول بالدليل النشط ).
  5. نسخ كل مكونات التقارير (+.rds .rdl) بين الاصدارات المختلفة حيث لا يمكن تنفيذ عملية التخزين و الاسترجاع لقواعد بيانات خدمة التقارير
  6.  (Reporting Service) ألا وهما reportserver and reportservertemp DBs.

  7. نسخ كل المهام المجدولة زمنيا لأداء وظائف بيزنس بالاضافة إلى بيانات المسئولين عن متابعة هذه المهام و مراقبتها عبر الاميل.
  8. نسخ كل اعدادت البريد الالكتروني المستخدمة في ارسال التنبيهات و الانذرات المختلفة.
  9. نسخ كل بيانات الروابط مع خوادم قواعد البيانات الاخرى بالاضافة إلى ترميزات خاصة لأسماء الخوادم ان وجدت.
  10. نسخ كل الاعدادات الخاصة بالخادم نفسه مثل ال :
  11. CLR , CPU parallelism, Replication size , Network packet size , optimize for ad hoc workloads

  12. نسخ كل اعدادات تزامن البيانات بين الخوادم (Replication).
  13. نسخ كل اعدادات ال DTC للخوادم الفيزيائية و المزدوجة (Local and clustered DB servers).
  14. في هذا المقال سوف ابدأ بالجزء الأول و هو الأهم في عمليات النقل و الدمج :

    اولا: نقل قواعد البيانات من خادم A إلى خادم من غير اي وقت استقطاع أو  خسارة بيانات حتى ..! موضح ادناه الخطوات التفصيلية مدعمة بالأكواد :

  15. يجب مشاركة مجلد للتخزين بحيث يكون متاحا للوصول و الاستخدام بسهولة من قبل الخادمين A و B من اجل تسريع عملية الحفظ و الاسترجاع كما هو موضح ادناه:
[sql]

-- At server A
EXEC master.dbo.sp_addumpdevice  @devtype = N'disk', @logicalname = N'AdventureWorks2012_bak', @physicalname = N'C:\Shehap\Database\SQL Server 2014\DB_backup\AdventureWorks2012_bak.bak'
GO

-- At server B
EXEC master.dbo.spaddumpdevice  @devtype = N'disk', @logicalname = N'AdventureWorks2012_bak', @physicalname = N'\\serverA\c$\DB_backup\AdventureWorks2012_bak.bak'

[/sql]
  1. تنفيذ عمليىة حفظ كامل لملف البيانات ( Full backup  )
[sql]

BACKUP DATABASE [AdventureWorks2012] TO  [AdventureWorks2012_bak] WITH NOFORMAT, INIT,  NAME = N'AdventureWorks2012-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
[/sql]

أو حتى باستخدام تكنولوجيا الاكواد الديناميكة (DMV) المذكورة انفا في سلسلة مقالاتي :

“How to administrate your databases with a single click ..?”

  1. استرجاع ملفات التخزين الكامل (  Full backup ) مع وضع التهيئة للاسترجاع (NON-Recovery mode ):
[sql]

RESTORE DATABASE [AdventureWorks2012] FROM  [AdventureWorks2012_bak] WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  REPLACE,  STATS = 5

[/sql]
  1. تهيئة قواعد البيانات على الخادم A لكي تصبح في وضع القراءة فقط
[sql]


select 'ALTER DATABASE ['+NAME+'] SET  READ_ONLY WITH NO_WAIT'

from sys.databases where database_id>4 and name <>'distribution'



[/sql]

  1. تنفيذ عمليىة حفظ جزئي لملف البيانات ( Differential Backup  ):
[sql]


BACKUP DATABASE [AdventureWorks2012] TO  [AdventureWorks2012_bak] WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N'AdventureWorks2012-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

[/sql]

أو حتى يمكنا تنفيذ هذا باستخدام تكنولوجيا الاكواد الديناميكة ( DMV ) المذكورة انفا في سلسلة مقالاتي :

“How to administrate your databases with a single click ..?”

[sql]

RESTORE DATABASE [AdventureWorks2012] FROM  [AdventureWorks2012_bak] WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  REPLACE,  STATS = 5
[/sql]
  1. حينذاك كل خوادم قواعد البيانات سيتم استرجاعها في وضع قراءة فقط كما كانت عليه قبل الاسترجاع لذا يجب ارجاعهم مرة اخرة للوضع الطبيعي " قراءة و كتابة " على النحو التالي:
[sql]

select 'ALTER DATABASE ['+NAME+'] SET  READ_WRITE WITH NO_WAIT'

from sys.databases where database_id>4 and name <>'distribution'

[/sql]

كما هو معتاد سوف تحصل على مخرجات التنفيذ الموضحة ادناه لكي يتم نسخها و نقلها إلى الخادم

بهذا ناتي إلى نهاية المحور الأول لكن قبل ان انتهي من هذه المقالة سوف انتقل إلى المحور الثاني من عمليات النقل و الدمج ألا و هو :

ثانيا : نسخ كل خصائص و اعدادت قواعد البيانات الخاصة التي لم نسخهم تلقائيا خلال عملية التخزين و الاسترجاع السابق ذكرها :

  1. RCSI (Read committed snapshot isolation level using row versioning)
  2. Service brokers
  3. Encryption keys and certificates

 

  1. ابتداءا من RCSI (Read committed snapshot isolation level using row versioning)

في البداية يجب ان تجد مجموعة قواعد البيانات التي تملك هذه الخاصية باستخدام الكود القادم :

[sql]

select name,

'
EXEC sp_resetstatus ''' + name + '''
GO
ALTER DATABASE ' + name + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE
go
ALTER DATABASE ' + name + ' SET READ_COMMITTED_SNAPSHOT ON;
go
ALTER DATABASE ' + name + ' SET MULTI_USER
go
'
as 'Run on Destination Server'

from sys.databases
where is_read_committed_snapshot_on = 1

and database_id>4 and name <>'distribution'

[/sql]

ثم قم بنسخ مخرجات التنفيذ لكي يتم تنفيذها على الخادم الآخر B

[sql]

EXEC sp_resetstatus 'AdventureWorks2012'
GO
ALTER DATABASE ReportServer$TEST2014 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
go
ALTER DATABASE ReportServer$TEST2014 SET READ_COMMITTED_SNAPSHOT ON;
go
ALTER DATABASE ReportServer$TEST2014 SET MULTI_USER
go

[/sql]
  1. نفس الشي يمكنك تطبيقه بالنسبة إلى خاصية Service broker : يمكنك تطبيق الكود التالي :
[sql]
Select name
,
'
USE master ;
GO

ALTER DATABASE [' + name + '] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

ALTER DATABASE ' + name + ' SET ENABLE_BROKER ;
GO

ALTER DATABASE [' + name + '] SET  MULTI_USER WITH ROLLBACK IMMEDIATE
GO
'
 from sys.databases where is_broker_enabled = 1
and database_id>4 and name <>'distribution'

[/sql]

- حينذاك تطبيق مخرجات الكودس على الخادم B

[sql]

USE master ;
GO

ALTER DATABASE [AdventureWorks2012] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

ALTER DATABASE AdventureWorks2012 SET ENABLE_BROKER ;
GO

ALTER DATABASE [AdventureWorks2012] SET  MULTI_USER WITH ROLLBACK IMMEDIATE
GO

[/sql]

أبقوا معنا على اتصال في المقالة القادمة لمعرفة المزيد و المزيد من حزم الأكواد الدينامكية

يمكنك التواصل معنا من خلال

Facebook Page LinkedIn Group, Twitter, Networked Blogs, Facebook Group, Youtube Channel