![]() |
|
اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : قسم التعريف بمكونات وادوات دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=33) +--- الموضوع : اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد (/showthread.php?tid=12496) الصفحات:
1
2
|
اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - Delphi4Us - 03-02-2024 السلام عليكم ورحمة الله الدالة ROW_COUNT كود : BEGIN
SELECT COL FROM TAB INTO :VAR;
IF (ROW_COUNT = 0) THEN
EXCEPTION NO_DATA_FOUND;
ENDتعيد عدد الصفوف المتأثرة من جملة الاستعلام او الحذف او التعديل بمعنى العملية التي تم تنفيدها مثال اخر كود : update Figures set Number = 0 where id = :id;
if (row_count = 0) then
insert into Figures (id, Number) values (:id, 0);المؤشرات Explicit Cursors أصبح من الممكن الآن الإعلان عن مؤشرات متعددة واستخدامها في PSQL. تتوفر المؤشرات الصريحة في بنية DSQL EXECUTE BLOCK وكذلك في الإجراءات والمشغلات المخزنة. كود : DECLARE RNAME CHAR(31);
DECLARE C CURSOR FOR ( SELECT RDB$RELATION_NAME
FROM RDB$RELATIONS );
BEGIN
OPEN C;
WHILE (1 = 1) DO
BEGIN
FETCH C INTO :RNAME;
IF (ROW_COUNT = 0) THEN
LEAVE;
SUSPEND;
END
CLOSE C;
ENDمثال اخر كود : DECLARE RNAME CHAR(31);
DECLARE FNAME CHAR(31);
DECLARE C CURSOR FOR ( SELECT RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS
WHERE RDB$RELATION_NAME = :RNAME
ORDER BY RDB$FIELD_POSITION );
BEGIN
FOR
SELECT RDB$RELATION_NAME
FROM RDB$RELATIONS
INTO :RNAME
DO
BEGIN
OPEN C;
FETCH C INTO :FNAME;
CLOSE C;
SUSPEND;
END
ENDبالامكان الان اسناد القيم الافتراضية في الاجراءات المخزنة Defaults for Stored Procedure Arguments كود : CREATE PROCEDURE P1 (X INTEGER = 123)
RETURNS (Y INTEGER)
AS
BEGIN
Y = X;
SUSPEND;
ENDبالامكان استخدام العبارة LEAVE لانهاء حلقة تكرارية او الخروج من تنفيد اي عملية قائمة كود : FOR
SELECT COALESCE(RDB$SYSTEM_FLAG, 0), RDB$RELATION_NAME
FROM RDB$RELATIONS
ORDER BY 1
INTO :RTYPE, :RNAME
DO
BEGIN
IF (RTYPE = 0) THEN
SUSPEND;
ELSE
LEAVE; -- exits current loop
ENDكود : CNT = 100;
L1:
WHILE (CNT >= 0) DO
BEGIN
IF (CNT < 50) THEN
LEAVE L1; -- exists WHILE loop
CNT = CNT - l;
ENDالعبارة ROW_NUMBER كود : select
id,
salary,
row_number() over (order by salary)
from employee
order by salary;تعطي رقم متسلسل للصفوف وتعمل مع عبارة Over التجميعية بما ياتي معها من صيغ مختلفة حسب الطلب العبارة RANK كود : select
id,
salary,
rank() over (order by salary)
from employee
order by salary;مثل السابقة ولكن تكرر الترقيم بحال كان مكرر لاحظ النتيجة كود : rank salary id
-- ------ ----
3 8.00 1
4 9.00 2
1 10.00 3
5 10.00 3
2 12.00 5العبارة PERCENT_RANK كود : select
id,
salary,
rank() over (order by salary),
percent_rank() over (order by salary)
from employee
order by salary;نفس السابقة وبنسب مئوية العبارة cume_dist كود : select
id,
salary,
cume_dist() over (order by salary)
from employee
order by salary;كود : cume_dist salary id
-- ------ ---------
3 8.00 0.2
4 9.00 0.4
1 10.00 0.8
5 10.00 0.8
2 12.00 1وايضا بحال كنت تتعامل مع بيانات من مليون وفوق انصح بهذه الصفحة التي تحدد فيها اصدار فايربيرد وحجم الرام وعدد المستخدمين وما الى ذلك فتولد لك ملفين احدهما firebird.conf وايضا databases.conf لان فايربيرد عند التثبيت يتم تثبيته باعدادت افتراضية تكون سيئة وغير مضبوطة لتناسب حجم العمل الذي تعمل عليه كود : https://cc.ib-aid.com/democalc.htmlسوف تقوم الصفحة باعطاء قيم لاستخدام الرامات وقيم لحجم الصفحات لقاعدة البيانات وامور مهمة لذلك هذه النصائح مجالات مختلفة، من تحسينات الأجهزة/نظام التشغيل وتهيئة Firebird إلى توصيات تحسين SQL. أولاً: تحسينات الأجهزة/نظام التشغيل:
والصفحة السابقة تقوم باعطاء اغلب الاعدادات المذكورة لتحسين اداء محرك فايربيرد وعلى سبيل المثال اعدادات خاصة قدمها بحسب مواصفات معينة تتماشى مع المواصفات التي تم تقديمها فقام بالغاء اشياء وفعل اشياء وزاد او غير في اشياء ومن تجربتي الخاصة استعلامات كانت تاخذ حوالي 350 ملي ثانية على مليون و500 الف سجل اصبحت تأخذ 128 ملي ثانية بمعنى ان الاعدادات هذه لا تصلح لاي جهاز بالضرورة اعدادات لملف ملف firebird.conf كود : ServerMode = Super
DefaultDbCachePages = 50K # pages (SuperServer) - increase pages in databases.conf, not here
LockMemSize = 20M # bytes (SuperServer)
LockHashSlots = 40099 # slots
MaxUnflushedWrites = -1 # default for posix (non-Windows)
MaxUnflushedWriteTime = -1 # default for posix (non-Windows)
UseFileSystemCache = true
TempCacheLimit = 256M
RemoteServicePort = 3050
InlineSortThreshold = 16384 # use REFETCH plan for big sortings
ExtConnPoolSize = 64 # external connections pool size
ExtConnPoolLifeTime = 3600 # seconds
#set DataTypeCompatibility according Migration Guide https://ib-aid.com/download /docs/fb4migrationguide.html
#DataTypeCompatibility =
#WireCryptPlugin = ChaCha64, ChaCha, Arc4
#WireCrypt = Enabled (for client) / Required (for server)
#WireCompression = false
#RemoteAuxPort = 0
#authentication plugin setup
#Recommendation - use SELECT * FROM SEC$USERS
#to check that you have users for all plugins
AuthServer = Srp256, Legacy_Auth
UserManager = Srp, Legacy_UserManager
#MaxIdentifierByteLength = 252
#MaxIdentifierCharLength = 63
#DefaultTimeZone =
#SnapshotsMemSize = 64K # bytes
#TipCacheBlockSize = 4M # bytesاعدادات ملف databases.conf كود : security.db = $(dir_secDb)/security4.fdb
{
RemoteAccess = false
DefaultDbCachePages = 256
}
testdb = c:\temp\mydb1.fdb
{
DefaultDBCachePages = 115536
LockMemSize = 30M
TempCacheLimit =2185M
}كما تجدر الاشارة الى ان الاعدادات التي يتم تقديمها تقوم بتحسين اداء فايربيرد ولكن ليس بالضرورة ان يكون افضل ما يكون ولتحصل على افضل شئ تحتاج الى فهم عمل كل هذه الخيارات وتجرب بنفسك وهناك اشياء اخرى جديدة واشياء قديمة ومهمة و الذي سوف اضيفه كلما سنحت الفرصة لذلك العبارة MERGE لدمج من مصدر الى جهة مستهدفة مثال على الاستخدام كود : MERGE INTO books b
USING purchases p
ON p.title = b.title and p.type = 'bk'
WHEN MATCHED THEN
UPDATE SET b.desc = b.desc || '; ' || p.desc
WHEN NOT MATCHED THEN
INSERT (title, desc, bought) values (p.title, p.desc, p.bought);كود : MERGE INTO customers c
USING (SELECT * from customers_delta WHERE id > 10) cd
ON (c.id = cd.id)
WHEN MATCHED THEN
UPDATE SET name = cd.name
WHEN NOT MATCHED THEN
INSERT (id, name) values (cd.id, cd.name);كود : MERGE INTO numbers
USING (
WITH RECURSIVE r(n) AS (
SELECT 1 FROM rdb$database
UNION ALL
SELECT n+1 FROM r WHERE n < 200
)
SELECT n FROM r
) t
ON numbers.num = t.n
WHEN NOT MATCHED THEN
INSERT(num) VALUES(t.n);كيفية الحصول على عدد السجلات لأي استعلام دون تنفيذه؟ كود : SELECT COUNT(*) FROM ( select * from employee where emp_no > 8 );عبارة current_connection تحفظ الاتصال الحالي كود : select current_connection from rdb$databaseويمكن اجراء عملية ما بها كود : execute procedure P_Login(current_connection)للحصول على التاريخ الان والساعة كود : select current_date from rdb$databaseكود : select current_time(2) from rdb$databaseكود : select current_time from rdb$databaseالعبارة current_role للحصول على صلاحيات المستخدم الحالي كود : if (current_role <> 'MANAGER')
then exception only_managers_may_delete;
else
delete from Customers where custno = :custno;للحصول على معرف العملية الحالية كود : select current_transaction from rdb$databaseكود : New.Txn_ID = current_transaction;للحصول على اسم المستخدم الحالي كود : create trigger bi_customers for customers before insert as
begin
New.added_by = CURRENT_USER;
New.purchases = 0;
endكود : create trigger bi_customers for customers before insert as
begin
New.added_by = USER;
New.purchases = 0;
endتستخدم في القوادح لمعرفة اذا كان هناك حدث حذف حصل كود : if (deleting) then
begin
insert into Removed_Cars (id, make, model, removed)
values (old.id, old.make, old.model, current_timestamp);
endاو اضافة او تعديل كود : if (inserting or updating) then
begin
if (new.serial_num is null) then
new.serial_num = gen_id(gen_serials, 1);
endماذا لو لم تكن تريد استخدام مولدات الارقام لاستخدامه مع المفاتيح الاساسية بالجداول هناك طريقة يمكن فعل ذلك بها باستخدام القوادح . فعند استخدام مولدات الارقام وكان اخر رقم عندك هو مثلا 23000 وقمت بفتح سجل جديد ثم الغيت العملية وعدت واضفت سجل جديد فسيكون الرقم 23002 وليس 23001 ويجب وقتها التدخل برمجيا واعادة الترقيم الى الخلف بمقدر 1 او استخدام القوادح لاجراء الترقيم كما بالمثال التالي كود : if(Coalesce(new.id,0)=0) then
new.id = Coalesce((Select max(id) from doc),0)+1;
beginحيث Doc اسم الجدول ويتم وضع هذه السطور في الحدث قبل الاضافة ولكن لا ينصح بها اذا كانت بياناتك اكبر من مليون ولازالت تنمو لان جملة Max على البيانات الكثيرة فيها بطئ بخصول حجم الصفحة في اعدادت ملف قاعدة البيانات دور مهم في اداء قاعدة البيانات ![]() ![]() عند انشاء قاعدة بيانات جديدة افتراضيا يتم وضعه على 16384 وعند انشاء قاعدة البيانات لا يمكن تغييره بعدها الا بانشاء نسخ احتياطي وعملية استرجاع العديد من العمليات المستندة إلى الفهرس (تعمل الفهارس بشكل أسرع إذا تم تقليل عمق الفهرس)
RE: اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - Delphi4Us - 03-02-2024 من الشرح السابق وكما قلنا لتغيير حجم صفحات قاعدة البيانات لا يمكن الا باجراء نسخ احتياطي واستعادة لقاعدة البيانات وايضا حجم قاعدة البيانات يزيد ولا يمكن ان ينقص فلو خزنت مثلا صور واصبح حجم قاعدة البيانات 7 جيجا وحذفت ما فيها سيبقى 7 جيجا وهذه سوف نتطرق لها لاحقا فقاعدة بيانات فايربيرد لها تعامل خاص مع الملفات المحذوفة . وعلى العموم ولمن لا يريد استخدام سطر الاوامر برمجت برنامج لازال تحت التجربة لاجراء نسخ احتياطي واستعادة لقاعدة البيانات وارجاعها لحجمها الطبيعي لو حدث فيها حذف . فيديو يوضح العملية [فيديو: https://www.youtube.com/watch?v=PaluT4bw1IE] رابط التحميل كود : https://mega.nz/file/qxdzhAxS#DyYYN6ciTX9_4mYT2dYUT_l1qJmauwH-3DysaHcbBbgRE: اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - Delphi2020 - 04-02-2024 (03-02-2024, 06:55 PM)Delphi4Us كتب : من الشرح السابق وكما قلنا لتغيير حجم صفحات قاعدة البيانات لا يمكن الا باجراء نسخ احتياطي واستعادة لقاعدة البيانات السلام عليكم ورحمة الله و بركاته، جزاك الله خيرا ، هل ممكن تتصدق علينا ب سورس كود للبرنامج؟ RE: اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - Delphi4Us - 04-02-2024 وعليكم السلام ورحمة الله لست قرب الجهاز الان وعلى العموم لا يوجد كود يستحق او كود سري او كود صعب بالامكان استخدام اي مكونات لفعل ذلك . على سبيل المثال مكونات فايرداك لاجراء نسخ احتياطي . كود : FDFBNBackup1.DriverLink := FDPhysFBDriverLink1;
FDFBNBackup1.UserName := 'sysdba';
FDFBNBackup1.Password := 'masterkey';
FDFBNBackup1.Host := 'db_srv_host';
FDFBNBackup1.Protocol := ipTCPIP;
FDFBNBackup1.Database := 'e:\fb\addemo.fdb';
FDFBNBackup1.BackupFile := 'e:\fb\addemo.backup';
FDFBNBackup1.Level := 0; // full backup
FDFBNBackup1.Backup;وللاستعادة كود : FDFBNRestore1.DriverLink := FDPhysFBDriverLink1;
FDFBNRestore1.UserName := 'sysdba';
FDFBNRestore1.Password := 'masterkey';
FDFBNRestore1.Host := 'db_srv_host';
FDFBNRestore1.Protocol := ipTCPIP;
FDFBNRestore1.Database := 'e:\fb\addemo.fdb';
FDFBNRestore1.BackupFile := 'e:\fb\addemo.backup';
FDFBNRestore1.Restore;الموضوع بسيط جدا . RE: اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - Delphi4Us - 05-02-2024 ايضا من الاشياء المهمة هي استخدام الحزم او الطرد في فايربيرد او ما يسمى PACKAGE عند كثرة الاجراءات المخزنة والاجراءات والدوال تحدث خربطة فيها ولن تستطيع تغيير اسم اجراء مخزن الا باعادة بناءه باسم جديد ولكن في الحزم او الطرود يمكن تغيير اسماءها بدون اعادة بناءها وحذف القديم والمهم هو تجميع الدوال والاجراءات وتصنيفها بحيث يسهل الوصول لها بمعنى انك عند انشاء الاستعلامات او الاجراءات او الدوال باي مكان يمكنك الوصول للاجراءات والدوال تحت اسم حزمة معروف الحزمة عبارة عن مجموعة من الإجراءات والوظائف التي تتم إدارتها ككيان واحد. تتناول فكرة " تغليف " مكونات التعليمات البرمجية لعملية قاعدة البيانات عدة أهداف: النمذجة والفكرة هي فصل كتل التعليمات البرمجية المترابطة إلى وحدات منطقية، كما تفعل لغات البرمجة. من المعروف جيدًا في البرمجة أن تجميع التعليمات البرمجية بطرق مختلفة، في مساحات الأسماء أو الوحدات أو الفئات، على سبيل المثال، يعد أمرًا جيدًا. مع الإجراءات والوظائف القياسية في قاعدة البيانات، هذا غير ممكن. على الرغم من أنه يمكن تجميعها في ملفات نصية مختلفة، إلا أنه لا تزال هناك مشكلتان: لا يتم تمثيل التجميع في بيانات تعريف قاعدة البيانات. تشارك جميع الإجراءات المكتوبة في مساحة اسم ثابتة ويمكن استدعاؤها من قبل الجميع (نحن لا نشير إلى أذونات الأمان هنا). لتسهيل تتبع التبعية نريد آلية لتسهيل تتبع التبعية بين مجموعة من الإجراءات الداخلية ذات الصلة، وكذلك بين هذه المجموعة والإجراءات الأخرى، المجمعة وغير المجمعة. تأتي حزم Firebird في جزأين: رأس (حزمة الكلمة الرئيسية) ونص ( نص حزمة الكلمة الرئيسية). هذا التقسيم يشبه إلى حد كبير وحدة دلفي، الرأس يتوافق مع جزء الواجهة والجسم يتوافق مع جزء التنفيذ. يتم إنشاء الرأس أولاً (إنشاء حزمة) ويتبعه النص (إنشاء نص الحزمة). عندما يحدد الروتين المعبأ أنه يستخدم كائن قاعدة بيانات معين، يتم تسجيل التبعية على هذا الكائن في جداول نظام Firebird. بعد ذلك، لإسقاط هذا الكائن أو ربما تغييره، عليك أولاً إزالة ما يعتمد عليه. وبما أن نص الحزمة يعتمد عليه، فيمكن إسقاط نص الحزمة هذا، حتى لو كان بعض كائنات قاعدة البيانات الأخرى يعتمد على هذه الحزمة. عندما يتم إسقاط الجسم، يبقى الرأس، مما يسمح لك بإعادة إنشاء جسمه بمجرد الانتهاء من التغييرات المتعلقة بالكائن الذي تمت إزالته. لتسهيل إدارة الأذونات من الممارسات الجيدة بشكل عام إنشاء إجراءات تتطلب الاستخدام المميز واستخدام الأدوار أو المستخدمين لتمكين الاستخدام المميز. نظرًا لأن Firebird يقوم بتشغيل إجراءات روتينية مع امتيازات المتصل، فمن الضروري أيضًا منح استخدام الموارد لكل روتين عندما لا تكون هذه الموارد متاحة مباشرة للمتصل. يجب منح استخدام كل روتين للمستخدمين و/أو الأدوار. لا تحتوي الإجراءات المجمعة على امتيازات فردية. تعمل الامتيازات على الحزمة. الامتيازات الممنوحة للحزم صالحة لجميع إجراءات نص الحزمة، بما في ذلك الإجراءات الخاصة، ولكن يتم تخزينها لرأس الحزمة. اذا نظرنا هنا لدينا حزمة باسم PKG1 ويمكن اطلاق اي اسم تريده وعند كتابتنا للاستعلام يمكننا الوصول لكل الاجراءات والوظائف والدوال التي فيها لنستخدمها لانشاء رأس الحزمة وهنا نعلن عن كل الدوال والوظائف والاجراءات التي نريد الوصول لها من اي مكان من قاعدة البيانات كود : CREATE OR ALTER PACKAGE PKG1
AS
BEGIN
PROCEDURE EMPLOYEE(I INT) RETURNS (O INT); -- public procedure
FUNCTION EMP_COUNT RETURNS INT; -- public procedure
ENDوبعدها ننشئ جسم لهذه العناوين الرئيسية كود : RECREATE PACKAGE BODY PKG1
AS
BEGIN
FUNCTION F1(I INT) RETURNS INT; -- private function
PROCEDURE EMPLOYEE(I INT) RETURNS (O INT)
AS
BEGIN
END
FUNCTION F1(I INT) RETURNS INT
AS
BEGIN
RETURN 0;
END
FUNCTION EMP_COUNT RETURNS INT
AS
BEGIN
RETURN 0;
END
END وتكون تحمل نفس الاسم برأس الحزمة وهنا يتم برمجة الكود المطلوب لتنفيذ المهمة واذا كتبت هنا اي دالة او اجراء لا يوجد لها تعريف في رأس الحزمة وقتها ستكون دالة او اجراء محلي يمكن الوصول لها فقط من الاجراءات والدوال التي معها بجسم الحزمة . طريقة ووظيفة عملها تماما كالاجراءات الداخلية فقط هي مرتبة في مجموعات RE: اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - Delphi4Us - 06-02-2024 بالنسبة للنسخ الاحتياطي والاستعادة وتغيير حجم الصفحات بقاعدة البيانات و تغيير مخزن الذاكرة توجد اداة وحيدة تأتي مع فايربيرد للقيام بهذا العمل وهي عن طريق سطر الاوامر : انتقل الى سطر الاوامر CMD وبعدها ادخل الى مجلد الفايربيرد ثم لانشاء نسخ احتياطي اكتب كود : gbak -backup employee /backups/employee.fbkحيث employee اسم قاعدة البيانات وبدون مسار اذا كانت في نفس المجلد وبعدها /backups/employee.fbk وهو مسار واسم ملف النسخة الاحتياطية -backup هو مفتاح يشير الى رغبتنا في انشاء نسخ احتياطي للاستعادة يتم عكس العملية السابقة كود : gbak -replace /backups/employee.fbk employee-replace هو مفتاح يشير الى رغبتنا في انشاء عملية استعادة هذا المثال بأبسط صورة لان هناك الكثير من الخيارات والتي تتمثل في بعض المقاتيح التي يمكن استخدامها حسب الرغبة تجدر الاشارة الى ان المفتاح -replace سوف يستبدل ملف قاعدة البيانات القديم بالجديد ويمكن كتابة -r فقط ولكن اذا اردت استعادة قاعدة البيانات في ملف جديد وانشاء قاعدة بيانات جديد يجب استخدام المفتاح -C او المفتاح -REP المفاتيح توجد ثلاث انواع منها 1: مفاتيح عامة تستخدم مع اوامر النسخ الاحتياطي او الاستعادة 2: مفاتيح تستخدم مع النسخ الاحتياطي فقط 3: مفاتيح تستخدم مع عمليات الاستعادة وسوف نشرح منها المهم على الأقل في منشور لاحق RE: اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - ALG2009 - 06-02-2024 جزاكم الله خيرا حبذا لو قمت بإنشاء قاعدة بيانات من الصفر وكل مره نضيف لها أمر أو دالة من الدوال السابقة لتعم الفائده للجميع ويكون برنامج تعليمي RE: اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - Delphi4Us - 08-02-2024 إقتباس :حبذا لو قمت بإنشاء قاعدة بيانات من الصفر وكل مره نضيف لها أمر أو دالة من الدوال السابقة لتعم الفائده للجميع ويكون برنامج تعليمي جربو انتم وانا ابحث و اتعلم وانقل اي جديد لكم بالمنتدى هنا ، وان كان هناك مشكلة سنراجعها سويا عندما تتاح الفرصة . RE: اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - Delphi4Us - 14-02-2024 السلام عليكم لماذا لم تجربوا ام ان الامر لم ينجح معكم على العموم هذه قاعدة بيانات فيها Package التي شرحناها ولكن المشكلة التي سوف تواجهكم بهذه الطريقة وهي انشاء قاعدة بيانات ووضع التجارب فيها انه ليس الكل يستخدم نفس الاصدار من فايربيرد ولهذا الطريقة الافضل هي ان يجرب كل شخص في جهازه انا استخدم فايربيرد 5 RE: اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد - Delphi4Us - 15-02-2024 استخدام Guardian ؟ لعلك لاحظت عند تثبيت فايربيرد بأنه يوجد خيار تثبيت Guardian في طريقك . يعد Firebird Guardian أداة مساعدة تراقب عملية الخادم وتحاول إعادة تشغيله إذا تم إنهاؤه بشكل غير طبيعي. لا يعمل The Guardian مع Firebird Classic Server على نظام التشغيل Windows إذا تم تشغيله كتطبيق حتى إذا قمت بتثبيته كخدمة. يعمل The Guardian بشكل صحيح مع Superserver، سواء تم تشغيله كتطبيق أو كخدمة. إذا قمت بتشغيل Firebird كخدمة على نظام التشغيل Windows 2000 أو إصدار أحدث، فإن Guardian يعد وسيلة راحة وليس ضرورة، نظرًا لأن أنظمة التشغيل هذه تتمتع بإمكانية مراقبة الخدمات وإعادة تشغيلها. يوصى بإبقاء خيار Guardian قيد التشغيل (إن أمكن) في جميع المواقف الأخرى. |