نص باورشيل لـ MSSQL

يمكن استخدام هذا النص لاستيراد ملفات SQL تزيد أعمارها عن 20 دقيقة تلقائيًا إلى قاعدة بيانات MSSQL. وهو مفيد إذا قمت بتمكين تسجيل نص SQL للتكوينات عالية الأداء. لتنفيذ هذا النص، يجب عليك حفظه بامتداد .ps1، وتمكين تنفيذ نصوص باورشيل لنظام ويندوز في محرر سياسة المجموعة (أو يجب تنفيذ النص كمسؤول).

الفيديو 1 - كيفية استخدام نص باورشيل في قاعدة بيانات MSSQL (درس تعليمي بالفيديو)

قم بإنشاء جدول MSSQL التالي

CREATE TABLE messagereport
(
    logid int IDENTITY(1,1),
    messageid varchar(64),
    fromconnection varchar(64),
    fromaddress varchar(64),
    requestedconnection varchar(64),
    toconnection varchar(64),
    toaddress varchar(64),
    messagetext varchar(1024),
    route varchar(64),
    datecreated datetime,
    datedeliverytoconnectionsuccess datetime,
    datedeliverytoconnectionfailed datetime,
    deliverytoconnectionreference varchar(256),
    deliverytoconnectionstatusmessage varchar(1024),
    datedeliverytorecipientsuccess datetime,
    datedeliverytorecipientfailed datetime,
    deliverytorecipientstatusmessage varchar(1024),
    status varchar(64)   
)
    

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

إنشاء جدول messagereport
الشكل 1 - إنشاء جدول messagereport

احفظ نص باورشيل التالي كـ "dbimport.ps1"

الخطوة التالية هي إنشاء ملف "dbimport.ps1" في مجلد C:\Ozeki كما هو موضح في الشكل 2. سيحتوي هذا الملف على النص الذي يقوم بتشغيل استعلامات SQL في قاعدة البيانات بشكل دوري.

إنشاء ملف النص
الشكل 2 - إنشاء ملف النص

$ProcessedDir = "C:\Ozeki\Processed"
New-Item -ItemType Directory -Force -Path $ProcessedDir

#حلقة لا نهائية
while (1) {
    #سرد الملفات الأقدم من 20 دقيقة
    #تأكد من أن الوقت أكبر من الفترة التي استخدمتها في تكوين الإبلاغ
    Get-ChildItem "C:\Ozeki\Reporting_SQL" -Filter *.sql | 
        Where{$_.LastWriteTime -le (Get-Date).AddMinutes(-20)} |
    
    Foreach-Object {
        #تحميل محتويات الملف إلى قاعدة بيانات MSSQL
        Write-Output $_.FullName
        $Text = Get-Content -Path $_.FullName
        Invoke-Sqlcmd -ServerInstance MyComputer\MainInstance -Database MyDatabase
        -Query "$Text" -Username "MyUser" -Password "MyPass"

        
        #نقل الملف المعالج إلى مجلد المعالجة
        Move-Item -Path $_.FullName -Destination $ProcessedDir
    }
    
    #انتظر لمدة 5 ثوانٍ
    Start-Sleep -s 5
}
    

انسخ نص باورشيل أعلاه والصقه في ملف "dbimport.ps1" كما تراه في الشكل 3.

لصق النص في الملف
الشكل 3 - لصق النص في الملف

أخيرًا، قم بتعديل النص وفقًا لقاعدة بيانات MSSQL الخاصة بك. في مثيل الخادم، حدد اسم الكمبيوتر واسم المثيل لقاعدة بيانات MSSQL. أدخل اسم المستخدم وكلمة المرور التي تريد استخدامها، واستبدل "Mydatabase" باسم قاعدة البيانات الخاصة بك (الشكل 4).

تغيير أمر MySQL
الشكل 4 - تغيير أمر MySQL

نفذ النص كمسؤول

powershell -ExecutionPolicy Bypass -File dbimport.ps1
    

الآن قم بتنفيذ النص في باورشيل عن طريق تشغيل الأمر أعلاه كما تراه في الشكل 5.

تشغيل نص باورشيل
الشكل 5 - تشغيل نص باورشيل

يمكنك أن ترى أن النص ينفذ جميع ملفات SQL الأقدم من 20 دقيقة في مجلد 'C:\Ozeki\Reporting_SQL' واحدًا تلو الآخر (الشكل 6).

النص ينفذ استعلامات SQL
الشكل 6 - النص ينفذ استعلامات SQL

يتم نقل كل ملف SQL قام النص بتشغيله إلى مجلد Processed حتى لا تضيع أي استعلامات (الشكل 7). من هنا، يمكنك حذفها يدويًا إذا لم تعد بحاجة إليها.

تم نقل ملفات SQL إلى مجلد المعالجة
الشكل 7 - تم نقل ملفات SQL إلى مجلد المعالجة

أخيرًا، إذا نظرت في قاعدة البيانات، يمكنك أن ترى أنه تم إدراج جميع الرسائل في جدول messsagereport كما يظهر الشكل 8.

تم إدراج الرسائل في قاعدة البيانات
الشكل 8 - تم إدراج الرسائل في قاعدة البيانات

More information