دیتاگریپ: چاقوی همه کاره برای کار با بانکهای اطلاعاتی رابطه ای

شرکت معتبر جت برینز که محیط های برنامه نویسی حرفه ای آن در بین توسعه گران و برنامه نویسان باتجربه، جای پای بسیار محکمی دارد و محصولات معروفی مانند اینتلی جی برای جاوا و اسکالا و اندروید، پای چارم برای پایتون، پی اچ پی استورم برای پی اچ پی، روبی ماین برای روبی و … را در سبد محصولات خود دارد، اخیراً نسخه اول نرم افزار دیتاگریت (DataGrip) را روانه بازار کرده است.

 

در صفحه خانگی این نرم افزار، این محصول به عنوان یک چاقوی همه کاره برای مدیریت و کار با بانکهای اطلاعاتی رابطه ای معروف دنیا یعنی اوراکل، DB2، اس کیو ال سرور، مای اس کیو ال، پستگرس، اس کیو ال لایت و … معرفی شده است.

ز جمله امکانات آن می توان به موارد زیر اشاره کرد:

تغییرات مختلف در بانکهای اطلاعاتی و مشاهده اسکریپت متناظر به صورت لحظه ای

1modify

  • مدیریت انواع مختلف بانکهای اطلاعاتی رابطه ای با یک محصول
  • تکمیل کد هوشمند

complletion

  • آنالیز کوئری و پیشنهاد های هوشمند برای اصلاح

executing

  • مشاهده نمودار روابط بین جداول

00_14_diagram

  • …..

فهرست کامل امکانات این نرم افزار خوش ساخت که نتیجه سالها تجربه این شرکت در تسهیل کار با بانکهای اطلاعاتی رابطه ای بوده است را می توانید از این آدرس مشاهده کنید.

 

منبع : https://geekboy.ir

مشكل حجم LDF در MSSQL-2008

 

The following example shrinks the log file in the AdventureWorks database to 1 MB. To allow the DBCC SHRINKFILE command to shrink the file, the file is first truncated by setting the database recovery model to SIMPLE.

با دستورات زير مي توانيد توسط قابيلت TRUNCATE اين مهم را انجام دهيد:

USE AdventureWorks2012;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE AdventureWorks2012
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (AdventureWorks2012_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE AdventureWorks2012
SET RECOVERY FULL;
GO

مقایسه دستورات TRUNCATE وDELETE


معرفی دستور DELETE: با این دستور حتما آشنا هستید. این دستور استاندارد جهت حذف اطلاعات (یا به عبارت درست تر، داده ها) از یک جدول استفاده می شود. کاربرد این دستور معمولا به دو شکل زیر می باشد. 1. DELETE FROM MyTable 2. DELETE FROM MyTable WHERE ID < 100 در کاربرد نوع اول، تمام داده های موجود در جدول MyTable حذف شده و در دستور دوم فقط داده هایی حذف می شوند که شرط مورد نظر در مورد آن ها برقرار باشد. معرفی دستور TRUNCATE: دستور TRUNCATE یک دستور غیر استاندارد می باشد که جهت حذف تمامی داده های موجود در جدول استفاده می شود. کاربرد این دستور به شکل زیر می باشد. TRUNCATE TABLE MyTable مقایسه دستورات DELETE و TRUNCATE • دستور TRUNCATE بر خلاف دستور DELETE نمی تواند دارای شرط باشد. به عبارت دیگر شما نمی توانید عبارت WHERE را همراه این دستور بکار ببرید. • دستور TRUNCATE به صورت کمینه (Minimally) لاگ می شود در حالیکه دستور DELETE به صورت کامل لاگ می شود. بنابراین دستور TRUNCATE بسیار سریع تر از دستور DELETE عمل می کند. به طوریکه اگر جدول مورد نظر شامل میلیون ها رکورد باشد، با استفاده از دستور TRUNCATE ظرف چند ثانیه کل داده ها حذف می شوند در صورتی که با استفاده از دستور DELETE این عمل می تواند دقیقه ها و حتی ساعت ها طول بکشد. • اگر جدول ما حاوی فیلدی از نوع Identity باشد، پس از اجرای دستور TRUNCATE مقدار این فیلد Reset شده و به مقدار اولیه خود برمی گردد، در حالی که در مورد دستور DELETE چنین نیست. • اگر جدولی که قصد داریم داده های آن را حذف کنیم، توسط جداول دیگر ارجاع گرفته شده باشد یعنی فیلد کلید اصلی این جدول در جداول دیگری به عنوان کلید خارجی مورد استفاده قرار گرفته باشد، دیگر نمی توان از دستور TRUNCATE جهت حذف داده های این جدول استفاده نمود. حتی اگر جداول دیگر خالی بوده باشند و یا حتی اگر کلید های خارجی را غیر فعال (Disable) کنیم، باز هم نمی توانیم از دستور TRUNCATE استفاده کنیم و حتما باید روابط (Relations) را حذف کنیم تا بتوانیم از این دستور استفاده بکنیم. به طور مثال اگر جداول Order و OrderDetais را در نظر بگیریم، تا زمانی که بین این دو جدول رابطه وجود دارد، نمی توان دستور TRUNCATE رو روی جدول Order اجرا نمود. با توجه به اینکه دستور TRUNCATE بسیار سریع می باشد، میزان خطر آن به اندازه دستور DROP می باشد و استفاده اشتباه از آن می تواند منجر به فاجعه شود. بنابراین هنگام استفاده از این دستور دقت کافی را داشته باشید. برگرفته از http://www.amazon.com/Microsoft%C2%AE-Server%C2%AE-T-SQL-Fundamentals-PRO-Developer/dp/0735626014

مشكل افزايش حجم ldf در sql server

برخی اوقات در SQL SERVER حجم فایل LOG ما رشد تصاعدی میکند و این موجب کند شدن عملیات تراکنش داده و در نتیجه کند شدن فرآیندهای سازمانی متصل به پایگاه داده ما میشود.همانگونه که میدانید LOG تراکنشهای سازمانی در فایل LDF در پایگاه داده ذخیره میشود حال انکه دیتای اصلی در فایل MDF میباشد.

در نسخه ۲۰۰۰ می‌توانستیم یک پایگاه داده را Detach کنیم و فایل ldf مربوط به آن را حذف کنیم، زمانیکه دوباره پایگاه داده را attach می‌کردیم یک فایل ldf جدید ساخته می‌شد اما در نسخه‌های بعد از آن چنین امکانی وجود ندارد.

در نسخه‌های جدید برای shrink کردن ابتدا باید عملیات log truncation را انجام دهیم. این عملیات در دو حالت اتفاق می‌افتد:

۱- در مدل بازیابی ساده (simple recovery model) بعد از یک checkpoint اتفاق می‌افتد.

۲- در مدل بازیابی کامل (full recovery model) و مدل بازیابی bulked-log ، پس از پشتیبان‌گیری از log .

هر فایل log دارای یک بخش غیرفعال است که در عملیات  truncate کردن فقط این بخش از پایگاه داده آزاد می‌شود. بخش غیر فعال به بخشی گفته می‌شود که مربوط به اتفاقاتی است که commit شده‌اند و عملا بودن یا نبودن آن‌ها هیچ مزیتی برای ما ندارند.

 

راه اول:
طبق مواردی که در بالا بیان شد برای اینکه بتوانیم حجم این فایل را کم کنیم باید ابتدا عملیات truncation را انجام دهیم و سپس آن را shrink کنیم. برای truncate کردن باید از فایل log پشتیبان بگیریم. برای انجام این کار از طریق SQL Server Management Studio کاری شبیه به پشتیبان‌گیری معمولی انجام می‌شود، فقط باید نوع پشتیبان‌گیری را از نوع  Transaction Log انتخاب کرد. زمانی که این نوع انتخاب شود می‌توان از بخش Options تعیین کرد که آیا عملیات truncate کردن انجام شود یا خیر. از این بخش مقدار پیش‌فرض را تغییر ندهید. زمانی‌که محل مورد نظر برای پشتیبان‌گیری را انتخاب کردید روی دکمه OK کلیک کنید تا پشتیبان‌گیری انجام شود.

بعد از این مرحله برای shrink کردن پایگاه داده روی نام پایگاه داده کلیک راست ماوس را زده و از بخش Tasks گزینه Shrink و سپس Database را انتخاب نمایید و روی دکمه OK در صفحه جدید کلیک نمایید. با این کار حجم فایل من که حدود ۱۲.۵ گیگابایت بود به حدود ۱۶۰ مگابایت رسید.(بخشهایی از این مطلب را از اینترنت برداشت نمودم که چون خیلی جاها کپی شده بود تشخیص منبع اصلی دشوار بود وذکر نکردم و باید از نویسنده اصلی تشکر کنم)

 

برای کاهش حجم پایگاه داده SQL Server 2005 و فایل ها شما میتوانید فایل های پایگاه داده خود را Truncatکنید.ابتدا وارد دات نت پنل شوید.

راه دیگر استفاده از دستور زیر به عنوان یک QUERY است:

BACKUP LOG DATABASE-NAME WITH TRUNCATE_ONLY

مثلا اگر نام پایگاه داده شما TOLID بود دستور زیر:

Backup log tolid with truncate_only

راه بعدی نیز به شرح زیر است:

ابتدا وارد دات نت پنل شوید.

. از قسمت Database گزینه ی Sqlserver Database را انتخاب کنید.

.روی بانک  داده ای که می خواهید Truncate کنید کلیک کنید.

. صفحه ی Sql Database properties باز خواهد شد.

. در نهایت دکمه ی Truncate files را کلیک کنید.

لیست جامع دستورات ms sql server 2005

An A-Z Index of the SQL Server 2005

database

Aggregate - CREATE AGGREGATE
- DROP AGGREGATE
Application Role - CREATE APPLICATION ROLE
- ALTER APPLICATION ROLE
- DROP APPLICATION ROLE
Assembly - CREATE ASSEMBLY
- ALTER ASSEMBLY
- DROP ASSEMBLY
ALTER AUTHORIZATION

BACKUP
BACKUP CERTIFICATE
BEGIN [DIALOG [CONVERSATION]]

Certificate - ALTER CERTIFICATE
- CREATE CERTIFICATE
- DROP CERTIFICATE
CHECKPOINT
COMMIT
Contract - CREATE CONTRACT
- DROP CONTRACT
Credential - CREATE CREDENTIAL
- ALTER CREDENTIAL
- DROP CREDENTIAL

Database - CREATE DATABASE
- ALTER DATABASE
- DROP DATABASE
DBCC CHECKALLOC - Check consistency of disk allocation.
DBCC CHECKCATALOG - Check catalog consistency
DBCC CHECKCONSTRAINTS - Check integrity of table constraints.
DBCC CHECKDB - Check allocation, and integrity of all objects.
DBCC CHECKFILEGROUP - Check all tables and indexed views in a filegroup.
DBCC CHECKIDENT - Check identity value for a table.
DBCC CHECKTABLE - Check integrity of a table or indexed view.
DBCC CLEANTABLE - Reclaim space from dropped variable-length columns.
DBCC dllname - Unload a DLL from memory.
DBCC DROPCLEANBUFFERS - Remove all clean buffers from the buffer pool.
DBCC FREE... CACHE - Remove items from cache.
DBCC HELP - Help for DBCC commands.
DBCC INPUTBUFFER - Display last statement sent from a client to a database instance.
DBCC OPENTRAN - Display information about recent transactions.
DBCC OUTPUTBUFFER - Display last statement sent from a client to a database instance.
DBCC PROCCACHE - Display information about the procedure cache
DBCC SHOW_STATISTICS - Display the current distribution statistics
DBCC SHRINKDATABASE - Shrink the size of the database data and log files.
DBCC SHRINKFILE - Shrink or empty a database data or log file.
DBCC SQLPERF
- Display transaction-log space statistics. Reset wait and latch statistics.
DBCC TRACE... - Enable or Disable trace flags
DBCC UPDATEUSAGE - Report and correct page and row count inaccuracies in catalog views
DBCC USEROPTIONS - Return the SET options currently active
DBCC deprecated commands
DBCC Undocumented commands

DECLARE
Default - CREATE DEFAULT
- DROP DEFAULT
DELETE
DENY - DENY Object permissions
- DENY User/Role permissions
Endpoint - CREATE ENDPOINT
- ALTER ENDPOINT
- DROP ENDPOINT
Event - CREATE EVENT NOTIFICATION
- DROP EVENT NOTIFICATION
EXECUTE
EXECUTE AS

Fulltext Catalog - CREATE FULLTEXT CATALOG
- ALTER FULLTEXT CATALOG
- DROP FULLTEXT CATALOG
Fulltext Index - CREATE FULLTEXT INDEX
- ALTER FULLTEXT INDEX
- DROP FULLTEXT INDEX
Function - CREATE FUNCTION
- ALTER FUNCTION
- DROP FUNCTION

GO
GRANT - GRANT Object permissions
- GRANT User/Role permissions

Index - CREATE INDEX
- ALTER INDEX
- DROP INDEX
INSERT
iSQL -U user -P password -i script.sql -o logfile.log

Key - CREATE ASYMMETRIC KEY
- ALTER ASYMMETRIC KEY
- DROP ASYMMETRIC KEY
- CREATE SYMMETRIC KEY
- OPEN SYMMETRIC KEY
- CLOSE SYMMETRIC KEY
- ALTER SYMMETRIC KEY
- DROP SYMMETRIC KEY
KILL
KILL QUERY NOTIFICATION
KILL STATS JOB

Login - CREATE LOGIN
- ALTER LOGIN
- DROP LOGIN

Master Key - CREATE MASTER KEY
- ALTER MASTER KEY
- BACKUP MASTER KEY
- DROP MASTER KEY
- RESTORE MASTER KEY
- ALTER SERVICE MASTER KEY
- BACKUP SERVICE MASTER KEY
- RESTORE SERVICE MASTER KEY
Message Type - CREATE MESSAGE TYPE
- ALTER MESSAGE TYPE
- DROP MESSAGE TYPE

Partition Function - CREATE PARTITION FUNCTION
- ALTER PARTITION FUNCTION
- DROP PARTITION FUNCTION
Partition Scheme - CREATE PARTITION SCHEME
- ALTER PARTITION SCHEME
- DROP PARTITION SCHEME
Procedure - CREATE PROCEDURE
- ALTER PROCEDURE
- DROP PROCEDURE

Queue - CREATE QUEUE
- ALTER QUEUE
- DROP QUEUE

Remote Service Binding - CREATE REMOTE SERVICE BINDING
- ALTER REMOTE SERVICE BINDING
- DROP REMOTE SERVICE BINDING

RESTORE - RESTORE DATABASE Complete
RESTORE DATABASE Partial
RESTORE DATABASE Files
RESTORE LOGS
RESTORE DATABASE_SNAPSHOT
RESTORE FILELISTONLY - List database and log files
RESTORE HEADERONLY - List backup header info
RESTORE LABELONLY - Media info
RESTORE REWINDONLY - Rewind and close tape device
RESTORE VERIFYONLY
REVERT
REVOKE - REVOKE Object permissions
- REVOKE User/Role permissions
Role - CREATE ROLE
- ALTER ROLE
- DROP ROLE
ROLLBACK
Route - CREATE ROUTE
- ALTER ROUTE
- DROP ROUTE

Schema - CREATE SCHEMA
- ALTER SCHEMA
- DROP SCHEMA
SELECT
SEND
SERVERPROPERTY
Service - CREATE SERVICE
- ALTER SERVICE
- DROP SERVICE
SESSION_USER
SESSIONPROPERTY
SET @local_variable
SET
SHUTDOWN
Signature - ADD SIGNATURE
- DROP SIGNATURE
Statistics - CREATE STATISTICS
- UPDATE STATISTICS
- DROP STATISTICS

Synonym - CREATE SYNONYM
- DROP SYNONYM

Table - CREATE TABLE
- ALTER TABLE
- DROP TABLE
- TRUNCATE TABLE
Transaction - BEGIN DISTRIBUTED TRANSACTION
- BEGIN TRANSACTION
- COMMIT TRANSACTION
Trigger - CREATE TRIGGER
- ALTER TRIGGER
- ENABLE TRIGGER
- DISABLE TRIGGER
- DROP TRIGGER
Type - CREATE TYPE
- DROP TYPE

UNION
UPDATE
User - CREATE USER
- ALTER USER
- DROP USER
USE

View - CREATE VIEW
- ALTER VIEW
- DROP VIEW

XML Schema Collection - CREATE XML SCHEMA COLLECTION
- ALTER XML SCHEMA COLLECTION
- DROP XML SCHEMA COLLECTION

Related:

Microsoft books online - T-SQL Reference: SQL 2000 | SQL 2005 | SQL 2008
SS64 Discussion forum
Links to other SQL Server websites, books etc.

آشنايي با SQL Server 2005

 

اشاره :

در شماره‌هاي قبل به بررسي مفصل اصول آكادميك و مباني علمي بانك‌هاي اطلاعاتي پرداختيم. بدين‌ترتيب از اين شماره به بيان مفاهيم عملي بانك‌هاي اطلاعاتي مي‌پردازيم. بدين منظور ابتدا به آشنايي با محيط SQL Server2005 مي‌پردازيم. چراكه اين محيط در حقيقت همان محيطي است كه تمام مفاهيم و مطالبي را كه مي‌خواهيم به صورت عملي نشان دهيم، در آن صورت مي‌گيرد. اگر از خوانندگاني هستيد كه مجموعه مقالات «پايگاه داده‌ها قلب سيستم‌هاي اطلاعاتي» را دنبال مي‌كنيد يا تصميم داريد از اين شماره به طور جدي‌تر اين مقالات را دنبال كنيد، اكنون وقت آن فرا رسيده است كه به قولي دست به آچار شويد. بدين منظور در قدم اول بايد SQL Server2005 را نصب كنيد. در اين شماره مباني نصب و آشنايي نسبتاً جامعي را با اين محيط بررسي خواهيم كرد.

 


1- آشنايي با نسخه‌هاي SQL Server 2005

SQL Server2005 در نسخه‌هاي مختلفي عرضه شده است  كه از نظر كارايي و قيمت بسيار متفاوت هستند و البته براي كاربران مختلفي نيز طراحي شده‌اند.

˜‌ (SQL Server2005 Enterprise Edition (32-bit and 64 bit

اين نسخه در حقيقت نسخه پيشرفته اين نرم‌افزار است و براي محيطي طراحي شده است كه يا داراي بانك اطلاعاتي بسيار بزرگ (از نظر تعداد ركورد يا حجم اطلاعات) يا داراي تعداد پردازش آنلا‌ين بسيار زياد يا نيازمند تحليل پيچيده اطلاعات است. اين نسخه همه قابليت‌هاي اين نرم‌افزار را دارد.

˜ (SQL Server2005 Standard Edition (32-bit and 64-bit 

اين نسخه در حقيقت براي شركت‌هاي متوسط مناسب است. نكته مهم اين است كه اين نسخه نيز به راحتي بانك‌هاي اطلاعاتي بزرگ را پشتيباني مي‌كند. اما بعضي از ويژگي‌هاي مورد نياز براي تحليل پيچيده اطلاعات را ندارد و البته قيمت بسيار مناسب‌تري نسبت به نسخه Enterprise دارد.

˜ (SQL Server2005 Workgroup Edition (32-bit only

اين نسخه براي شركت‌هاي كوچك و سرويس‌دهنده‌هاي وب و البته بانك‌هاي اطلاعاتي كه به عنوان نسخه پشتيبان استفاده مي‌شوند، مناسب است. اين نسخه در بين نسخه‌هايي كه به كاربران نهايي عرضه مي‌شود، كمترين قيمت را دارد.

‌‌˜ (SQL Server 2005 Developer edition (32-bit and 64-bit

اين نسخه از نظر خصوصيات و ويژگي‌ها هيچ تفاوتي با نسخه Entrprise ندارد. اما مختص برنامه‌نويسان است. لذا قيمت بسيار پاييني دارد و شركت‌هاي برنامه‌نويسي در زمينه بانك‌هاي اطلاعاتي از اين نسخه استفاده مي‌كنند. بدين ترتيب اين شركت‌ها ديگر مجبور نيستند براي تست برنامه خود نسخه Entrprise را تهيه كنند.

˜ (SQL Server2005 Express Edition (32-bit only 

اين نسخه كاملاً مجاني است و مي‌تواند به عنوان يك سرويس‌دهنده يا يك سرويس گيرنده با حجم كوچكي از اطلاعات استفاده شود. بدين‌ترتيب برنامه‌نويساني نيز كه مي‌خواهند برنامه‌اي بنويسند كه داراي يك بانك اطلاعات كوچك است ديگر نيازي نيست كه نگران بانك اطلاعاتي خود باشند. چرا كه مي‌توانند برنامه خود را همراه با يك نسخه مجاني Exprees Edition ارائه كنند.

˜ SQL Server 2005 Compact Edition و SQL Server2005 Mobile Edition

اين دو نسخه جزء نسخه‌هايي هستند كه بعدها به مجموعه اصلي اضافه شده‌اند كه فعلاً از بحث ما خارج هستند.
نكته: يك نسخه ديگر نيز وجود دارد كه البته نسخه كرك شده نرم‌افزار مورد نظر است كه با پرداخت مبلغي اندك و ناقابل مي‌توانيد دي وي دي آن را تهيه كنيد كه در آن تمام نسخه‌هاي گفته شده وجود داشته باشد و البته بدون هيچ كم و كاستي هم كار مي‌كند!

براي اطلاعات بيشتر و دقيق‌تر در رابطه با تفاوت‌هاي بين اين نسخه‌ها مي‌توانيد به اين آدرس مراجعه  كنيد.

2- كدام سيستم عامل؟

در مورد اين‌كه SQL Server2005 روي كدام سيستم عامل را نصب كنيم، بسته به اين‌كه شما كدام نسخه را بخواهيد نصب كنيد، انتخاب‌هاي زيادي وجود دارد. اما پيشنهاد مي‌كنم كه روي سيستم‌عامل windows server2003 نصب كنيد.

چراكه با اين كار مي‌توانيد از امكانات امنيتي اين سيستم‌عامل در پايگاه داده خود بهره ببريد. توجه داشته باشيد كه اگر شما windows server2003 نداريد، بدين معني نيست كه نمي‌توانيد از SQL Server2005 استفاده نماييد؛ مي‌توانيد SQL Server2005 را روي windows XP SP2 نصب كنيد.

اگر windows Server2003 را نصب كرديد، حتماً از قسمت نرم‌افزارهايي كه با خود سي‌دي ويندوز عرضه مي‌شوند، نرم‌افزار IIS را نيز نصب كنيد. براي اين كار كافي است به Control Panel>add or remove Programs>add/remove windows component مراجعه كنيد و روي Aplication server دو بار كليك كنيد و سپس با انتخاب گزينه Internet Information services نرم‌افزار IIS را نصب كنيد. به خاطر داشته باشيد كه پيش از نصب حتماً سي‌دي ويندوز را در دستگاه گذاشته باشيد (شكل 1).

شکل 1


نكته: در رابطه با اين‌كه كدام نسخه‌ها از SQL Server2005 را روي چه سيستم‌عاملي نصب كنيد و چه نيازهاي سخت‌افزاري يا نرم‌افزاري داريد، مي‌توانيد به اين آدرس زير مراجعه كنيد.

3- نصب SQL Server2005

بعد از قرار دادن دي‌وي‌دي SQL Server2005 در دستگاه و اجراي فايل Setup و تأييد License برنامه، صفحه‌اي را مشاهده مي‌كنيد كه برنامه‌هاي مورد نياز براي نصب SQL Server2005 را در كامپيوتر شما نصب مي‌كند. اين موارد به‌طور مشخص NET FRAMWORK 2.0. و NATIVE CLIENT براي دسترسي به سرويس‌دهنده شبكه و تعدادي فايل حمايتي براي نصب SQL Server2005 است (شكل 2).

شکل 2


بعد از انتخاب گزينه Install صفحه آغازين نصب SQL  Server2005 ظاهر مي‌شود و با انتخاب گزينه Next صفحه‌اي مانند شكل 3 ظاهر مي‌شود.



شکل 3

اين صفحه در حقيقت قسمت چك كردن سيستم براي مشخص كردن مهيا بودن سيستم براي نصب SQL Server2005 است. همان‌طور كه مي‌بينيد، مواردي مانند نصب بودن ماجول‌هاي حمايت از XML و وجود Service pack در سيستم‌عامل يا دارا بودن حداقل نيازهاي سخت‌افزاري براي نصب SQL  Server2005، نصب بودن IIS و ... در اين صفحه چك مي‌شود.

اگر پيام خطا در مورد سخت‌افزار دريافت كرديد، خيلي نگران نباشيد. زيرا اگر اختلاف سخت‌افزار شما با آنچه مايكروسافت مي‌خواهد زياد نباشد، مشكلي در نصب نخواهيد داشت. اگر مانند شكل 3 ديديد كه IIS روي سيستم شما نصب نيست يا طبق روال گفته شده آن را نصب كنيد يا اگر نمي‌خواهيد با بستر اينترنت و ماجول توليد گزارش كار كنيد، بدون توجه به اين اشكال به مرحله بعد برويد.

در ادامه نصب SQL Server2005 روي كامپيتر شما آغاز مي‌شود. در ادامه صفحه بايد شماره سريال را وارد كنيد كه با انجام اين كار صفحه‌اي مانند شكل 4 ظاهر مي‌شود.

شکل 4


در اين صفحه مي‌توانيد با انتخاب سرويس‌هاي مناسب ادامه نصب نرم‌افزار را پي بگيريد. مايكروسافت اكيداً توصيه مي‌كند كه براي داشتن امنيت بهتر اگر از ماجولي استفاده نمي‌كنيد، از نصب آن خودداري كنيد. اما اگر به منظور آموزش نرم‌افزار را نصب مي‌كنيد، مي‌توانيد همه ماجول‌هاي آن را نصب كنيد.

توصيه مي‌كنم همه مثال‌ها و راهنماي نرم‌افزار كه به آن Books On Line مي‌گوييم را نيز حتماً نصب كنيد كه بعداً حتماً به كارتان خواهد آمد. براي نصب همه ماجول‌ها مي‌توانيد با انتخاب گزينه Advance از صفحه بعدي كمك بگيريد (شكل 5).

شکل 5


در صفحه بعدي شما دو انتخاب خواهيد داشت: انتخاب اول، گزينه Default instance است. اين گزينه هنگامي استفاده مي‌شود كه براي اولين بار مشغول نصب SQL  Server روي سيستم خود هستيد. اما اگر روي سيستم خود داراي SQL Server  هستيد، سيستم جديدي كه نصب مي‌كنيد، حتماً بايد داراي يك نام جديد باشد تا قابل شناسايي باشد.

بنابراين گزينه Named Instance را انتخاب مي‌كنيم و يك نام را در قسمت مربوطه براي سيستم خود وارد مي‌كنيم و سپس با گزينه Next به صفحه بعد مي‌رويم. شايد از خود بپرسيد: به چه دليلي ممكن است نياز داشته باشيم چند نسخه از اين نرم‌افزار را روي سيستم خود داشته باشيم.

مايكروسافت چهار دليل را براي اين مسئله بيان مي‌كند: اول هنگامي كه بخواهيد چند نسخه مختلف را به طور همزمان روي سيستم خود داشته باشيد. دوم هنگامي كه مي‌خواهيد كار يك برنامه براي برقراري ارتباط بين چند سيستم را تست كنيد.

بدين ترتيب به جاي اين‌كه چند سيستم را روي چند كامپيوتر اجرا كنيد، همه سيستم‌ها را روي يك كامپيوتر نصب مي‌كنيد و بعد تست مي‌كنيد. بديهي است اين روش داراي صرفه اقتصادي بيشتري است. دليل سوم هنگامي كه داراي چند مشتري هستيد كه هر كدام سيستم خود را مي‌خواهند و چهارم مربوط به زماني است كه داراي چند برنامه روي سيستم خود هستيد كه هر برنامه نيازمند سيستم خود است (شكل 6).


شکل 6


در ادامه بايد كاربران مجاز را با سطح دسترسي مشخص براي سيستم معلوم  كنيد. براي اين كار سه راه وجود دارد: اول شما انتخاب مي‌كنيد كه افرادي كه به كامپيوتري كه سيستم مديريت پايگاه شما روي آن نصب است دسترسي دارند با همان username و password به SQL Server2005 دسترسي خواهند داشت. حالت دوم هنگامي است كه خود username و password جديد براي كاربر انتخاب مي كنيد. حالت سوم نيز هنگامي است كه به ازاي هر سرويس، كاربر تعريف مي‌كنيد (شكل 7).

شکل 7


همان‌طور كه در شكل 7 مي‌بينيد، مي‌توانيد از قسمت پايين سرويس‌هايي كه بعد از نصب مي‌خواهيد اجرا شود را انتخاب كنيد. با انتخاب گزينه NEXT به صفحه بعد مي‌رويد. در اين صفحه نحوه تعيين هويت را براي SQL Server2005 معلوم مي‌كنيد.

براي اين‌ كار دو راه‌حل داريد: اول انتخاب Windows Authentication Mode كه موجب مي‌شود سيستم از روال‌هاي امنيتي سيستم‌عامل استفاده كند و دوم Mixed Mode كه هم روال‌هاي سيستم‌عامل است و هم ساير روال‌هاي تعريف شده براي خود SQL Server. بايد توجه داشت كه با انتخاب Mixed Mode بايد نام و رمز مدير سيستم را معلوم كنيد.

در اينجا دو نكته اساسي وجود دارد: اول اين‌كه Windows Authentication Mode از امنيت بيشتري برخوردار است و البته در اينجا دليل استفاده از سيستم‌عامل Windows Server2003 معلوم مي‌شود. دوم اين‌كه، اگر از Mixed Mode استفاده مي‌كنيد، حتماً بايد براي مدير سيستم از يك Password قوي استفاده كنيد. توجه داشته باشيد كه Mixed Mode هنگامي كاربرد دارد كه كاربران زيادي از طريق يك برنامه با SQL Server2005 ارتباط برقرار مي‌كنند (شكل 8).

شکل 8


در صفحه بعد مي‌توانيد نحوه ذخيره‌سازي اطلاعات را از نظر نحوه كد شدن حروف و كاراكترها انتخاب كنيد. توجه داشته باشيد كه اين انتخاب براي حالت كلي است و البته در خروجي شما هنگامي كه مي‌خواهيد خروجي منظم باشد، اثر مستقيم دارد.

يعني هر Collation داراي نظم خاصي است. البته مي‌توانيد به ازاي هر سرويس قرارداد خاصي  تنظيم كنيد. براي اين ‌كار كافي است فقط تيك اول صفحه را فعال كنيد. اما فعلاً بهتر است به همان صورت پيش فرض نصب كنيد (شكل 9).

شکل 9


در صفحه بعد دو گزينه مي‌بينيد: اولي براي اين‌كه اگر سيستم به مشكلي برخورد كرد، اطلاعات خطاي شما به صورت خودكار براي مايكرو سافت ارسال شود تا بتواند از آن براي بهتر شدن محصولات خود استفاده كند و در عين حال سعي كند مشكل شما را حل كند.


دوم براي اين است كه اطلاعات كاربرد و ويژگي‌هاي مورد استفاده شما از SQL Server2005 به مايكروسافت فرستاده شود تا اگر در كار شما مطلب يا كاربرد جديدي بود، در نسخه هاي بعدي به عنوان قسمتي از راهنما به كاربران عرضه شود.

در صفحه بعد خلاصه‌اي از چيزي كه قرار است روي سيستم شما نصب شود، مشاهده مي‌كنيد و با انتخاب گزينه Install فرآيند نصب آغاز مي‌شود و البته خوشبختانه فرايند پيشرفت در هر سرويسي جداگانه نمايش داده مي‌شود كه اين خود براي كاربر درك بهتري پديد مي‌آورد (شكل 10).

شکل 10


و بدين ترتيب نصب SQL Server2005 به پايان مي‌رسد.

4- آشنايي با محيط SQL Server Management Studio

بعد از نصب SQL Server2005 با مراجعه به گزينه Start و انتخاب programs در windows XP يا انتخاب All programs در Windows Server2003 و انتخاب Microsoft SQL Server2005 گزينه SQL Server Management Studio را مشاهده خواهيد كرد و با انتخاب اين گزينه محيط اين برنامه ظاهر خواهد شد.
 
از اين به بعد اين گونه كارها را بدين شكل نمايش مي‌دهيم.
مثلاً: Start>Programs>Microsoft SQL Server 2005>SQL Server Management studio در ابتدا با صفحه‌اي مانند شكل 11 روبه‌رو مي‌شويد.

شکل 11


اگر روي كامپيوتر خود چند  سيستم نصب كرده‌ايد، مي‌توانيد سرويس‌دهنده‌اي را كه مي‌خواهيد به آن وصل شويد، از قسمت Server Name انتخاب كنيد و البته نحوه وصل شدن به سيستم و نام ورمز كاربري را نيز توسط قسمت Authentication معين كنيد تا بتوانيد به SQL Server Management Studio (از اين به بعد آن را به اختصار SSMS مي‌ناميم) وصل شويد و بدين‌ترتيب شكل 12 را خواهيد ديد.

شکل 12


همان‌طور كه در شكل مي‌بينيد، در سمت چپ داراي Object explorer هستيم. بدين ترتيب مي‌توانيم به همه شيءهاي موجود دسترسي داشته باشيم. اگر بخواهيم نگاهي ظاهري به اين قسمت داشته باشيم، اولين چيزي كه جلب توجه مي‌كند، وجود يك شيء به نام Server است و البته درست حدس زديد.

با دسترسي به اين شيء اين امكان براي ما وجود خواهد داشت كه همزمان به چند Server مختلف دسترسي داشته باشيم. براي اين‌ كار كافي است از منوي file گزينه Connect Object Explorer را انتخاب كنيد تا بتوانيد سرور جديدي را كه مي‌خواهيد به آن وصل شويد، انتخاب كنيد.

در Object Explorer بعد از گزينه Server داراي شيء Database هستيم. نكته بسيار جالب و مهم اين است كه در SQL Server2005 شما System Database و Database Snapshot را به صورت جدا از بقيه پايگاه هاي كاربر مي‌بيند و بدين ترتيب امكان مديريت بسيار بيشتر و راحت‌تر براي كاربر وجود دارد.

در قسمت پايگاه‌هاي كاربر اگر هر پايگاه را انتخاب كنيد داراي موارد ذيل هستيد: اول از همه، Database Diagramكه شامل دياگرام‌هاي رسم شده براي پايگاه است. سپس Tables كه همان جداول پايگاه است وجود دارد. بعد گزينه‌ view كه فهرست ويوهاي پايگاه در آن قرار دارد و به همين ترتيب بقيه موارد نيز ديده مي‌شود.

از شماره بعد به توضيح همزمان روش‌هاي پياده‌سازي پايگاه و امكاناتي مي‌پردازيم كه SQL Server2005 براي كاربر به وجود مي‌آورد.

کيوان تيرداد
ماهنامه شبکه - شهريور ۱۳۸۶ شماره 79

مديريت پايگاه داده‌ها در SQL Server - بسته‌هايDTS

   


اشاره :

در ادامه مباحث مربوط به مديريت پايگاه‌هاي اطلاعاتي، در آخرين قسمت اين مجموعه، يكي از ابزارهاي جالب قابل استفاده در SQL Server را كه امكان نقل و انتقال اطلاعات و يا پردازش آن‌ها را به‌صورت دستي يا اتوماتيك و در قالب يك يا چند عمل مجزا و در عين حال مرتبط با يكديگر فراهم مي‌آورد، مورد بررسي قرار مي‌دهيم. اين ابزار كه سرويس انتقال اطلاعات (Data Transformation service) نام دارد شامل سه قسمت مختلف بوده كه مهمترين آن بسته‌هاي (DTS (DTS Packages است.

 


DTS چيست؟
DTS يك ابزار  با واسط گرافيكي كاربر جهت انتقال اطلاعات موردنياز از يك محل به محل ديگر است. با استفاده از اين  ابزار مي‌توان يك سري از اطلاعات موجود در سيستم را با استفاده از روش‌هاي عادي كاري پايگاه داده مانند دستور SELECT انتخاب كرده و به يك يا چند مقصد مختلف فرستاد. ويژگي ديگر اين نوع انتقال اطلاعات اين است كه مي‌توان آن را با استفاده از روش‌هاي مخصوص، زمانبندي (schedule) كرده تا به صورت اتوماتيك انجام شود. ويژگي سوم آن اين است كه علاوه برامكان استفاده از زبان SQL  براي استخراج اطلاعات يا پردازش قبل از انتقال آن، مي‌توان با استفاده از امكانات ديگري  پردازش و انتقال اطلاعات را انجام داد. البته واژه DTS در كل به يك سري ابزارها و سرويس‌هاي مختلف اطلاق مي‌شود كه مهمترين ابزار يا قسمت آن همان
 بسته‌هاي ( DTS (PACKAGE DTS بوده كه كار مهم انتقال و پردازش زمانبندي شده اطلاعات را انجام مي‌دهد.

بسته‌هاي DTS 
اين بسته‌ها كه مهمترين قسمت ابزارهاي DTS مي‌باشند، با استفاده امكاناتي كه در آن‌ها تعبيه شده است، قادرند وظيفه انتقال و پردازش اطلاعات را در قالب يك روتين كه مي‌تواند شامل مسيرهاي متوالي يا موازي مي‌باشد انجام دهند. اين روتين در قالب يك فايل ساختاريافته با فرمت‌هايي مثل فرمت برنامه‌ها و ماژول‌هاي ويژوال بيسيك يا فرمت‌هاي ديگري نظير فايل‌هاي Meta ذخيره مي‌شود و با استفاده از روش‌هايي قابل زمانبندي، ويرايش، تغيير و همچنين رمزگذاري مي‌باشند. يك بسته DTS در واقع شامل چند آيتم مرتبط به يكديگر بوده كه هر كدام يك وظيفه مشخص را انجام داده و نتيجه را به ديگري انتقال مي‌دهند.

اين آيتم‌ها به‌عنوان Task نامگذاري شده و در واقع محتويات يك بسته DTS را تشكيل مي‌دهند. هر كدام از Task‌هاي موجود در يك بسته DTS به صورت جداگانه توسط كاربر پيكربندي شده و وظيفه موردنظر مثل پردازش، كپي‌كردن و يا انتقال اطلاعات به آن انتساب داده مي‌شود.
 
سپس با به‌وجود آوردن ارتباط لازم ميان Task‌هاي موجود، امكان عملي كردن فرآيند موردنظر ميسر مي‌شود. يك Task مي‌تواند يكي از انواع زير باشد: 

1- Importing / Exporting 
اين نوع Task قادر است اطلاعات را از جايي مثل يك جدول بانك اطلاعاتي SQL Server يا هر نوع ديگر مثل اكسس و يا يك فايل ساده  Text بخواند و آن را در يك جدول بانك اطلاعاتي SQL Server وارد (Import) كند. همچنين اين Task مي‌تواند عكس اين عمل را انجام دهد. يعني اطلاعات يك جدول بانك اطلاعاتي يا قسمتي از آن اطلاعات را به فرمت اكسس، اكسل يا فايل متني (Text) درآورد (Export) و آن را در مقصد موردنظر قرار دهد.

2- Transform 
با استفاده از اين نوع Task مي‌توان با نوشتن يك دستورالعملSELECT نتيجه حاصل از عمل پرس‌وجو برروي يك يا چند جدول بانك اطلاعاتي مبدا را به يك جدول موجود در بانك اطلاعاتي مقصد انتقال داد. در اين روش بانك اطلاعاتي مبدا و مقصد مي‌توانند جدا از هم و يا يكسان باشند.

3- Copy 
اين نوع Task مي‌تواند هر موجوديتي در يك بانك اطلاعاتي مثل ديدها (view)، ايندكس‌ها، لاگ‌ها، روتين و توابع، تريگرها و هر چيزي را به يك بانك اطلاعاتي ديگر منتقل كند.

4- Send/Receive Message
با اين نوعTask  مي‌توان بين بسته‌هاي مختلف DTS موجود در سيستم ارتباط برقرار كرده و بين آن‌ها پيغام رد و بدل كرد. همچنين با استفاده از آن مي‌توان يك بسته را در داخل يك بسته ديگر فراخواني يا اجرا كرد. به‌علاوه اين‌كه اين نوع Task امكان ارسال Email را هم دارد.

5- Execute 
با استفاده از اين نوع Task مي‌توان يك سري دستورالعمل SQL يا حتي اسكريپت‌هاي ActiveX و يا فايل‌هاي Exe   را اجرا كرد.

Taskهاي از پيش تعريف شده در SQL Server عبارتند از:

1-FTP : جهت دريافت يك يا چند فايل از يك سرور FTP به داخل بسته DTS  

2- ActiveX Script: براي استفاده از قابليت‌هاي زبان‌هاي اسكريپتي مثل ويژوال بيسيك يا جاوا در يك پردازش ‌خاص.

3- Transform Data: جهت انتقال اطلاعات بين دو منبع اطلاعاتي.

4- Execute Process: جهت اجراي يك فايل Exe 

5- Execute SQL: جهت اجراي يك سري دستورات SQL 

6- Data Driven Query: براي ايجاد يك منبع انتقال اطلاعات با استفاده از دستورSELECT 

7- Copy Object: اينTask مي‌تواند كليه موجوديت‌هاي يك بانك اطلاعاتي را به بانك اطلاعاتي ديگر منتقل كند.

8- Send Mail: جهت ارسال ايميل به يك مقصد مشخص

9- Bulk Insert: جهت ورود (Import) اطلاعات از يك فايل به يك جدول بانك اطلاعاتي

10- Execute Package: با استفاده از اين Task مي‌توان يك بسته DTS ديگر را در داخل بسته DTS جاري لود و اجرا كرد.

11- Message Queve II: براي استفاده از امكانات پيغام‌دهي سرويس MSMQ ويندوز 2000 يا 2003 براي مبادله پيغام بين برنامه‌ها و  ايستگاه‌هاي مختلف

12- Transfer Error Massages: براي انتقال پيغام‌هاي خطاي موجود در جدول سيستمي sysmessages از يك بانك اطلاعاتي به بانك ديگر

13- Transfer DataBase: براي انتقال كل بدنه يك بانك اطلاعاتي با تمام محتوا، ساختار و اطلاعاتش از يك سرور به سرور ديگر.

ارتباط DTS  
مبدا و مقصد داده‌هاي منتقل شده توسط Task‌ها، مي‌توانند از انواع فايل‌هاي مختلف انتخاب شوند. كليه منابع اطلاعاتي كه از OLEDB و يا ODBC پشتيباني كنند مانند اوراكل، كليه فرمت‌ها برنامه‌هاي مشهوري كه در ذخيره و پردازش اطلاعات كاربرد زيادي دارند مثل اكسل، فاكس‌پرو، پاراداكس، اكسس و امثال آن، فايل‌هاي متني و همچنين كليه منابع اطلاعاتي كه ساختاري به غير از بانك‌هاي رابطه‌اي دارند مثل Exchange Server و بسياري برنامه‌هاي ديگر، مي‌توانند از جمله اين موارد باشند و در ساختن يك بسته DTS به عنوان مبدا يا مقصد به‌كار روند.

 

شكل 1

شكل 2

شكل 3

شكل 4

شكل 5

DTS Work Flow
مراحل زماني و توالي اجراي قسمت‌هاي مختلف يك بسته DTS را جريان كاري DTS مي‌نامند. در واقع با استفاده از اين جريان‌هاي كاري مي‌توان مشخص كرد كه كدام Task بايد زودتر اجرا شود و يا اين‌كه اجراي يك Task پيش نياز اجرا شدن چه Task (هاي) ديگري است. بدين‌وسيله اجرا شدن هر Task نسبت به Task ديگري داراي اولويت كمتر، بيشتر و يا حتي برابر مي‌تواند باشد. بدين‌معني كه در برخي اوقات يك Task بايد تا اتمام موفقيت‌آميز يك Task  ديگر صبر كند.

اين مورد بيشتر در جايي كاربرد دارد كه يك Task بايد برروي خروجي و يا اطلاعات حاصل از نتيجه پردازش يك Task   ديگر كار كند. در برخي اوقات هم اگر عملكرد دو Task هيچ ربطي به يكديگر نداشته باشند، مي‌توان زمان اجراي آن دو را به صورت موازي (Parallel) يعني اجراي همزمان (در صورت امكان) درنظر گرفت.

در SQL Server سه نوع جريان كاري مختلف وجود دارد كه به نام‌هاي on completion ،on success ،on failure  عبور از يك Task به Task ديگر را به ترتيب در صورت اتمام پردازش، پردازش موفقيت‌آميز و پردازش غيرموفق Task  مبدا، انجام مي‌دهند.

به عنوان مثال: فرض كنيد در يك سيستم اطلاعاتي توزيع شده (Distributed) به‌صورت منظم و روزانه و در يك ساعت خاص بايد به يك سايت FTP متصل شده، يك فايل با نام  Imp.txt را كه هر روز در سايت مذكور روزآمد update مي‌شود را دريافت كرده، و آن را در جدول customers از پايگاه داده Northwind قرار دهيم.
 
فرض مي‌كنيم اين فايل متني (Text) شامل ليست مشتريان جديدي است كه روزانه به سيستم فروش ما اضافه مي‌شود. بنابراين پس از قرار دادن مشتريان جديد در جدول مذكور بايد يك دستور SQL را اجرا كنيم تا براي مشتريان تازه وارد شده در جدول customers يك حساب تفضيلي در جدول Accounts ايجاد كند.
 
از قرار معلوم در اين مثال به يك DTS Connection جهت دسترسي به پايگاه داده Northwind، يك Task از نوع FTP ، يك Task ديگر از نوع  Bulk Insert و  نهايتاً يك Task از جنس Execute SQL نيازمنديم. به همين منظور بر روي زبانه Data Transformation Services در Enterprise Manager كليك كرده  سپس بر روي آيتم Local Package كليك سمت راست مي‌كنيم و دستور New Package را انتخاب مي‌كنيم تا پنجره ويژه طراحي بسته‌هاي DTS باز شود. ابتدا يك Connection از جنس OLEDB را بر روي صفحه قرار داده و آن را به پايگاه داده Northwind متصل مي‌كنيم. (شكل 1)‌

سپس از داخل ليست وظايف (Tasks)، يك شي از جنس FTP را برروي صفحه قرار داده و آدرس سايت موردنظر و مكان قرارگيري فايل دانلود شده را در محل Directory Path مشخص مي‌كنيم، سپس به زبانه Files رفته و فايل يا فايل‌هايي را كه قرار است دانلود شوند مشخص مي‌نماييم كه در اين مثال يك فايل متني با نام New Customer.txtرا كه حاوي اطلاعات مشتريان جديد است انتخاب مي‌كنيم. (شكل2)‌

در مرحله بعد يك شي از جنس BULK Insert را برروي صفحه طراحي قرار داده و قسمت‌هاي Connection ،Table و Data file آن را به ترتيب با اتصال پايگاه ساخته شده، جدول مشتريان و مقصد فايل دانلود شدني توسط FTP را پر مي‌كنيم. (شكل 3)

در آخرين مرحله ايجاد اشياء، اكنون نوبت به ايجاد يك شي Execute SQL جهت اجراي تابع از پيش ساخته شده است كه براي كليه مشتريان جديد جدول customers يك حساب در جدول Accounts باز مي‌كند. اين شي را بر روي صفحه قرار داده و دستور SQL موردنظر را در محل SQL statement وارد مي‌كنيم. (شكل 4)

پس از ايجاد تمام اشياء موردنياز، اكنون نوبت به ايجاد جريان‌هاي كاري لازم (WorkFlows) بين آن‌ها مي‌رسد. آنچه به نظر مي‌رسد اين است كه ابتدا يك جريان كاري بين دو موجوديت FTP و BULK Insert ايجاد كنيم. از آنجا كه اين جريان كاري بايد فقط در صورت موفقيت‌آميز بودن عمليات دريافت فايل توسط شي FTP منتقل شود، بنابراين براي ايجاد جريان كاري مذكور، با استفاده از حركت ماوس هر دو شي مذكور را انتخاب كرده و سپس از منوي WorkFlow  دستور on success را انتخاب مي‌كنيم. همين عمل را براي دو شي Bulk Insert و Execute SQL هم انجام مي‌دهيم. (شكل 5)
 
اكنون بسته DTS آماده اجرا است. اين بسته مي‌تواند هم به صورت دستي و از همين محل طراحي تست يا اجرا شود و هم مي‌تواند براي اجرا در مقاطع زماني خاص (مثلاً روزي يك بار) در ساعت مخصوص زمانبندي (schedule)  شود تا به صورت خودكار و در زمان موردنياز اجرا گردد. بدين‌منظور، پس از ساختن و ذخيره كردن بسته DTS مذكور، از محيط طراحي DTS خارج شده و برروي نام بسته موردنظر كليك سمت راست مي‌كنيم و دستور Schedule Package را انتخاب مي‌نماييم. در اينجا مي‌توانيم زمان و توالي اجراي اتوماتيك بسته DTS ساخته شده را تعريف كنيم.

مهيار داعي‌الحق
ماهنامه شبکه - اسفند ۱۳۸۳ شماره 52

اصول طراحي بانك هاي اطلاعاتي رابطه اي - قسمت آخر



در قسمت‌هاي پيشين اين مقاله مراحل مختلف و اوليه طراحي يك بانك اطلاعاتي رابطه‌اي ساده تشريح شد. اين مراحل عبارت بودند از «مشخص كردن كاربرد اصلي بانك اطلاعاتي»، «تفكيك جدول‌هاي مورد نياز براي ذخيره‌سازي داده‌ها»، «مشخص كردن فيلدهاي هر جدول» و «تعريف رابطه ميان جدول‌ها» اين گام‌ها گر چه ساده و حتي بديهي به نظر مي‌رسند، اما رعايت نكاتي كه در هر مرحله ذكر شد حتي در پروژه‌هاي بزرگ و سنگين نيز اهميت خود را از دست نمي‌دهد. در اين قسمت بحث را با توضيحي درباره رابطه يك به يك و بازبيني كل پروژه به پايان مي‌بريم.

متن کامل مقاله ( 110 کيلوبايت )

بهروز نوعي پور
ماهنامه شبکه - تير و مرداد ۱۳۸۲ شماره 34


اصول طراحي بانك هاي اطلاعاتي رابطه اي - قسمت چهارم

 

 
اشاره :

در مهم‌ترين گام طراحي بانك‌هاي اطلاعاتي، بايد به نرم‌افزار مديريت بانك اطلاعاتي بگوييد كه چگونه اطلاعات پخش شده در جدول‌ها را بازيابي و تركيب كند تا حاصل كار با معني و قابل استفاده باشد.

متن کامل مقاله ( 118 کيلوبايت )


بهروز نوعي پور
ماهنامه شبکه - خرداد ۱۳۸۲ شماره 33

اصول طراحي بانك هاي اطلاعاتي رابطه اي - قسمت سوم

 


اشاره :

در قسمت نخست مقاله حاضر كلياتي پيرامون طراحي بانك‌هاي اطلاعاتي رابطه‌اي مطرح شد. در قسمت دوم نيز گام‌هاي اول و دوم طراحي يعني «مشخص كردن كاربرد اصلي بانك اطلاعاتي» و «تفكيك جدول‌هاي مورد نياز براي ذخيره‌سازي داده‌ها» مورد بررسي قرار گرفت. اينك در قسمت سوم، رويه تعريف فيلدهاي هر جدول را مرور مي‌كنيم. منبع اصلي اين مقاله سايت MSDN مايكروسافت بوده است و مثال‌ها پيرامون بانك اطلاعاتي Northwind در نرم‌افزار MS Access مي‌باشند.

متن کامل مقاله ( 120 کيلوبايت )


 
بهروز نوعي پور
ماهنامه شبکه - ارديبهشت ۱۳۸۲ شماره 32


اصول طراحي بانك هاي اطلاعاتي رابطه اي - قسمت دوم

 

 
مقاله چند قسمتي حاضر، اصول و گام‌هاي طراحي يك بانك اطلاعاتي رابطه‌اي (Relational Database) را مورد بررسي قرار داده است. در قسمت اول مقاله (شماره 209)، كلياتي از بحث مطرح شد. در اين قسمت گام‌هاي اول و دوم طراحي را دنبال خواهيم كرد. در اين مقاله از بانك اطلاعاتي نمونه Northwind Traders (همراه نرم‌افزار MS Access) به عنوان مثال استفاده شده است. از سايت مايكروسافت به عنوان منبع اين مقاله استفاده شده است.

متن کامل مقاله ( 127 کيلوبايت )

بهروز نوعي پور
ماهنامه شبکه - فروردين ۱۳۸۲ شماره 31

اصول طراحي بانك اطلاعاتي رابطه اي - قسمت اول




اشاره :

طراحي بانك اطلاعاتي رابطه‌اي (Relational Database Design) يكي از مباحث مهم در سيستم‌هاي اطلاعاتي است و نرم‌افزارهايي كه براي اين منظور ساخته شده‌اند، همواره يكي از مهم‌ترين ابزارهاي كامپيوتري به شمار آمده‌اند. طي چند سال گذشته كه مجموعه نرم‌افزاري آفيس مايكروسافت به يكي از محبوب‌ترين ابزارهاي تحت ويندوز تبديل شده، برنامه Microsoft Access مورد توجه بسياري از كاربران قرار گرفته است. امروزه با گسترش كاربرد سايت‌هاي وب، اهميت به كارگيري پايگاه داده‌ها در ساختار سيستم‌هاي اطلاعاتي دو چندان شده است. به همين دليل است كه نرم‌افزارهايي مثل SQL Server، MySQL و اوراكل نقش مهمي در طراحي سايت‌هاي ديناميك و برنامه‌نويسي براي وب دارند. ويژگي مشترك اين نرم‌افزارها آن است كه بيشتر قابليت‌هايشان را از طريق يك زبان مشترك – يعني SQL – مي‌توان به كار گرفت. از سوي ديگر، برخي از كارشناسان كامپيوتر آشنايي با مباني بانك‌هاي اطلاعاتي را بخشي از «سواد كامپيوتري» تلقي كرد‌ه‌اند، چنان كه آشنايي با اين اصول،‌ قسمتي از يك برنامه آموزش همگاني كامپيوتر در جهان (موسم به ICDL) را تشكيل مي‌دهد. در مقاله چند قسمتي كه پيش روي شماست گام‌هاي طراحي يك بانك اطلاعاتي رابطه‌اي به زباني ساده تشريح شده است. محتواي اين مقاله بيشتر نحوه كار با نرم‌افزار اكسس را مدنظر دارد،‌ اما عمده مطالب، كم و بيش براي كار با نرم‌افزار SQL Server نيز قابل استفاده است.

متن کامل مقاله ( 120 کيلوبايت )

ماهنامه شبکه - بهمن ۱۳۸۱ شماره 29

مديريت پايگاه داده ها در SQL server - قسمت دوم : نظارت بر عملكرد سيستم     


  

اشاره :

قسمت اول اين مقاله به بحث پيرامون ايجاد نسخه‌هاي پشتيبان (Back up) از يك بانك اطلاعاتي مي‌پرداخت. در اين قسمت قصد داريم موضوع مهم نظارت يا مانيتورينگ عملكرد سيستم و كاربران در SQL Server كه يكي از وظايف مديريت سيستم در جهت كشف ايرادات آن است را بررسي كنيم.

 


يكي از اساسي‌ترين كارهايي كه بعد از پياده‌سازي يك بانك اطلاعاتي و در حين استفاده كاربران از آن بايد صورت گيرد، نظارت دقيق بر رفتار سيستم و بررسي واكنش‌هايي است كه آن بانك اطلاعاتي در شرايط خاص و ضمن استفاده‌هاي متنوع كاربران مختلف از خود نشان مي‌دهد. بنابراين اين نظارت دايمي بايد طبق اصول خاص و يك برنامه منظم و با استفاده از امكاناتي كه بانك اطلاعاتي در اختيار مديريت سيستم قرار مي‌دهد انجام گيرد تا از بروز مشكلات احتمالي جلوگيري به عمل آيد. اين مشكلات به طور كلي به سه دسته عمده  كُند شدن سرعت جستجو در سيستم (Query performance problem) ،كم شدن تعداد فرايندهاي قابل اجرا در  واحد زمان (Transactions  Throughput problem) ،كاهش كارايي سيستم در اثر افزايش كاربران و تداخل كارهاي آن‌ها در يكديگر ( Concurrent users problem) تقسيم مي‌شود. براي اين منظور در SQLerver ابزارهاي خاصي براي مانيتورينگ سيستم درنظر گرفته شده تا مدير سيستم بتواند به موقع نقاط ضعف سيستم (از لحاظ نرم‌افزاري يا سخت‌افزاري) را شناسايي كرده و قبل از اين‌كه سيستم را دچار بحران نمايد يا اين‌‌كه كار به گله‌مند شدن كاربران بيانجامد با مشورت طراحان، برنامه‌نويسان و مسؤولين شبكه راه‌حل مناسبي براي آن مشكل پيدا كند. در صورت كشف مشكل مذكور، ايجاد تغييراتي در روابط منطقي يا فيزيكي جداول بانك اطلاعاتي توسط طراحان بانك، بهينه‌سازي كدهاي برنامه‌نويسي شده و رفع نقاط ضعف آن توسط برنامه‌نويسان و ارتقاي سخت‌افزار شبكه و سرور بانك اطلاعاتي توسط مسؤولين شبكه مي‌تواند راهگشاي بسياري از اين نوع معضلات به حساب آيد. در SQL Server يك ابزار مناسب براي مانيتورينگ يك بانك اطلاعاتي وجود دارد كه در اين‌جا به معرفي آن مي‌پردازيم.

SQL Server Profiler
اين ابزار در واقع برنامه‌اي است كه قادر به اشكال‌زدايي دستورات SQL مي‌باشد. هر نوع دستور SQL كه به تنهايي يا از داخل يك برنامه يا از طرف يك روال ذخيره شده (Stroed Procedvre) و يا هر جاي ديگر اجرا شود توسط اين برنامه شناسايي و ثبت مي‌شود. سپس برنامه مذكور عمل تجزيه وتحليل خود را بر روي اين دستور SQL انجام داده و نتايج آن را به مدير سيستم نمايش مي‌دهد.

نحوه كار برنامه
برنامه پروفايلر ليستي از رخدادهايي را كه قادر به تعقيب آن‌ها است در اختيار كاربر قرار مي‌دهد. اين رخدادها پس از انتخاب كاربر در درون يك صف (Queue) قرار گرفته و هرگاه يكي از رخدادها به وقوع بپيوندد، پروفايلر شرح كاملي از جزييات آن را در يك فايل جهت گزارشي به مدير سيستم، ثبت مي‌كند. اين عمليات تعقيب كه در پروفايلر به آنTrace گفته مي‌شود كاملاً توسط كاربر قابل تنظيم است.
رخدادهاي قابل تعقيب توسط پروفايلر به انواع مختلفي تقسيم‌بندي مي‌شوند كه در قسمت Events از منويWewTrace يعني زماني‌كه كاربر قصد تعريف يك تعقيب جديد را دارد، مشاهده مي‌شوند.

1- Cursors 
اين مجموعه رخدادهاي مربوط به اتفاقاتي است كه باعث ايجاد شدن، مورد استفاده قرار گرفتن و حذف شدن يك دسته ركوردهاي اطلاعاتي از يك يا چند جدول مي‌شود. همان‌طور كه مي‌دانيد در SQL Server مي‌توان با استفاده از دستور SELECT تعدادي از جداول بانك اطلاعاتي را با هم لينك كرده و مجموعه ركوردهاي اطلاعاتي مربوطه را در يك گروه به نام كرسر قرار داد (همان چيزي كه در زبان‌هاي برنامه‌نويسي مثل ويژوال بيسيك به آن Recordset گفته مي‌شود) هر عملي كه باعث ايجاد شدن يا هر نوع عمليات ديگر بر روي يك كرسر شود مي‌تواند مورد تعقيب پروفايلر قرار گرفته و ثبت شود.

2- Data Base 
اين مجموعه از رخدادها مربوط به فايل‌هاي داده‌اي يك بانك اطلاعاتي است. هر تغييري كه در ساير فايل‌هاي داده‌اي و فايل‌هاي لاگ يك بانك ايجاد شود در اين مجموعه قرار مي‌گيرد.

3- Errors and Warning 
مقام پيام‌هاي خطا و هشدار كه در زمان اجراي دستورات SQL  يا در زمان كامپايل و اجراي SPها و يا Triggerها به كاربر داده مي‌شود و همچنين خطاهاي مربوط به OLE DB در اين گروه قرار مي‌گيرد.

4- Locks  
اين گروه از رخدادها، بيشتر زماني مورد استفاده قرار مي‌گيرد كه يك برنامه كاربردي در قفل كردن و آزاد كردن ركوردهاي جداول بانك اطلاعاتي دچار ضعف و اشتباه مي‌شود.
همان‌طور كه مي‌دانيد بسياري از برنامه‌هاي كاربردي در مقاطع زماني خاص اقدام به قفل كردن يك يا چند جدول اطلاعاتي مي‌كنند كه اين كار و همچنين آزاد كردن آن جداول بايد با حساسيت و دقت خاصي انجام شود تا در كار بقيه كاربران اخلال ايجاد نكند اما متأسفانه بسياري از اين نوع برنامه‌ها خصوصاً برنامه‌هايي كه قدمت چنداني ندارند اغلب از اين لحاظ دچار بي‌دقتي و ضعف زيادي هستند.

5- Scans  
هر عملي كه در حافظه اصلي تخصيص داده شده به SQL server  قابل دستيابي باشد در اين دسته قرار مي‌گيرد. به‌خصوص عمليات مربوط به Cache كه در داخل موتور بانك اطلاعاتي انجام مي‌شود جزو اين دسته محسوب مي‌شوند.

6- Stored procedveres 
شامل كليه وقايعي كه ممكن است براي يك روال رخ دهد مي‌باشد. كامپايل، فراخواني، شروع اجرا، وضعيت در حال اجرا، پايان اجرا، همگي از جمله رخدادهاي قابل وقوع در اين دسته مي‌باشند.

7- TSQL 
اين نوع رخدادها شامل كليه وقايعي است كه باعث اجراي هر يك از دستورات زبان TSQL  به صورت تكي يا دسته‌اي (Batch) مي‌شود. دستورات SELECT ،Insert ،UpdATE ، DELETE و ... هر كدام آغاز و پاياني مشخص با نتايج معين در يك بانك اطلاعاتي دارند كه مي‌توانند به وسيله اين نوع رخداد مورد بررسي قرار گيرند.

8- Transaction   

شكل 1

در اين دسته، كليه وقايع مربوط به فرآيند از جمله شروع (BEGIN) تأييد
 (Commit) و بازگشت (Roll Back) قرار مي‌گيرند. هر فرآيند شامل چند دستور SQL  مي‌باشد كه يا بايد همگي بدون اشكال اجرا شوند و يا اين‌كه هيچكدام اجرا نگردند.
اهميت فرآيند و استفاده مناسب از آن‌ها در يك بانك اطلاعاتي و برنامه كاربردي مربوط به آن جاي هيچ‌گونه ترديدي را براي وجود ابزاري جهت ثبت و مانيتورينگ وقايع  باقي نمي‌گذارد. لذا اين دسته از رخدادها همانند رخدادهاي SQL يكي از پركاربردترين رخدادها قلمداد مي‌شوند.

9- Session 
اين دسته از وقايع شامل كليه رخدادهاي مربوط به اتصال كاربران به بانك اطلاعاتي (login) و خروج از آن (logout) يا قطع اتصال در اثر بروز هر عاملي (Disconnect) مي‌باشد و براي كنترل و رفع ايراد ورود و خروج كاربران به سيستم مورد استفاده قرار مي‌گيرد.

اجراي آزمايشي يك Trace 

شكل 2

براي شروع، مي‌خواهيم يك تعقيب آزمايشي براي ثبت برخي رخدادهاي قابل وقوع در سيستم با استفاده از پروفايلر بسازيم. براي اين‌كار برنامه Profiler را اجرا كرده و منوي New Trace را كليك مي‌كنيم تا ليستي از وقايع قابل ثبت كه آن‌ها را در قسمت قبل شرح داديم ظاهر شود. در قسمت General كافي است يك نام براي Trace  موردنظر انتخاب كرده و سپس يك مسير براي درج فايل حاوي لاگ رخدادهاي مذكور، به پروفايلر معرفي كنيم. لازم به ذكر است كه پروفايلر قادر است به جاي يك فايل، لاگ‌هاي توليد شده را در يكي از جداول همان بانك اطلاعاتي ذخيره كند. همچنين اگر مايل باشيد كه هيچ لاگي براي شما ثبت نشود، پروفايلر مي‌تواند صرفاً لاگ‌ها را در قالب يك پنجره در داخل خود برنامه به صورت يك ليست به شما نشان دهد (شكل 1).

در ضمن در داخل همين پنجره مي‌توانيد يك الگوي پيش‌ساخته را كه قبلاً توسط خودتان يا ديگران تنظيم شده مورد استفاده قرار دهيد تا در قسمت بعد كه مي‌خواهيد رخدادها را از داخل ليست انتخاب نماييد دچار مشكل نشويد. البته برنامه پروفايلر به صورت پيش‌فرض الگوي استاندارد خودش براي نظارت بر عملكرد كاربران و موتور پايگاه داده را به نام SQL Profilerstandard به شما پيشنهاد مي‌كند كه كافي است با قبول كردن آن به زبانه Events برويد. در آن‌جا طبق الگوي مذكور، يك سري از رخدادها از داخل ليست سمت چپ به صورت اتوماتيك انتخاب شده و جهت لاگ شدن در ليست سمت راست قرار مي‌گيرد، علاوه براي اين‌كه شما هم مي‌توانيد با استفاده از دو كليدAdd  و Remove رخدادهاي موردنظر خودتان را جهت لاگ شدن به ليست سمت راست، اضافه يا كم كنيد (شكل 2).

شكل 3

در اين‌جا فرض بر اين است كه قصد ما ساختن يك  Trace براي كنترل و نظارت بر دستورات SQL در حال اجرا توسط كاربر مدير سيستم يعني sa مي‌باشد بنابراين كافيست صرفاً مجموعه زير گروه TSQL را در ليست سمت راست نگه داريم و بقيه را با كليد Remove به سر جاي خود يعني ليست سمت چپ برگردانم.

در قسمت بعد بايد ستون‌هاي مورد استفاده لاگ را مشخص كنيم. با اين كار پروفايلر اطلاعات مربوط به لاگ‌هاي توليد شده را به شكل مناسبي كه ما مي‌خواهيم توليد مي‌كند اين انتخاب در زبانه Data Coloumns  قابل تنظيم است. به عنوان مثال ستون TextData متن عبارت SQL در حال اجرا را نشان مي‌دهد يا اين‌كه ستون Application  نام برنامه كاربردي كه اين دستور SQL  از طرف آن برنامه، اجرا شده را مشخص مي‌نمايد. بهتر است در اين مرحله كليه ستون‌هاي پيش‌فرض انتخاب شده توسط پروفايلر را قبول كرده و به مرحله آخر يعني فيلتر كردن اطلاعات برسيم (شكل 3).


شكل 4

در زبانه فيلتر (Filter) امكان محدود كردن نمايش اطلاعات لاگ شده (منظور رديف‌هاي آن اطلاعات است) به كاربر داده مي‌شود. به عنوان مثال چون هدف ما صرفاً نمايش دستورات SQL اجرا شده توسط كاربر sa است، به همين دليل يك فيلتر بر روي ستون User DataBase تعريف كرده و قسمت like آن را به كلمه sa انتساب مي‌دهيم. حتي اگر باز هم قصد محدودتر كردن گزارش را داشته باشيد مي‌توانيد روي ستون‌هاي ديگر هم فيلتر بگذاريد. مثلاً براي اين‌كه صرفاً دستورات DELETE كاربر مذكور به شما نشان داده شود مي‌توانيد در همين جا علاوه بر فيلتر قبل، يك فيلتر جديد بر روي ستون Text Data تعريف كرده و عبارت LIKE  آن را به كلمه DELETE منتسب كنيد (شكل 4).

پس از طي مراحل فوق، اكنون نوبت به اجراي Trace مذكور مي‌رسد اين‌كار از طريق كليك بر روي دكمه Run انجام مي‌گيرد. بلافاصله يك پنجره جديد حاوي ستون‌هايي كه ما در قسمت Coloumns انتخاب كرده بوديم نمايش داده مي‌شود. اين ليست بعد از انجام هر دستور SQL كه شرايط موردنظر ما در قسمت Filter برآورده كند به روز
(Refresh)  مي‌شود و كليه دستورات مذكور را به ترتيب زمان انجام، در درون ليست قرار مي‌دهد (شكل 5).
 

شكل 5

مهيار داعي‌الحق
ماهنامه شبکه - مهر ۱۳۸۳ شماره 47

مديريت پايگاه داده ها در SQL Server - قسمت سوم: انتقال اطلاعات با Replication

اشاره :
در دو شماره گذشته ماهنامه شبكه، بحث مديريت بانك‌هاي اطلاعاتي تحت SQL Server را با دو موضوع ايجاد نسخه‌هاي پشتيبان و نظارت بر سيستم يا مانيتورينگ بررسي كرديم. در اين شماره قصد داريم يكي از روش‌هاي مشهور تبادل اطلاعات بين چند موتور پايگاه داده‌اي مستقر در مكان‌هاي مختلف را بررسي كنيم. شايان ذكر است كه برخي از مديران سيستم از اين روش به عنوان نوعي ايجاد نسخه پشتيبان وبرخي ديگر به عنوان عاملي براي افزايش سرعت و يا كاهش حجم يك بانك اطلاعاتي با استفاده از مكانيسم توزيع (Distribution) استفاده مي‌كنند. اما نكته مهم اين‌جاست كه هيچ‌كدام از دو مورد مذكور، هدف اصلي عمليات Replication نيست، بلكه منظور از آن، ارايه راه‌حلي براي دسترسي سرورهاي مختلف (با كاربردهاي متعدد) در سطح شبكه به يكديگر و به‌روزشدن اطلاعات جهت دسترسي افراد مختلف در آن شبكه است.

 


معرفي
Replication راه‌حلي براي انتقال اطلاعات از يك بانك اطلاعاتي SQL server به يك بانك اطلاعاتي ديگر از همان نوع و البته مستقر در يك محل و كامپيوتر ديگر است. اين فرآيند توسط ايجاد يك كپي از اطلاعات موجود در مبدا و انتقال آن به مقصد صورت مي‌گيرد. در اين ارتباط اطلاعاتي، اصطلاحاً به كامپيوتر و بانك‌ اطلاعاتي مبدا، ناشر(publisher) و به كامپيوتر و بانك اطلاعاتي مقصد، مشترك يا متعهد (subscriber) مي‌گويند. البته اين نوع رابطه، با وجود تنها يك ناشر اما يك يا چند مشترك امكان‌پذير است. بدين‌معني كه اطلاعات يك بانك اطلاعاتي در مبدا قابل انتقال به چند مقصد مختلف است. از نسخه 7 به بعدSQL Server امكان تغيير اطلاعات در مقصد و انتقال آن به مبدا نيز وجود دارد. با اين وصف، اين رابطه داده‌اي بين ناشر و مشترك ممكن است گاهي اوقات برعكس شود و جاي مبدا و مقصد در يك مقطع زماني عوض شود. اين قابليت يكي از ويژگي‌هاي مهم SQL Server است كه در نسخه‌هاي قديمي آن وجود نداشت. بدين‌ترتيب يك كامپيوتر مشترك يا مقصد مي‌تواند گاهي اوقات نقش ناشر يا مبدا را در همان رابطه بازي كند. به اين قابليت جديد Multi site update مي‌گويند.
درSQL Server، سه نوع انتقال اطلاعات از طريق Replication وجود دارد. هر كدام از اين سه راه، سناريوي خاصي براي انتقال اطلاعات از مبدا به مقصد و يا برعكس را مديريت مي‌كنند كه در ادامه به بررسي آن‌ها مي‌پردازيم.

1- انتقال اطلاعات به روش ادغام (Merge
اين نوع انتقال اطلاعات كه از قابليت Multi site هم پشتيباني مي‌كند، زماني مورد استفاده قرار مي‌گيرد كه استقلال داخلي هر بانك اطلاعاتي طرف يك رابطه، به رسميت شناخته مي‌شود. بدين‌معني كه در يك رابطه انتقال اطلاعات، هر كامپيوتر ضمن حفظ ساختار بانك اطلاعاتي خود، هم مي‌تواند نقش ناشر را داشته باشد و هم نقش مشترك را ايفا نمايد. در اين حالت هر تغييري در جداول مشترك هر طرف، بلافاصله در طرف ديگر هم اِعمال مي‌شود. نكته مهمي كه در اين‌جا مطرح است اين است كه چطور طرفين اين ارتباط متقابل بايد با هم هماهنگ باشند و اولويت يكديگر را به رسميت بشناسند. به عنوان مثال فرض كنيد در يك زمان واحد، هر دو طرف بخواهند اطلاعاتي را در مورد يك جدول بانك اطلاعاتي به يكديگر ارسال كنند. (يعني بروز حالت تداخل) اين مشكل با استفاده از روش خاصي كه هر نوع Replication مخصوص خودش دارد، قابل حل است. به‌طور كلي در حالت ادغام، يك پايگاه داده حايل ميان ناشر و مشترك به عنوان توزيع‌گر (Distributor) ساخته مي‌شود. اين پايگاه داده به نامDistribution در ليست پايگاه‌هاي داده‌اي ناشر قرار‌مي‌گيرد و وظيفه ايجاد همزماني (synchronization) بين ناشر و مشتركين را ايفا مي‌كند.
پايگاه داده توزيع‌گر هم مي‌تواند در سمت ناشر و هم در يك كامپيوتر مياني ديگر (غير از كامپيوترهاي سمت مشترك) قرار داشته باشد. اين پايگاه داده ضمن ايجاد همزماني در ردوبدل اطلاعات بين ناشر و مشترك، اين امكان را نيز فراهم مي‌سازد تا مدير سيستم بتواند اولويت و در واقع ارجحيت جهت انتقال اطلاعات در زمان بروز تداخل را مشخص كند. اين اولويت (priority) در زمان تعريف طرف‌هاي ناشر و مشترك يك Replication از نوع ادغام توسط مدير سيستم تنظيم مي‌شود.

2- تصويربرداري از اطلاعات (snapshot)
در اين روش ابتدا يك تصوير كامل از آنچه كه بايد از سمت ناشر به سمت مشترك برود تهيه مي‌شود. اين تصوير هم شامل خود ساختار آنچه كه منتقل مي‌شود (مثلاً ساختار يك جدول) و هم شامل اطلاعات داخل آن است. در ابتداي كار، تصوير مذكور عيناً به مشترك فرستاده مي‌شود و سپس از اين به بعد هر تغييري كه در سمت ناشر انجام شود بلافاصله به طرف مشترك هم فرستاده مي‌شود. روند و توالي ارسال اين تغييرات هم همانند حالت قبل (ادغام) طي يك فاصله زماني مشخص مثلاً ساعتي يك‌بار كه توسط مدير سيستم‌ قابل تنظيم است، انجام مي‌گيرد.
يكي از مزاياي اين روش نسبت به حالت ادغام، اين است كه زمان كمتري از وقت مدير سيستم را جهت پيكربندي و تنظيم عمل انتشار صرف مي‌كند و به دليل اين‌كه در ابتداي عمل انتشار، خود ساختار نيز عيناً به مشترك منتقل مي‌شود، از قابليت اطمينان بيشتري برخوردار است. به طور كلي كاربرد اين نوع انتقال اطلاعات، زماني است كه مدير سيستم قصد ايجاد يك ارتباط ساده يك طرفه ولي مطمئن را دارد.

3- انتقال براساس فرآيند (Transactional) 
اين روش يكي از بهترين و قابل كنترل‌ترين روش‌هاي انتقال اطلاعات است. در اين روش هر تغييري كه در جداول ناشر صورت گيرد، به‌صورت يك دستور SQL درآمده و تحت يك فرآيند واحد هم در سمت ناشر و هم در سمت كليه مشتركين اجرا مي‌شود. در اين صورت اگر به‌طور مثال يكي از مشتركين به دليلي با اشكال مواجه شده و تغيير موردنظر در آن انجام نشود، اين تغيير نه در خود ناشر و نه در هيچ‌كدام از مشتركين ديگر نيز انجام نخواهد شد. بدين‌معني كه يا يك تغيير در اطلاعات، براي تمام كامپيوترها اعم از ناشر و كليه مشتركين انجام مي‌شود و يا اين‌كه براي هيچ‌كدام انجام نخواهد شد در اين حالت هم يك پايگاه داده واسطه به نام Distribution نقش دريافت و ارسال فرآيند را به طرف مشترك ايفا مي‌كند. در واقع روش فرآيند، در مقايسه با دو روش قبل از حالت به هنگام (online)  بودن بيشتري برخوردار است. يعني اين‌كه هر فرآيند و هر دستور در همان لحظه كه مي‌خواهد در ناشر اجرا شود، به واسط فرستاده شده و سپس در يك زمان واحد در كليه مشتركين نيز انجام مي‌شود و در واقع زمان تغيير اطلاعات در ناشر و در مشتركين تقريباً يكسان است. همچنين در اين روش تداخلي هم پيش نمي‌آيد. چون هر تغييري ابتدا بايد به واسط فرستاده شود و از آن‌جا به جاهاي ديگر ارسال شود و واسط هم آن‌ها را در يك صف اولويت (priority queue) قرار داده و به ترتيب انجام مي‌دهد. نتيجه اين نوع انتقال اطلاعات، داشتن چند پايگاه داده كاملاً يكسان و به‌هنگام در مكان‌هاي مختلف است كه همگي از يك ناشر، اطلاعات موردنظر را دريافت مي‌كنند.

تعريف ناشر و مشتركين
براي تعيين يك SQL Server به عنوان ناشر، كافي  است يك رابطه Replication براي آن تعريف كرده و پس از انجام تنظيمات مربوطه و طي مراحل خاص هر يك از سه نوع انتقال اطلاعات، آن كامپيوتر را به عنوان مبدا يا ناشر يك فرآيند انتقال معرفي كنيم. در همين حين و براي ايجاد پايگاه داده واسط يا همان توزيع‌گر (Distributor) هم مي‌توان وارد عمل شده و خود ناشر را به عنوان توزيع‌گرِ آن فرآيندِ انتقال معرفي كنيم. پس از اين‌كار نوبت به تعريف مشتركين مي‌رسد. براي تعريف يك مشترك از دو راه مي‌توان اقدام كرد، كه هر يك كاربرد مخصوص به خود را دارند. در روش اول كه فرستادن اطلاعات به طرف يك مشترك است و در اصطلاح push ناميده مي‌شود، معرفي مشترك از سمت ناشر انجام مي‌شود. بدين‌معني كه مدير سيستم مي‌تواند بلافاصله پس از تعريف يك ارتباط و ناشر آن از همان لحظه و در همان محل استقرار ناشر، مشتركين را يك به يك به اين نوع ارتباط دعوت و اضافه كند و اطلاعات را به سمت آن‌ها بفرستد. اين ارتباط به دليل اين‌كه كاملاً از طرف ناشر، كنترل مي‌شود، از حالت به‌هنگام بيشتري
(online) برخوردار است و اطلاعات بلافاصله به سمت مشترك فرستاده مي‌شود. در روش دوم كه Pull نام دارد، تعريف مشترك از سمت خودش انجام مي‌شود و در واقع اين مشترك است كه اطلاعات را از ناشر طلب مي‌كند. اين حالت بيشتر در مواقعي كاربرد دارد كه اولاً تعداد مشتركين از قبل براي ناشر مشخص نيست و ثانياً بروز بودن اطلاعات در آن واحد از اهميت حياتي براي سيستم برخوردار نيست و انتقال اطلاعات مي‌تواند با تأخير و با درنگ زماني و در زمان دلخواه مشترك ‌نجام شود.

طرح يك مسأله‌
فرض كنيد مي‌خواهيم با استفاده از مكانيسم Replication، اطلاعات موجود در بانك اطلاعاتي Northwind را از يك پايگاه داده SQL Server به نام server به يك بانك اطلاعاتي به همان نام و بر روي يك پايگاه داده ديگر مستقر در يك سرور راه دور به نام Home server منتقل كنيم. براي اين‌كار مي‌توانيم از هر كدام از سه روش انتقال اطلاعات، استفاده نماييم.


مراحل ايجاد ناشر

براي اين كار، در پنجره Enterprise Manager، بر روي گزينه Publication از آيتم Replication كليك سمت راست نموده و فرمان New را انتخاب مي‌نماييم. با آغاز ويزارد مخصوص، كليد Next را كليك كرده و در صفحه بعد در پاسخ به اين سؤال كه آيا مي‌خواهيد پايگاه داده توزيع‌گر (Distributor) در همين كامپيوتر ساخته شود يا خير، گزينه اول يعني خود كامپيوتر server را انتخاب مي‌كنيم و به مرحله بعد مي‌رويم (شكل 1). 




در پنجره بعدي از كاربر خواسته مي‌شود تا فولدري را جهت قرار دادن فايل‌هاي مربوط به عمليات انتقال مشخص كند. وجود اين فولدر براي انجام عمل Distribution ضروري است و بايد طوري انتخاب شود كه در شبكه‌اي كه قرار است مشتركين به آن بپيوندند قابل دسترسي باشد. پس از انتخاب اين فولدر و كليك بر روي كليد Next، در مرحله بعد نام بانك اطلاعاتي موردنظر يعني Northwind را از داخل ليست انتخاب كرده و به مرحله اصلي يعني انتخاب نوع Replication مي‌رسيم كه در اين‌جا همان گزينه اول يعني snapshot را انتخاب مي‌كنيم (شكل 2).



سپس در مرحله بعد بايد هر موجوديتي اعم از جداول و روال‌هايي، را كه مي‌خواهيم در اين عمليات انتقال وجود داشته باشند، معرفي كنيم براي مثال جدول مشتريان (customers) را از داخل ليست جداول علامت زده و به مرحله بعد مي‌رويم. (شكل 3) در مرحله بعد يك نام براي عمليات انتقال انتخاب كرده و كليد Next را مي‌زنيم و در نهايت با كليك بر روي عبارت Finish عمليات را پايان مي‌دهيم.




مراحل ايجاد مشتركين‌

1- روش Pull (از طريق مشترك)
براي ايجاد يك مشترك با روش pull، به كامپيوتر مشترك مراجعه كرده و بر روي گزينه subscription كليك سمت راست كرده و فرمان New pull را انتخاب مي‌كنيم. سپس از داخل پنجره بعدي گزينه دوم يعني Look in the Active Directory را انتخاب مي‌نماييم (شكل 4).




در مرحله بعد نام ناشر و سپس نام بانك‌اطلاعاتي موردنظر، نام عمل نشر كه در ناشر تعريف كرديم و سپس رمز عبور مربوط به يك كاربر معتبر در ناشر مثلاً كاربر sa را وارد مي‌نماييم. (شكل 5)




در قسمت بعد هم نام بانك اطلاعاتي مقصد را كه همان Northwind است انتخاب مي‌ناميم. پس از طي چند مرحله ديگر كه نياز به تغييري در آن‌ها نيست و صرفاً با كليك بر روي كليد Next،مقادير پيش‌فرض‌را تأييد مي‌كنيم به مرحله انتخاب توالي زماني به‌روز شدن مشترك مي‌رسيم. در اين‌جا هم بايد بين سه روش مختلف يعني حالت‌هاي بلادرنگ، زمان‌دار، براساس درخواست، يكي را انتخاب كنيم كه در اين‌جا همان نوع اول يعني بلادرنگ را انتخاب مي‌نماييم (شكل 6).



با اين كار مراحل تعريف يك مشترك از طريق pull پايان مي‌پذيرد. اما نكته مهمي كه در اين‌جا بايد به آن اشاره كنيم اين است كه براي فراهم ساختن امكان تعريف مشتركين از طريق pull حتماً بايد اين اجازه را قبلاً و از طريق ناشر به كاربران مشترك داده باشيم.  
براي اين‌كار، قبل از تعريف مشترك، بايد در كامپيوتر ناشر، بر روي نام عمليات انتقال ايجاد شده كليك سمت راست كرده و گزينه خصوصيات (properties) را انتخاب نماييم. سپس زبانه subscription option را باز كرده و مطمئن شويم كه گزينه‌هاي Allow anonymous و همچنين Allow Pull در حالت تأييد شده باشند (شكل 7).



2 - روش push  (از طريق ناشر)
براي تعريف يك مشترك با استفاده از روش push، به كامپيوتر ناشر مراجعه كرده و بر روي نام عمليات نشر كه قبلاً ايجاد كرده‌ايم كليك سمت راست مي‌كنيم. سپس روي گزينه push new كليك مي‌كنيم. با شروع مراحل ويزارد، نام كامپيوتر مشترك را از ليست انتخاب مي‌كنيم (شكل 8).



در مراحل بعدي با معرفي بانك اطلاعاتي Northwind به عنوان مقصد به پنجره ويژه تعريف زمان به‌روز شدن مشترك مي‌رسيم كه از بين دو نوع بلادرنگ و زماندار قابل انتخاب است. كه باز هم نوع اول را انتخاب مي‌كنيم. در مرحله بعد هم مطمئن مي‌شويم كه گزينه start snapshot agent در حالت تأييد قرار دارد و سپس با چند كليك بر روي كليدNext عمليات را پايان مي‌دهيم. نكته بسيار مهمي كه براي تعريف مشترك از طريق روش push بايد در نظر داشته باشيم اين است كه براي ظاهر شدن نام هر مشترك در ليست انتخاب كه در شكل 8 ملاحظه كرديد، بايد قبلاً اين مشترك با استفاده از عمليات Registration در كامپيوتر ناشر تعريف شده باشد. در غير اين‌صورت نام آن در داخل ليست مشتركين ظاهر نمي‌شود. عمل مذكور هم در يك محيط شبكه‌اي بسيار آسان است. كافي است بر روي SQL Server Group در كامپيوتر ناشر كليك راست كرده و با انتخاب New Registration و وارد كردن نام مشترك اين كار را انجام دهيم.

مهيار داعي‌الحق
ماهنامه شبکه - آبان 1383 شماره 48

مديريت پايگاه داده ها در SQL Server - امنيت اطلاعات و عمليات (قسمت چهارم)

اشاره :
مقوله امنيت همواره يكي از مهم‌ترين شاخه‌هاي مهندسي نرم‌افزار و به تبع آن، يكي از حساس‌ترين وظايف مديران سيستم به‌خصوص مديران شبكه و يا مديران بانك‌هاي اطلاعاتي است. با تنظيم سطوح دسترسي براي كاربران شبكه يا بانك‌هاي اطلاعاتي شبكه، امنيت اطلاعات يا به عبارتي عدم دسترسي افراد فاقد صلاحيت به اطلاعات، تضمين مي‌گردد. هر سيستم‌عامل، پلتفرم يا بانك اطلاعاتي، شيوه‌هايي خاصي را براي برقراري قواعد امنيتي به كاربران معرفي مي‌نمايد. در SQL Server هم روش‌هاي خاصي براي اين مقوله وجود دارد كه در اينجا به آن‌ها مي‌پردازيم.

 


امنيت در ورود به سيستم
زماني كه يك بانك اطلاعاتي جديد را در SQL Server تعريف مي‌كنيد، با كليك سمت راست بر روي نام موتور پايگاه داده‌اي يك سرور درEnterprise Manager و انتخاب قسمت Properties، در زبانه security، موتور بانك اطلاعاتي

شكل 1

امكان انتخاب دو روش مختلف در معرفي و يا شناسايي كاربران مجاز براي ورود به سيستم يا همان عمل احراز هويت (Authentication) را در دسترس قرار مي‌دهد. البته بعد از ساخت يك بانك اطلاعاتي، با كليك سمت راست بر روي نام آن بانك و انتخاب گزينه Properties و سپس security هم مي‌توان روش مورد استفاده را تغيير داد. (شكل 1)
يكي از اين دو روش كه برمبناي ارتباط موتور اين پايگاه داده با اكتيودايركتوري ويندوز 2000 سرور بنا شده است و Windows only نام دارد، باعث مي‌شود تا كاربران از قبل تعريف شده در دامنه (Domain) يك شبكه مبتني بر ويندوز 2000 سرور، به رسميت شناخته شوند. در اين صورت نيازي به معرفي كاربر جديد و يا انتخاب دو نام كاربري براي يك نفر وجود ندارد و كاربر مذكور مي‌تواند از همان نام كاربري و رمز عبوري كه براي ورود به دامنه شبكه ويندوزي خود استفاده مي‌كند، براي اتصال به بانك اطلاعاتي هم استفاده كند.
در روش دوم، ارايه مجوز دسترسي به كاربران با سيستمي خارج از محدوده دامنه‌‌ويندوزي صورت مي‌گيرد. بدين‌صورت مدير سيستم مجبور است براي كليه كاربراني كه قصد اتصال به بانك را دارند، نام كاربري و رمزعبور جديدي را تعريف كند.


تعريف كاربران

شكل 2

در صورتي كه شيوه دوم تعريف كاربران را انتخاب كرده باشيد، بايد ابتدا ليستي از كاربران را به همراه رمزعبور
مربوطه‌شان در قسمتي از صفحه Enterprise Manager كه با عنوان Security مشخص شده، معرفي كنيد. اين كار با كليك سمت راست بر روي گزينه Login در قسمت مذكور و سپس new login انجام مي‌گيرد. انتخاب يك نام كاربري به همراه ورود رمزعبور تنها كاري است كه بايد در اين جا انجام گيرد تا يك كاربر به‌طور عمومي در ليست كاربران يك موتور پايگاده داده‌ قرار گيرد.

از اين به بعد، وظيفه مدير سيستم تعيين دسترسي كاربران تعريف شده در قسمت security، به بانك‌هاي مختلف تعريف شده در پايگاه است.
اين‌كار نيز از دو طريق قابل انجام است. در روش اول، دسترسي به هر بانك اطلاعاتي از طريق همان قسمت security صورت مي‌گيرد. كافي است بر روي هر كاربري كه در اين قسمت تعريف كرده‌ايد، كليك سمت راست كرده و ابتدا گزينه خصوصيات و سپس زبانه DataBase Access را انتخاب كنيد. پس از آن ليستي از كليه بانك‌هاي اطلاعاتي موجود در پايگاه به شما نمايش داده مي‌شود كه بايد بانك موردنظر را انتخاب كرده و در ستون Permit كليك موردنظر را انجام دهيد. پس از اين كار

شكل 3

مي‌توانيد يك نام نمايشي را براي نام كاربري مربوطه در ستون user تايپ كنيد. در اين‌جا به عنوان مثال امكان دسترسي كاربر mda را به بانك Northwind فراهم نموده و نام نمايشي <مهيار داعي‌الحق> براي آن انتخاب شده است (شكل 2). همان‌طور كه مشاهده مي‌كنيد اين كاربر به‌طور خودكار در گروه كاربري عمومي (public) بانك مذكور قرار داده مي‌شود.
در روش دوم، به سراغ بانك اطلاعاتي موردنظر در ليست DataBases رفته و با كليك سمت راست بر روي عبارتusers، گزينه New User را انتخاب مي‌كنيم. حال در پنجره نمايش داده شده، بايد از درون ليست Login name، يكي از كاربراني را كه قبلاً در قسمت security تعريف كرده‌ايم انتخاب كرده و نام نمايشي آن را هم در قسمت user name تايپ كنيد. در اين‌جا هم به‌صورت خودكار، كاربر مذكور در گروه كاربري Public براي آن بانك اطلاعاتي قرار مي‌گيرد. (شكل 3)


نقش‌ها (Roles)

درSQL Server، مي‌توان چندين كاربر را در يك گروه كاربري قرار داد. وقتي يك گروه كاربري تعريف مي‌شود، دسترسي آن به قسمت‌هاي مختلف يك بانك اطلاعاتي و كليه عملياتي كه اعضاء آن گروه مي‌توانند انجام دهند، توسط مدير سيستم تعيين مي‌گردد. از اين به بعد هرگاه كاربر جديدي به آن گروه اضافه ‌شود، نيازي به تعريف مجدد سطوح دسترسي و عملياتي براي وي وجود ندارد و سطوح دسترسي به صورت خودكار از طرف گروه به عضو جديد اعطا مي‌شود. درSQL Server به‌صورت پيش‌فرض تعدادي نقش (Role) وجود دارد كه در واقع همان گروه‌هاي كاربري مذكور مي‌باشد. هر كاربري كه توسط مدير سيستم به جمع كاربران اضافه مي‌شود به طور خودكار در نقش public ظاهر مي‌شود. نقش‌هاي از پيش تعريف شده و نحوه دسترسي و قابليت عملياتي آن‌ها عبارت هستند از:

1- db-accessadmin
كاربران تعريف شده در اين نقش قادر خواهند بود، سطوح دسترسي و امنيتي كليه كاربران و نقش‌ها را در قسمت‌هاي مختلف پايگاه تعريف كنند.

2- db-backupoperator

اين نقش مسؤول ايجاد نسخه‌هاي پشتيبان از سيستم و اطلاعات درون آن است.

3- db-datareader

اين نقش قادر است كليه اطلاعات تمام جداول بانك اطلاعاتي موجود در سيستم را بخواند. مگر آن‌كه اطلاعات خاصي
توسط مكانيسم Deny از دسترس او دور نگاه داشته شود.

4- db-datawriter
افراد تعريف شده در اين نقش قادرند تا كليه اطلاعات موجود در كليه جداول بانك را با استفاده از دستورات سه‌گانهInsert ،UPdate ،Delete تغيير دهند. مگر آن ‌كه جدول يا فيلد خاصي توسط مكانيسم Deny از دسترس‌شان دور نگه داشته شود.

5- db-ddladmin
كاربران داراي اين نقش مي‌توانند ساختار جداول، ديدها، روتين‌ها و توابع يك بانك اطلاعاتي را با استفاده از دستورات سه‌گانه Create ،alter ،Drop، بسازند، تغيير دهند يا از بين ببرند.

6- db-denydatareader
اين نقش قادر به خواندن هيچ اطلاعاتي از جداول يا ساير قسمت‌هاي بانك نيست.

7- db-denydatawriter
اين نقش هم قادر به تغيير دادن هيچ يك از قسمت‌هاي بانك اطلا‌عاتي نيست.

8- db-owner
اين نقش قادر به انجام هر عملي در بانك‌اطلاعاتي مي‌باشد و بالاترين سطح موجود در يك بانك است.

9- db-securityadmin
مسؤول تعريف و تنظيم نقش‌ها، كاربران و سطوح دسترسي در يك بانك است.

10- public
كاربران اين نقش‌ قادرند تمام جداول، ديدها و ساير قسمت‌هايي كه توسط خودشان يا توسط كاربران متعلق به
نقش dbowner ساخته شده را بخوانند و بنويسند.

شكل 4

اما به غير از نقش‌هاي مذكور، مدير سيستم هم مي‌تواند به تناسب، نقش‌هايي را در سيستم تعريف كند. به عنوان مثال فرض كنيد كه در يك واحد حسابداري، كارمندان عادي آن قسمت، موظف به وارد كردن اسناد مالي به يكي از جداول بانك‌اطلاعاتي با استفاده از يك برنامه ويژوال بيسيك هستند. مدير مالي نيز توسط دكمه موجود در همان برنامه قادر است يك روتين ذخيره شده (stored procedure) را فراخواني كرده تا اسناد وارد شده را تأييد كند. بنابراين فقط كاربر مربوط به مدير مالي حق اجراي روتين مذكور را دارد. برهمين اصل مدير پايگاه يك گروه به نام <حسابداران> را براي ورود اسناد و گروه ديگري را به نام <مدير مالي> براي مديريت آن دپارتمان و جانشينان احتمالي وي در نظر مي‌گيرد و براي گروه اول، اجراي روتين مذكور را در حالت ممنوع (Deny) و براي گروه دوم، در حالت مجاز (Allow) قرار مي‌دهد. شما مي‌توانيد براي تعريف يك گروه يا نقش جديد، بر روي آيتم Roles كليك سمت راست كرده و گزينه New Role و سپس يك نام دلخواه را انتخاب كرده و آن‌گاه با كليك بر روي دكمه Add كاربران از قبل تعريف شده‌تان را يك به يك به جمع آن گروه اضافه نماييد. شايان ذكر است كه هر كاربر مي‌تواند جزء چند گروه يا نقش باشد. در ادامه بايد در همان پنجره مذكور با كليك بر روي دكمه مجوز (Permission)، دسترسي و قابليت عملياتي آن گروه را هم تعريف كنيد. (شكل 4)


انواع مجوزها

1- جداول اطلاعاتي و ديدها

شكل 5

در مورد يك جدول بانك اطلاعاتي شما مي‌توانيد امكان انجام پرس‌وجو، درج، تغيير، حذف و تعريف وابستگي را به ترتيب با علا‌مت زدن در ستون‌هاي SELECT ،UPDATE ،DELETE و DRI براي يك گروه يا كاربر، ممكن يا غيرممكن كنيد. در ضمن در صورتي كه بخواهيد بر روي تك‌تك فيلدها، قواعدي را وضع كنيد مي‌توانيد بر روي دكمه Colums هر جدول كليك كرده و امكان آوردن آن فيلد را در يك عبارت پرس‌وجو (SELECT) و يا امكان تغيير آن فيلد را در يك عمليات UPDATE براي گروه يا كاربر موردنظر مشخص كنيد. (شكل 5)‌ لازم به ذكر است كه همين عمليات براي ديدهاي
(View) يك بانك هم قابل انجام است.


شكل 6


2- روتين‌ها و توابع

در مورد روتين‌ها و توابع تعريف‌شده (User Defined Fonction) فقط يك ستون مجوز به نام Exec و آن هم به معني امكان استفاده يا عدم استفاده وجود دارد كه توسط مدير سيستم تنظيم مي‌شود. (شكل 6)


3- مجوزهاي اساسي

به غير از عمليات‌عمومي سيستم مثل جستجو، درج، تغيير، اجراي روتين و... كه در بالا ذكر شد، در SQL serverامكانات ويژه‌اي نيز براي كاربردهاي خاص در نظر گرفته شده كه فقط در مواقع لزوم به برخي كاربران يا نقش‌ها اعطا مي‌شود. اگر بر روي نام هر بانك اطلاعاتي موجود در سيستم مثل Northwind، كليك راست كرده و آيتم خصوصيات را انتخاب كنيد، در زبانه آخر يعني Permission ليستي از نقش‌ها و كاربرهاي موجود در سيستم را مشاهده مي‌كنيد كه در جلوي نام هر يك از

شكل 7

آن‌ها و در 8 ستون به ترتيب از چپ به راست امكان ساخت جدول، ديد، روتين، مقادير پيش‌فرض، قواعد، توابع، پشتيبان‌گيري از اطلاعات و پشتيبان‌گيري از لاگ‌ها وجود دارد كه در مواقع خاصي قابل اعطا به كاربران با نقش‌هاي مختلف مي‌باشد. به عنوان مثال اگر برنامه‌نويس قصد داشته باشد تا براي فراهم‌ساختن امكان تهيه يك گزارش پيچيده، به كاربري اجازه اجراي دستور CREATE VIEW را از داخل يكي از فرم‌هاي برنامه ويژوال بيسيك خود بدهد، بايد قبلاً مدير پايگاه را مطلع نموده تا وي ستون Create View را براي آن كاربر، فعال نمايد. همين عمل جهت ساخت جداول موقت براي گرفتن گزارش يا ساير عمليات‌ پيچيده هم وجود دارد و از طريق ستون Create Table قابل انجام است.
در اين صورت كاربر مي‌تواند با استفاده از دستوراتي كه منتهي به ساخت جدول مي‌شود مثل Create Table يا Select INTO جداول موقتي را توسط برنامه ويژوال بيسيك مورد استفاده خود ايجاد نموده و پس از پايان كار با استفاده از دستور DROP آن‌ها را حذف نمايد. (شكل 7)

مهيار داعي‌الحق
ماهنامه شبکه - آذر ۱۳۸۳ شماره 49

راهكارهايي براي‌ افزايش سرعت در بانك‌هاي اطلاعاتي SQL Server

اشاره :
شايد بعضي از شما تاكنون دست‌اندركار يكي دو پروژه مبتني بر بانك‌هاي اطلاعاتي بوده‌ايد و يا اكنون با چنين پروژه‌هايي سروكار داريد. اگر تجربه كار در محيط‌هاي متوسط (مثلاً با يكصد كاربر) يا بزرگ‌ را نيز داشته باشيد، قطعاً با مسائل و مشكلات مربوط به كاهش سرعت ناشي از افزايش تعداد كاربران يا حجم پردازشي آن‌ها مواجه شده‌ايد. اين مقاله با استناد به منابع مايكروسافتي، راهكارهايي را براي بهبود سرعت و كارايي سيستم در بانك‌هاي اطلاعاتي با تعداد كاربر و حجم پردازش زياد مورد بررسي قرار مي‌دهد. شايان ذكر است كه در تمامي نمونه‌هاي مورد اشاره، بانك‌هاي اطلاعاتي مبتني بر محصول مايكروسافت يعني SQL Server2000 مدنظر قرار گرفته است. طبق بررسي‌هايي كه كارشناسان مايكروسافت انجام داده‌اند، كارايي يك سيستم بانك اطلاعاتي به پنج عامل مختلف بستگي دارد كه به ترتيب اهميت عبارتند از: برنامه نوشته شده، پايگاه داده موردنظر، سخت‌افزار سرور يا كلاينت، تنظيمات و نسخه مورد استفاده SQL Server و سيستم‌عامل ويندوز. همان‌طور كه حتماً مي‌بينيد، ساختار پايگاه داده، براي كارايي سيستم، در رتبه دوم اهميت قرار‌دارد. بنابراين ايجاب مي‌كند كه در زمان تحليل و طراحي سيستم، به‌صورت ويژه‌ به بانك اطلاعاتي در‌حال ساخت توجه شود و رابطه بين اين بانك و برنامه‌هاي كاربردي و همچنين رابطه بين اجزاي مختلف درون بانك، به بهترين شكل ممكن طراحي و پياده‌سازي شود.

 


توسعه 
به‌طور كلي براي افزايش سرعت يك بانك اطلاعاتي مي‌توان به دو روش اقدام كرد. در واقع پنج عامل مورد اشاره در بالا‌، به دو دسته طولي و عرضي تقسيم‌بندي مي‌شوند. در توسعه طولي كه در اصطلاح انگليسي به Scalp up نيز شناخته مي‌شود، مدير سيستم با صرف هزينه‌، به ارتقاي سخت‌افزار (مثل پردازنده‌ها يا هاردديسك‌ها) يا به‌طوركلي ايجاد شبكه‌اي سريع‌تر اقدام مي‌نمايد يا مثلاً سيستم‌عامل خود را به نسخه‌اي جديدتر و پايدارتر ارتقا مي‌دهد. اما در روش عرضي (Scale out) تقريباً با حفظ همان سخت‌افزار و ساختار شبكه، به بهينه‌سازي روابط موجود ميان عناصر دخيل در سرعت مثل برنامه‌هاي كاربردي، بانك اطلاعاتي و سرور اقدام مي‌كند.

توسعه طولي (Scale up) 
هدف اين مقاله پرداختن به توسعه عرضي براي بهره‌برداري بهينه از امكانات موجود است. اما قبل از آن، جادارد به‌صورت خلا‌صه و فهرست‌وار به توسعه طولي و راه‌حل‌هاي آن نيز پرداخته شود تا زمينه براي بررسي‌هاي بيشتر در آينده فراهم گردد.

راه‌حل يكم: افزايش حافظه مورد استفاده SQL Server از يك به سه گيگابايت. اين كار را بايد با دستكاري در فايلBoot.ini سرور 2000 يا 2003 كه SQL Server در آنجا قرار دارد، انجام دهيد. براي اطلاع از چگونگي انجام‌دادن اين كار، به سايت پشتيباني مايكروسافت رجوع كنيد نشاني(
http://support.microsoft.com) و در آنجا عبارت AWE SQLServer را جستجو كنيد تا مقالاتي كه در اين زمينه وجود دارد، در دسترس شما قرار گيرد.

راه‌حل دوم: ارتقاي سيستم‌عامل ويندوز 2000 به 2003 كه در فرايند caching، سيستم‌عاملي پايدارتر و هوشمندتر قلمداد مي‌شود.

راه‌حل سوم: استفاده از پردازنده‌هاي Xeon به جاي پنتيوم 4 در سرور. اين پردازنده‌ها به دليل ويژگيhyper threading، مي‌توانند سرعت پردازش اطلاعات در سمت سرور را به دو برابر افزايش دهند.

راه‌حل چهارم: هاردديسك‌هاي اسكازي با 15‌هزار دور در دقيقه و سرعت سه مگابيت در ثانيه و يا Sata با 10‌هزار دور در دقيقه و دو مگابيت در ثانيه نسبت به هاردديسك‌هاي IDE با 7500 دور در دقيقه و يك مگابيت در ثانيه از عملكرد بهتري برخوردارند.پس درصورت امكان، از اين ادوات ذخيره‌سازي در سرور بانك اطلا‌عاتي استفاده كنيد.

 راه‌حل پنجم: جداسازي محل ذخيره فايل‌هاي داده‌اي بانك اطلاعاتي (mdf) و فايل‌هاي لاگ (ldf) برروي دو هاردديسك مختلف يا دو ديسك مختلف از يك RAID. معمولاً براي نگهداري mdf استفاده از RAID1 و براي ldf  استفاده از RAID5 توصيه مي‌شود.

با جداسازي اين فايل‌ها از يكديگر، عمل ايجاد لاگ، وقفه‌اي در خواندن و نوشتن اطلاعات بر روي هاردديسكي كه حاوي فايل‌هاي داده‌اي mdf است، ايجاد نمي‌كند.

راه‌حل ششم: راه‌حل آخر و در واقع مشكل‌ترين راه، تقسيم بانك اطلاعاتي (در صورت لزوم) به دو بانك جدا از هم و بر روي دو سرور مختلف است. به عنوان مثال، فرض كنيد كه عمليات روزانه سيستم شما به دو دسته تقسيم مي‌شود: دسته يكم عملياتي است كه طي آن بايد از آخرين اطلاعات موجود بر روي سيستم استفاده شود و هرگونه تغيير نيز بايد فوراً  در همان لحظه بر روي بانك سيستم‌ها (جداول مربوط به آن‌ها كه به
online transactional Processing) OLTP) مشهورند،) اعمال شود.

دسته دوم نيز شامل عملياتي است كه طي آن مي‌توان از اطلاعات چند ساعت يا چند روز پيش نيز استفاده كرد و لزومي به داشتن آخرين اطلاعات به صورت لحظه‌اي نيست. به عنوان نمونه فرض كنيد تعدادي از گزارش‌هاي سيستم مربوط به تحليل آماري فرايندهاي مختلف ماه پيش است. بنابراين بايد تمهيداتي انديشيده شود تا تهيه اين گزارش‌ها -كه البته ارزش آني ندارند، اما به دليل بازه زماني و نوع تحليل آن‌ها، منابع زيادي از سيستم براي خواندن اطلاعات انبوه و تجزيه و تحليل صرف مي‌شود، بايد بر روي سرور دومي در شبكه كه به
سيستم‌هاي online Analytical Processing) OLAP) مشهورند قرار گيرند تا در كار كساني كه مشغول  كار با OLTP  هستند، خللي ايجاد نشود.

بنابراين سرور دومي را در شبكه در نظر بگيريد و كپي بانك اطلاعاتي موجود در سرور اول را به سرور دوم انتقال دهيد. سپس با استفاده از روش Replication سيستم را طوري تنظيم كنيد تا در مواقع خلوت‌بودن ترافيك سيستم (مثلاً نيمه شب) اطلاعات Upgrade شده آن روز را از سرور اول به سرور دوم كپي كند. كليه برنامه‌هايي كه با OLAP  كار مي‌كنند را به بانك مشابه، اما با آدرس سرور دوم ارجاع دهيد.
 
براي كسب اطلاعات بيشتر در زمينه نحوه انجام‌دادن Replication، عبارت مذكور را در سايت ماهنامه شبكه جستجو كنيد. تا به مقالا‌تي در اين زمينه دست پيدا كنيد.

توسعه عرضي (Scale out) 

نام خانوادگي

نام

شماره تامين اجتماعي بيمه شده

شماره سريال بيمه شده

ب

الف

ايندكس خوشه‌اي يا خاصيت منحصر به فرد

كليد اوليه ايندكس غيرخوشه‌اي

راه‌هاي موجود در توسعه عرضي در واقع سريع‌ترين راه‌حل‌هاي افزايش سرعت در بانك‌هاي اطلاعاتي را تشكيل مي‌دهند. برخي از اين راه‌ها فقط با يك بار استفاده، اثر دايمي خود را روي سيستم به جا مي‌گذارند. اما برخي ديگر بايد به عنوان يك الگوي دوره‌اي در مراحل زماني مناسب ازسوي مدير سيستم اجرا شود. اين راه‌ها در واقع جزئي از دستورالعمل‌هاي نگهداري و پشتيباني سيستم محسوب مي‌شوند. در ادامه  به بررسي آن‌ها مي‌پردازيم:

1 - از ساخت جداولي كه فاقد كليد اوليه (Primary key) باشند، خودداري كنيد. كليد اوليه علاوه بر جلوگيري از  ورود اشتباه اطلاعات از سوي كاربر، به دليل داشتن خاصيت منحصر به‌فرد بودن (Unique) به سريع‌تر پيدا‌شدن ركورد موردنظر از همان جدول كمك شاياني مي‌كند. تا آنجا كه براي سيستم امكان دارد براي كليد اوليه از فيلدهاي عددي استفاده كنيد.

استفاده از فيلدهاي رشته‌اي (string) مثلchar ياvarchar به‌عنوان كليد اوليه، كمي كندتر از فيلدهاي عددي است. از انتخاب فيلدهاي رشته‌اي با طول زياد و يا فيلدهايي مثل Memo ،Text و Picture به عنوان كليد اوليه نيز اجتناب كنيد.

2 - تمام كليدهاي خارجي (Foreign key) قابل تعريف در بانك را تعريف كنيد. وجود كليدهاي خارجي نيز علاوه بر جلوگيري از اشتباه كاربر در واردكردن يا حذف اطلاعات، موجب مي‌شود هنگام لينك شدن (join) جداول مادر و فرزند از طريق كليدهاي خارجي، سيستم سرعت بيشتري را در انجام دستورات Select شما از خود نشان دهند.

3 - همان‌طور كه مي‌دانيد ايندكس‌ها در دو نوع خوشه‌اي (cluster) و غيرخوشه‌اي (Non cluster) قابل ساخت هستند. ايندكس‌ها باعث افزايش سرعت خواندن اطلاعات به‌وسيله دستور Select مي‌شوند.
ما تعريف بي‌رويه آن‌ها در سيستم نيز باعث كاهش سرعت اجراي دستورات فرايندي مثل Insert ،Update و Delete  مي‌شود. بنابراين سعي كنيد ايندكس‌هاي ضروري را در سيستم تعريف كنيد. اما در اين راه دست و دلبازي بي‌مورد از خود نشان ندهيد. به عنوان مثال، فرض كنيد در يك شعبه اداره تأمين اجتماعي، جدولي ويژه تعريف بيمه‌شدگان به شكل زير وجود دارد.  

مبلغ

تاريخ

شماره سريال

1

جزء دوم كليد اوليه

جزء اول كليد اوليه

1

 

كليد خارجي از جدول قبل

1

جزئي از ايندكس خوشه اي

جزئي از ايندكس خوشه اي

جدولي نيز براي نگهداري وجه حق بيمه از بيمه‌شدگان نيز تعريف شده است.

همان‌طور كه مشاهده مي‌كنيد، ايندكس نوع خوشه‌اي به فيلدي داده شده كه نسبت به بقيه فيلدها در يك جدول كاربرد بيشتري دارد. چرا كه اين نوع ايندكس نسبت به نوع غيرخوشه‌اي سرعت بيشتري دارد. در ضمن در هر جدول از بانك اطلاعاتي شما فقط قادر به تعريف يك ايندكس خوشه‌اي هستيد كه انتخاب فيلد آن اهميت زيادي دارد. بنابراين لزومي ندارد فيلدي كه كليد اوليه است، حتماً به عنوان ايندكس خوشه‌اي انتخاب شود.

نكته مهم ديگر اين است كه لا‌زم است تمام كليدهاي اوليه جداول ايندكس داراي باشند (خوشه‌اي يا غيرخوشه‌اي) نكته ديگر در زمان ساخت ايندكس‌ها فاكتور پرشدن (Fill Factor) آن‌ها است. اين فاكتور در واقع بيانگر ميزان فضاي مياني است كه بايد براي ركوردهايي كه در آينده درج يا حذف مي‌شوند، خالي نگه داشته شود. بنابراين اگر احساس مي‌كنيد جدول شما به‌طور مداوم مورد عمليات حذف و درج (Insert،‌Delete) قرار مي‌گيرد، اين فاكتور را پايين (مثلاً 30 درصد) انتخاب كنيد. اما اگر صرفاً عمليات درج بر روي يك جدول انجام مي‌گيرد و ميزان حذف اطلاعات از آن بسيار كم است، مي‌توانيد اين ميزان را به ارقام بالاتر مثلاً 90 درصد افزايش دهيد. زيرا اين نوع جداول نيازي به داشتن فضاي خالي مياني براي ركوردهايي كه در آينده جانشين ركوردهاي حذف شده مي‌شوند، ندارد.

اين مسئله براي ايندكس‌هايي كه برروي ديدها (Indexed Views) ساخته مي‌شوند نيز صادق است. به‌طوركلي گذاشتن ايندكس برروي ديدها به افزايش سرعت آن‌ها كمك مي‌كند. در اين حالت، كليه مطالب مذكور از جمله سياست استفاده از ايندكس‌هاي خوشه‌اي و غيرخوشه‌اي و همچنينFill Factor در جداول، در مورد ديدها نيز عيناً بايد رعايت گردد.

4 - در هنگام نوشتن دستورات Select يا در هنگام ساختن ديدها، از استفاده بي‌مورد از پارامترهاي پردازش مثلDistinct و LIKE order by و لينك‌هاي خارجي (Outer join) اجتناب كنيد. در صورت استفاده از اين پارامترها، مطمئن باشيد كه گذاشتن آن‌ها كاملاً ضروري است و چاره ديگري نداريد.

5 - از واگذاري پردازش‌هاي رياضي يا آماري سنگين و مداوم به سرور بانك اطلاعاتي بپرهيزيد. مثلا‌ً به دستور زير نگاهي بيندازيد.

SELECT( a*( b+c )) +( d* E+F))  %G/H From ... WHERE ...


به‌جاي اين‌كار، مي‌توانيد ابتدا با استفاده از يك Select معمولي مثل Select a ,b ,c ,d ,E ,F ,G ,h  فيلدهاي موردنظر را در حافظه كلاينت لود كنيد و سپس عمليات رياضي مذكور را در همان جا انجام دهيد. با اين كار پردازشي كه سرور بايد مثلاً براي 50 كلاينت در عرض چند دقيقه انجام دهد، بين آن 50 كلاينت تقسيم مي‌شود و در واقع هر كلاينت فقط سهم پردازشي مربوط به خود را انجام مي‌دهد.

6 - گاهي عمل اجتماع بين دو Select  توسط دستور Union به شدت بر عملكرد و سرعت سيستم اثر منفي مي‌گذارد. بنابراين در صورت امكان به جاي استفاده از روش مذكور، از روش‌هاي ديگري كه هدفتان را برآورده نمايد، استفاده كنيد.

7 - سعي نماييد فيلدهايي كه از نظر مقدار و ارزش با يكديگر مقايسه مي‌شوند، از يك جنس (type) باشند. در غير اين‌صورت سيستم‌مجبور مي‌شود به طور ضمني، عمل تبديل داده را انجام دهد كه كمي برايش وقت‌گير است. به مثال زير توجه كنيد و فرض بگيريد فيلد customer ID در جدول customers از جنس nchar تعريف شده است. 

Declare@custID char (5)
Set @ CustID =' FDLKO'
Select * From Customers where customerID=@custID


8 - تاحد ممكن از به كار بردن توابع (چه پيش ساخته توسط SQL Server و چه ساخته شده توسط كاربر) در قسمت WHERE يا order by اجتناب كنيد. مثال زير نمونه‌اي از اين مورد است:

Select * Form orders Where DateAdd (Day, 15, orderdata) = '2005/23/07'


9 - در زمان نوشتن تريگر (trigger) بر روي جداول يك بانك اطلاعاتي، از نوشتن تعداد زيادي دستورالعمل در آن‌ها خودداري كنيد. به عبارت ديگر تريگرها را تا حد امكان كوتاه كنيد و دستورالعمل‌ پياد‌ه‌سازي آن‌ها را كم نماييد.
10 - در زمان ساخت كرسر (cursor) درون توابع، روال‌ها و تريگرها از پارامترهاي Forward only يا read only و همچنين local استفاده كنيد تا SQL Server با دانستن اين نكته كه شما قصد تغيير داده‌ها در كرسر موردنظر را نداريد، تغيير يافتني بودن آن‌ها را درنظر نگيرد و آن را براي شما سريع‌تر بسازد.

11 - در صورتي كه تكه‌اي از برنامه شما به ساخت يك جدول موقت (temporary table) نياز دارد، اين كار بايد با ظرافت خاصي صورت بگيرد. اصولا SQL Server براي اجتناب برنامه‌نويسان از ساخت جداول موقت، از يك نوع داده(Data type) خاص به نام Table پشتيباني مي‌كند كه مزيت استفاده از آن اين است كه به‌جاي هاردديسك، در حافظه رم قرارگرفته است و در نتيجه نسبت به جداول موقت سرعت بيشتري دارد.

اما به ياد داشته باشيد كه استفاده بي‌رويه از اين نوع داده، حافظه زيادي را صرف مي‌كند كه مي‌تواند باعث كاهش كارايي سيستم شود. بنابراين اگر احساس مي‌كنيد تعداد جداول موقت، ركوردهاي آن‌ها و زمان استفاده از آن‌ها كم است، از اين نوع داده استفاده كنيد. در غير اين‌صورت، راه‌حل جدول موقت را انتخاب كنيد.
 
12-  قفل‌گذاري بر روي ركوردهايي كه در حال خواندن، درج شدن، حذف شدن يا تغيير كردن هستند، هميشه از مباحث مهم بانك‌هاي اطلاعاتي بوده‌است. همان‌طور‌كه مي‌دانيد يك فرايند (Transaction) شامل يك يا چند دستورالعمل SQL است كه يا بايد همگي به صورت موفقيت‌آميز اجرا شوند (committed) يا در صورت ايجاد خطا در زمان اجراشدن يكي، اجراي بقيه نيز منتفي شود (Rollbacked).
 

ايندكس گذاري برروي ديده ها(Indexed Views) يكي از بهترين راههاي فوري جهت افزايش سرعت جستجو بر روي ديدهااست. در حالت عادي گزينه Manage Indexes بر روي ديدها قابل انتخاب نيست مگر آنكه اولا كليه جداول يا ديدهاي موجود در آن، خود داراي ايندكس باشد و دوم اينكه كليه ديدهاي موجود در آن و هم خود ديد مورد نظر با دستور زير ساخته شده باشند.
Create View....Whit Schema Binding AS.......
 

فرايند به دو صورت قابل پياده‌سازي است. اين كار يا با استفاده از دستورات Begin trans و Committrans انجام مي‌شود كه به آن حالت صريح (Explicit) مي‌گويند يا به صورت ضمني (Implicit) صورت مي‌گيرد كه در آن اثري از دو دستور مذكور ديده نمي‌شود و هر دستور SQL يك فرايند مجزا به حساب مي‌آيد. در هر دو روش ركوردهايي كه تحت‌تأثير دامنه فرايند قرار مي‌گيرند، توسط سيستم قفل مي‌گردند و براي ديگر كاربران نيز غيرقابل استفاده مي‌شوند و در نتيجه باعث كاهش سرعت كار آن‌ها به دليل ايجاد انتظار براي آزاد شدن ركوردها مي‌شود.
 
بنابراين براي رسيدن به حداكثر كارايي سيستم، بايد از ايجاد قفل‌هاي بي‌مورد بر روي ركوردهاي جداول بانك اطلاعاتي جلوگيري كرد. اين كار با استفاده از دستور SET Transaction Isolation Level Read Uncommitted براي فرايندهاي صريح (قبل از شروع فرايند، يعني قبل از دستور (begin Trans  و يا استفاده از دستور WITH NOLOCK  براي فرايندهاي ضمني (پس از قسمت From هر دستور SQL) قابل انجام است. در مورد مسئله فرايندها و انواع قفل‌گذاري مطالب خواندني زيادي در سايت مايكروسافت وجود دارد كه درصورت تمايل مي‌توانيد به آن‌ها نيز مراجعه كنيد.

13 - روال‌هاي ذخيره شده (stored Procedures) پس از هر اجرا، به ازاي هر دستورالعملي كه اجرا مي‌كنند،  جهت اطلاع برنامه فراخوان (كلاينت) از موفقيت‌آميز بودن اجراي آن دستور SQL، پيغامي را به سمت آن برنامه مي‌فرستند. اين مسئله باعث افزايش ترافيك شبكه در اثر فرستادن مداوم پيغام ازSP به سمت كاربر مي‌شود. با تايپ دستور زير در ابتداي يكSP، مي‌توانيد آن را از انجام اين كار منع كنيد:
SET NOCOUNT ON

نتيجه‌گيري‌
مطالب فوق تنها قسمتي از راهكارهاي قابل انجام براي رسيدن به‌سرعت و بازدهي مناسب در بانك‌هاي اطلا‌عاتي مبتني بر SQL Server است. در ضمن‌ بايد اين نكته را هم درنظر داشت كه اصولا‌ً در سيستم‌هاي بزرگ اطلا‌عاتي تحت شبكه، توپولوژي و نوع اجزاي موجود در شبكه از اهميت بسيار زيادي در تعيين سطح كارايي يك بانك اطلا‌عاتي برخورداراست. گاهي حتي در حالي‌كه بهترين طراحي و پيكربندي SQL Server براي يك بانك اطلا‌عاتي انجام شده، يك اشتباه كوچك در سطح شبكه مي‌تواند تمام زحمات را بر ‌باد دهد يا مثلا‌ً يك سهل‌انگاري در نوشتن روال‌هاي ذخيره شده يا تريگرها مي‌تواند سيستم را به‌يك لوپ (Loop) پردازشي بي‌نهايت ببرد و باعث افت شديد سرعت اجراي برنامه‌ها شود. بنابراين در اين‌گونه سيستم‌ها، استفاده بجا و مناسب از منابع سيستم و شبكه و دقت در طراحي و پياده‌سازي جداول، ديدها، روال‌هاي ذخيره‌شده و تريگرها بسيار مهم  و حياتي است.

مهيار داعي‌الحق
ماهنامه شبکه - آذر ۱۳۸۴ شماره 60

مديريت پايگاه داده‌ها در SQL Server - بسته‌هايDTS

اشاره :
در ادامه مباحث مربوط به مديريت پايگاه‌هاي اطلاعاتي، در آخرين قسمت اين مجموعه، يكي از ابزارهاي جالب قابل استفاده در SQL Server را كه امكان نقل و انتقال اطلاعات و يا پردازش آن‌ها را به‌صورت دستي يا اتوماتيك و در قالب يك يا چند عمل مجزا و در عين حال مرتبط با يكديگر فراهم مي‌آورد، مورد بررسي قرار مي‌دهيم. اين ابزار كه سرويس انتقال اطلاعات (Data Transformation service) نام دارد شامل سه قسمت مختلف بوده كه مهمترين آن بسته‌هاي (DTS (DTS Packages است.

 


DTS چيست؟
DTS يك ابزار  با واسط گرافيكي كاربر جهت انتقال اطلاعات موردنياز از يك محل به محل ديگر است. با استفاده از اين  ابزار مي‌توان يك سري از اطلاعات موجود در سيستم را با استفاده از روش‌هاي عادي كاري پايگاه داده مانند دستور SELECT انتخاب كرده و به يك يا چند مقصد مختلف فرستاد. ويژگي ديگر اين نوع انتقال اطلاعات اين است كه مي‌توان آن را با استفاده از روش‌هاي مخصوص، زمانبندي (schedule) كرده تا به صورت اتوماتيك انجام شود. ويژگي سوم آن اين است كه علاوه برامكان استفاده از زبان SQL  براي استخراج اطلاعات يا پردازش قبل از انتقال آن، مي‌توان با استفاده از امكانات ديگري  پردازش و انتقال اطلاعات را انجام داد. البته واژه DTS در كل به يك سري ابزارها و سرويس‌هاي مختلف اطلاق مي‌شود كه مهمترين ابزار يا قسمت آن همان
 بسته‌هاي ( DTS (PACKAGE DTS بوده كه كار مهم انتقال و پردازش زمانبندي شده اطلاعات را انجام مي‌دهد.

بسته‌هاي DTS 
اين بسته‌ها كه مهمترين قسمت ابزارهاي DTS مي‌باشند، با استفاده امكاناتي كه در آن‌ها تعبيه شده است، قادرند وظيفه انتقال و پردازش اطلاعات را در قالب يك روتين كه مي‌تواند شامل مسيرهاي متوالي يا موازي مي‌باشد انجام دهند. اين روتين در قالب يك فايل ساختاريافته با فرمت‌هايي مثل فرمت برنامه‌ها و ماژول‌هاي ويژوال بيسيك يا فرمت‌هاي ديگري نظير فايل‌هاي Meta ذخيره مي‌شود و با استفاده از روش‌هايي قابل زمانبندي، ويرايش، تغيير و همچنين رمزگذاري مي‌باشند. يك بسته DTS در واقع شامل چند آيتم مرتبط به يكديگر بوده كه هر كدام يك وظيفه مشخص را انجام داده و نتيجه را به ديگري انتقال مي‌دهند.

اين آيتم‌ها به‌عنوان Task نامگذاري شده و در واقع محتويات يك بسته DTS را تشكيل مي‌دهند. هر كدام از Task‌هاي موجود در يك بسته DTS به صورت جداگانه توسط كاربر پيكربندي شده و وظيفه موردنظر مثل پردازش، كپي‌كردن و يا انتقال اطلاعات به آن انتساب داده مي‌شود.
 
سپس با به‌وجود آوردن ارتباط لازم ميان Task‌هاي موجود، امكان عملي كردن فرآيند موردنظر ميسر مي‌شود. يك Task مي‌تواند يكي از انواع زير باشد: 

1- Importing / Exporting 
اين نوع Task قادر است اطلاعات را از جايي مثل يك جدول بانك اطلاعاتي SQL Server يا هر نوع ديگر مثل اكسس و يا يك فايل ساده  Text بخواند و آن را در يك جدول بانك اطلاعاتي SQL Server وارد (Import) كند. همچنين اين Task مي‌تواند عكس اين عمل را انجام دهد. يعني اطلاعات يك جدول بانك اطلاعاتي يا قسمتي از آن اطلاعات را به فرمت اكسس، اكسل يا فايل متني (Text) درآورد (Export) و آن را در مقصد موردنظر قرار دهد.

2- Transform 
با استفاده از اين نوع Task مي‌توان با نوشتن يك دستورالعملSELECT نتيجه حاصل از عمل پرس‌وجو برروي يك يا چند جدول بانك اطلاعاتي مبدا را به يك جدول موجود در بانك اطلاعاتي مقصد انتقال داد. در اين روش بانك اطلاعاتي مبدا و مقصد مي‌توانند جدا از هم و يا يكسان باشند.

3- Copy 
اين نوع Task مي‌تواند هر موجوديتي در يك بانك اطلاعاتي مثل ديدها (view)، ايندكس‌ها، لاگ‌ها، روتين و توابع، تريگرها و هر چيزي را به يك بانك اطلاعاتي ديگر منتقل كند.

4- Send/Receive Message
با اين نوعTask  مي‌توان بين بسته‌هاي مختلف DTS موجود در سيستم ارتباط برقرار كرده و بين آن‌ها پيغام رد و بدل كرد. همچنين با استفاده از آن مي‌توان يك بسته را در داخل يك بسته ديگر فراخواني يا اجرا كرد. به‌علاوه اين‌كه اين نوع Task امكان ارسال Email را هم دارد.

5- Execute 
با استفاده از اين نوع Task مي‌توان يك سري دستورالعمل SQL يا حتي اسكريپت‌هاي ActiveX و يا فايل‌هاي Exe   را اجرا كرد.

Taskهاي از پيش تعريف شده در SQL Server عبارتند از:

1-FTP : جهت دريافت يك يا چند فايل از يك سرور FTP به داخل بسته DTS  

2- ActiveX Script: براي استفاده از قابليت‌هاي زبان‌هاي اسكريپتي مثل ويژوال بيسيك يا جاوا در يك پردازش ‌خاص.

3- Transform Data: جهت انتقال اطلاعات بين دو منبع اطلاعاتي.

4- Execute Process: جهت اجراي يك فايل Exe 

5- Execute SQL: جهت اجراي يك سري دستورات SQL 

6- Data Driven Query: براي ايجاد يك منبع انتقال اطلاعات با استفاده از دستورSELECT 

7- Copy Object: اينTask مي‌تواند كليه موجوديت‌هاي يك بانك اطلاعاتي را به بانك اطلاعاتي ديگر منتقل كند.

8- Send Mail: جهت ارسال ايميل به يك مقصد مشخص

9- Bulk Insert: جهت ورود (Import) اطلاعات از يك فايل به يك جدول بانك اطلاعاتي

10- Execute Package: با استفاده از اين Task مي‌توان يك بسته DTS ديگر را در داخل بسته DTS جاري لود و اجرا كرد.

11- Message Queve II: براي استفاده از امكانات پيغام‌دهي سرويس MSMQ ويندوز 2000 يا 2003 براي مبادله پيغام بين برنامه‌ها و  ايستگاه‌هاي مختلف

12- Transfer Error Massages: براي انتقال پيغام‌هاي خطاي موجود در جدول سيستمي sysmessages از يك بانك اطلاعاتي به بانك ديگر

13- Transfer DataBase: براي انتقال كل بدنه يك بانك اطلاعاتي با تمام محتوا، ساختار و اطلاعاتش از يك سرور به سرور ديگر.

ارتباط DTS  
مبدا و مقصد داده‌هاي منتقل شده توسط Task‌ها، مي‌توانند از انواع فايل‌هاي مختلف انتخاب شوند. كليه منابع اطلاعاتي كه از OLEDB و يا ODBC پشتيباني كنند مانند اوراكل، كليه فرمت‌ها برنامه‌هاي مشهوري كه در ذخيره و پردازش اطلاعات كاربرد زيادي دارند مثل اكسل، فاكس‌پرو، پاراداكس، اكسس و امثال آن، فايل‌هاي متني و همچنين كليه منابع اطلاعاتي كه ساختاري به غير از بانك‌هاي رابطه‌اي دارند مثل Exchange Server و بسياري برنامه‌هاي ديگر، مي‌توانند از جمله اين موارد باشند و در ساختن يك بسته DTS به عنوان مبدا يا مقصد به‌كار روند.

 

شكل 1

شكل 2

شكل 3

شكل 4

شكل 5

DTS Work Flow
مراحل زماني و توالي اجراي قسمت‌هاي مختلف يك بسته DTS را جريان كاري DTS مي‌نامند. در واقع با استفاده از اين جريان‌هاي كاري مي‌توان مشخص كرد كه كدام Task بايد زودتر اجرا شود و يا اين‌كه اجراي يك Task پيش نياز اجرا شدن چه Task (هاي) ديگري است. بدين‌وسيله اجرا شدن هر Task نسبت به Task ديگري داراي اولويت كمتر، بيشتر و يا حتي برابر مي‌تواند باشد. بدين‌معني كه در برخي اوقات يك Task بايد تا اتمام موفقيت‌آميز يك Task  ديگر صبر كند.

اين مورد بيشتر در جايي كاربرد دارد كه يك Task بايد برروي خروجي و يا اطلاعات حاصل از نتيجه پردازش يك Task   ديگر كار كند. در برخي اوقات هم اگر عملكرد دو Task هيچ ربطي به يكديگر نداشته باشند، مي‌توان زمان اجراي آن دو را به صورت موازي (Parallel) يعني اجراي همزمان (در صورت امكان) درنظر گرفت.

در SQL Server سه نوع جريان كاري مختلف وجود دارد كه به نام‌هاي on completion ،on success ،on failure  عبور از يك Task به Task ديگر را به ترتيب در صورت اتمام پردازش، پردازش موفقيت‌آميز و پردازش غيرموفق Task  مبدا، انجام مي‌دهند.

به عنوان مثال: فرض كنيد در يك سيستم اطلاعاتي توزيع شده (Distributed) به‌صورت منظم و روزانه و در يك ساعت خاص بايد به يك سايت FTP متصل شده، يك فايل با نام  Imp.txt را كه هر روز در سايت مذكور روزآمد update مي‌شود را دريافت كرده، و آن را در جدول customers از پايگاه داده Northwind قرار دهيم.
 
فرض مي‌كنيم اين فايل متني (Text) شامل ليست مشتريان جديدي است كه روزانه به سيستم فروش ما اضافه مي‌شود. بنابراين پس از قرار دادن مشتريان جديد در جدول مذكور بايد يك دستور SQL را اجرا كنيم تا براي مشتريان تازه وارد شده در جدول customers يك حساب تفضيلي در جدول Accounts ايجاد كند.
 
از قرار معلوم در اين مثال به يك DTS Connection جهت دسترسي به پايگاه داده Northwind، يك Task از نوع FTP ، يك Task ديگر از نوع  Bulk Insert و  نهايتاً يك Task از جنس Execute SQL نيازمنديم. به همين منظور بر روي زبانه Data Transformation Services در Enterprise Manager كليك كرده  سپس بر روي آيتم Local Package كليك سمت راست مي‌كنيم و دستور New Package را انتخاب مي‌كنيم تا پنجره ويژه طراحي بسته‌هاي DTS باز شود. ابتدا يك Connection از جنس OLEDB را بر روي صفحه قرار داده و آن را به پايگاه داده Northwind متصل مي‌كنيم. (شكل 1)‌

سپس از داخل ليست وظايف (Tasks)، يك شي از جنس FTP را برروي صفحه قرار داده و آدرس سايت موردنظر و مكان قرارگيري فايل دانلود شده را در محل Directory Path مشخص مي‌كنيم، سپس به زبانه Files رفته و فايل يا فايل‌هايي را كه قرار است دانلود شوند مشخص مي‌نماييم كه در اين مثال يك فايل متني با نام New Customer.txtرا كه حاوي اطلاعات مشتريان جديد است انتخاب مي‌كنيم. (شكل2)‌

در مرحله بعد يك شي از جنس BULK Insert را برروي صفحه طراحي قرار داده و قسمت‌هاي Connection ،Table و Data file آن را به ترتيب با اتصال پايگاه ساخته شده، جدول مشتريان و مقصد فايل دانلود شدني توسط FTP را پر مي‌كنيم. (شكل 3)

در آخرين مرحله ايجاد اشياء، اكنون نوبت به ايجاد يك شي Execute SQL جهت اجراي تابع از پيش ساخته شده است كه براي كليه مشتريان جديد جدول customers يك حساب در جدول Accounts باز مي‌كند. اين شي را بر روي صفحه قرار داده و دستور SQL موردنظر را در محل SQL statement وارد مي‌كنيم. (شكل 4)

پس از ايجاد تمام اشياء موردنياز، اكنون نوبت به ايجاد جريان‌هاي كاري لازم (WorkFlows) بين آن‌ها مي‌رسد. آنچه به نظر مي‌رسد اين است كه ابتدا يك جريان كاري بين دو موجوديت FTP و BULK Insert ايجاد كنيم. از آنجا كه اين جريان كاري بايد فقط در صورت موفقيت‌آميز بودن عمليات دريافت فايل توسط شي FTP منتقل شود، بنابراين براي ايجاد جريان كاري مذكور، با استفاده از حركت ماوس هر دو شي مذكور را انتخاب كرده و سپس از منوي WorkFlow  دستور on success را انتخاب مي‌كنيم. همين عمل را براي دو شي Bulk Insert و Execute SQL هم انجام مي‌دهيم. (شكل 5)
 
اكنون بسته DTS آماده اجرا است. اين بسته مي‌تواند هم به صورت دستي و از همين محل طراحي تست يا اجرا شود و هم مي‌تواند براي اجرا در مقاطع زماني خاص (مثلاً روزي يك بار) در ساعت مخصوص زمانبندي (schedule)  شود تا به صورت خودكار و در زمان موردنياز اجرا گردد. بدين‌منظور، پس از ساختن و ذخيره كردن بسته DTS مذكور، از محيط طراحي DTS خارج شده و برروي نام بسته موردنظر كليك سمت راست مي‌كنيم و دستور Schedule Package را انتخاب مي‌نماييم. در اينجا مي‌توانيم زمان و توالي اجراي اتوماتيك بسته DTS ساخته شده را تعريف كنيم.

مهيار داعي‌الحق
ماهنامه شبکه - اسفند ۱۳۸۳ شماره 52

نگاهی به امكانات نسخه جدید SQL Server 2005

  نوشته: مهیار داعی‌الحق
ناشر: ماهنامه شبکه - فروردین و اردیبهشت ۱۳۸۳ شماره 53
shabakeh-mag.com


اشاره :

عرضه شدن نسخه 2005 پایگاه داده‌ای مشهور مایكروسافت یعنی SQLServer، بازار نرم‌افزارهای بانك اطلاعاتی را به شدت تحت تأثیر خود قرار داد. امكانات گسترده‌ای كه در این نسخه جدید تعبیه شده، طراحی و پیاده‌سازی بانك‌های اطلاعاتی را سرعت بخشیده و تلفیق و انطباق آن با انواع فناوری‌های نو مانند XML وADO.NET، باعث افزایش قدرت و كارایی آن شده است. در این مقاله به برخی از ویژگی‌های جدید این برنامه نگاهی خواهیم داشت.





Snapshot Isolation Level
یكی از روش‌هایی كه به انواع متدهای قفل كردن ردیف‌های یك جدول بانك‌اطلاعاتی در نسخه جدید اضافه شده است، شیوه تصویربرداری از ركورد است. در روش‌های قبلی، اگر یك یا چند ركورد بانك اطلاعاتی توسط دستور BeginTrans كه شروع یك فرآیند را مشخص می‌كند در شرف تغییر یا حذف قرار می‌گرفتند، تا مادامی‌ كه فرآیند مذكور توسط دستور Commit Trans تأیید یا توسط RollBack منتفی نشود، از هیچ جا و برنامه‌ای نمی‌توان ركوردهای مذكور را حتی با دستور ساده SELECT خواند. اما در روش جدید قفل‌گذاری، در صورت بروز چنین رویدادی سایر كاربران می‌توانند همواره آخرین ارزش ركوردهای مذكور را با این فرض كه هنوز هیچ تغییری در آن‌ها ایجاد نشده است بخوانند و مورد استفاده قرار دهند.


باز هم دات‌نت
با نسخه جدید SQL Server، برنامه‌نویسان بانك‌های اطلاعاتی قادرند از امكانات و قابلیت‌های موجود در پلتفرم دات‌نت و كلیه توابع و كلاس‌های ساخته شده در آن بهره‌مند شوند. یكی از ابتدایی‌ترین و در عین حال اساسی‌ترین این قابلیت‌ها، امكان استفاده از دو زبان مهم و كاربرپسند دات‌نت یعنی ویژوال بیسیك و سی‌شارپ در پیاده‌سازی اجزای مختلف یك بانك‌اطلاعاتی است. این عامل نه‌تنها باعث می‌شود كه برنامه‌نویسان برای نوشتن ماژول‌هایی مثل تریگرها، روال‌ها (Stored Procedures) در توابع به جای استفاده از زبان استاندارد و در عین حال پیچیده T-SQL ، بتوانند از زبان‌های محیط دات‌نت با تمام ساختارها، دستورات، كلاس‌ها، آرایه‌ها، و خلاصه تمام ویژگی‌های یك زبان شی گرا استفاده كنند، بلكه این همكاری نزدیك بین موتور برنامه‌نویسی دات‌نت یعنی CLR (كه مسؤول تبدیل كدهای نوشته شده دات‌نت به زبان سیستم‌عامل است) و موتور بانك اطلاعاتی SQLServer باعث شده تا به غیر از تنوع زبان‌های برنامه‌نویسی قابل استفاده درSQLServer، تغییر قابل توجهی نیز در كارایی ماژول‌های مذكور پیش آید. در واقع موضوع از این قرار است كه اصولاً كدهای نوشته شده به زبان‌های دات‌نت، ابتدا توسط كامپایلر به زبان (IL) ترجمه می‌شوند. سپس CLR این كد میانی را به كد قابل فهم سیستم‌عامل تبدیل و آماده اجرا می‌نماید. این كار سبب می‌شود تا كدهای نهایی به دلیل این‌كه بسیار به سیستم‌عامل نزدیك می‌باشد سریع‌تر از كدهای TSQL (كه فقط توسط موتور بانك اطلاعاتی قابل اجرا هستند) اجرا شوند و در زمان اجرا از كارایی بیشتری برخوردار باشند. البته این مسأله بدین معنی نیست كه استفاده از زبان‌های دات‌نت همیشه بر زبان‌های SQL ارجحیت دارد، بلكه منظور آن است كه در برخی موارد ممكن است آن قدر منطق و الگوریتم یك ماژول پیچیده باشد كه برنامه‌نویس استفاده از زبان‌های دات‌نت را به دلیل آسان‌تر بودن ساختار و دستورات آن به زبان SQL ترجیح دهد. بنابراین زمانی كه بیشترعملیات یك ماژول مربوط به خواندن و نوشتن اطلاعات باشد بهتر است از همان دستورات استاندارد SQL  یعنی SELECT ،UPDATE ،DELETE وINSERT استفاده كرده و بی‌جهت منابع سیستم را صرف تعریف متغیرها و كلاس‌های دات‌نت ننماید. اما در ماژول‌هایی كه بیشتر عملیاتشان شامل پردازش اطلاعات مثل انجام عملیات‌های ریاضی یا مقایسه اطلاعات با یكدیگر است بهتر است تا هم از امكانات برنامه‌نویسی و هم از سرعت و كارایی بالای دات‌نت در این زمینه بهره برد و ماژول‌های مذكور را با زبان‌های دات‌نت پیاده‌سازی كرد.


 ADO .NET وارد می‌شود
طبق یك سنت نه‌چندان قدیمی برنامه‌نویسی در محیط ویندوز، برنامه‌نویسان SQLServer، بانك اطلاعاتی موردنظرشان را برروی سرور و برنامه كاربردی نوشته شده با زبانی مثل ویژوال بیسیك را بر روی كلاینت‌ها قرار می‌دهند. سپس از طریق این برنامه كاربردی و با استفاده از اشیایی از جنس ADO داده‌های موردنیاز خود را از سمت سرور دریافت كرده و یا به آن ارسال می‌كنند. اكنون این ارتباط به لطف نسخه جدید SQLServer و همچنین محیط دات‌نت، با امكانات جدیدADO.NET بسیار كامل‌تر از قبل شده است. این ارتباط جدید با استفاده از مكانیسمی به نام اعلان (Notification) به یك ارتباط دو‌طرفه فعال تبدیل شده به طوری كه ADO.NET قادر است پیغام‌هایی را از سمت پایگاه داده به سمت كلاینت ارسال كند. به عنوان مثال فرض كنید كه شما با استفاده ازADO تعدادی از ركوردهای یك جدول بانك اطلاعاتی را انتخاب كرده و مشغول كار برروی آن‌ها هستید. در همین هنگام كاربر دیگری از طریق كلاینت و ADO خود، ركوردی در محدوده ركوردهای مورد انتخاب شما را تغییر می‌دهد یا حذف می‌كند. در این وقت موتور پایگاه داده با ارسال پیغامی به ADO شما، این مسأله را با استفاده از فراخوانی یك رخداد (Event) شی ADO به اطلاعتان می‌رساند.
علاوه براین قابلیت جدید، فناوری جدید دیگری هم با استفاده ازADO.NET به نسخه جدید SQLServer اضافه شده و آن امكان چند پرس‌وجوی همزمان توسط یك شی ADO است. در این شیوه اگر یك شی ADO با استفاده از دستور SELECT مشغول خواندن تعدادی از ركوردهای یك جدول بانك اطلاعاتی باشد، می‌تواند بدون این‌كه منتظر به پایان رسیدن این عملیات شود، تعداد دیگری از ركوردهای یك جدول دیگر بانك اطلاعاتی را بخواند. این قابلیت جدید با نام (Multiple Active Result Set (MARS كه قبلاً فقط در كرسرهای سمت سرور (server side) و آن هم نه با كارایی بالا وجود داشت اكنون در كرسرهای سمت راست كلاینت هم وجود دارد و تفاوت عمده آن با شكل قدیمی هم علاوه بر مورد مذكور، امكان ایجاد چند كرسر در یك شی ADO به صورت همزمان است. SQLServer نسخه 2005 به خوبی از تمام این ویژگی‌ها، پشتیبانی می‌كند.


تكنولوژی XML  




اكنون كه XML به یك استاندارد ارتباطی بین سكوهای مختلف تبدیل شده است، نسخه جدید SQLServer هم از توجه كافی به آن و ایجاد یك انقلاب در ساده‌تر استفاده كردن از آن طفره نرفته است. در نسخه 2000 كاربران قادر بودند تا با استفاده از دستور FOR XML نتیجه یك پرس‌وجوی SELECT از یك بانك اطلاعاتی را به درون یك فایل XML بریزند یا مثلاً با دستور OPEN XML می‌توانستند یك فایل XML را باز كرده و شروع به خواندن دستورات درون آن نمایند.
از آن‌جا كه در نسخه جدید SQLServer توجه خاصی به این استاندارد و زبان ارتباطی شده است، یك نوع داده جدید (Data type) به انواع داده‌های قبلی و استاندارد SQL مثل int ، char و امثال آن اضافه شده است. این نوع داده جدید كه XML نام دارد و دارای خصوصیات یك نوع داده موجود در یك محیط شی‌گرا است، دارای متدهای پیشرفته‌ای چون ()nodes() ،Value() ،exist() ،query و ()modify بوده و قادر است انواع پردازش‌های قابل انجام برروی اسناد XML را به راحتی انجام دهد. عملیات جستجو، تغییر، حذف و درج مقادیر موردنظر در داخل یك فایل XML را می‌توان با استفاده از متدهای مذكور و صرفاً با چند خط برنامه‌نویسی انجام داد. همچنین در این نسخه برخلاف نسخه 2000، با استفاده از دستور FOR XML می‌توان یك شیء از جنس XML را بدون ارسال آن به كلاینت، برروی سرور ساخته و از آن نگهداری كرد. با این كار می‌توان جداولی را كه مرتباً مورد رجوع كاربران قرار می‌گیرند هراز گاهی در قالب XML به داخل حافظه آورد و كاربران مذكور به جای رجوع به جداول اصلی در هارددیسك، با استفاده از دستورات ویژه جستجو درXML ، متغیر مذكور را در حافظه سرور مورد جستجو قرار دهند و بدین‌وسیله یك نوع عمل Cache كردن را جهت افزایش سرعت دسترسی به اطلاعات تكراری شبیه‌سازی كنند. در این حالت، كاربران به جای استفاده از دستورSELECT استاندارد می‌توانند از OPEN XML كه در نسخه 2005 قادر است متغیرهای جدید از نوع XML را بخواند استفاده كرده و به سرعت به اطلاعات موردنیاز خود دسترسی پیدا كنند. این قابلیت جدید آن‌قدر در سریع‌تر كردن جستجو در برنامه‌های تحت وب مهم و مؤثر است كه جای هیچ مشكلی را در استفاده از آن باقی نمی‌گذارد.


سرویس اعلان (Notification)  
همان‌طور كه گفتیم سیستم اعلان درSQLServer قادر است پیغام‌هایی را طی زمان‌های مشخص به سمت كاربران بفرستد. مثلاً تصور كنید كه تعدادی كاربر در حال اتصال به یك بانك حاوی اطلاعات مربوط به ارزش سهام در بورس هستند. از آن‌جایی كه ممكن است قیمت سهام هر شركت یا مؤسسه برای تعدادی از كاربران از اهمیت زیادی برخوردار باشد، می‌توان این سیستم را طوری تنظیم كرد تا هرگاه ارزش سهام خاصی كه موردنظر هر كاربر است تغییر كرد، به صورت اتوماتیك به وی اعلام شود. كاربر هم می‌تواند این تغییرات را برروی برنامه كاربردی خود، تلفن همراه (در قالب Windows Messenger ،(SMS و یا ایمیل به‌صورت مرتب دریافت و مشاهده كند.


سرویس گزارش‌گیری
سرویس جدید تولید گزارش‌های متنوع در نسخه 2005 به یكی از جالب‌ترین و پركاربردترین قابلیت‌های این نسخه تبدیل شده است، وجود یك موتور گزارشگر قوی در سمت سرور و یك ابزار مناسب ساخت گزارش با واسط كاربر عالی، باعث شده تا برنامه‌نویسان بتوانند گزارش‌های موردنظر خود را با كارایی و سرعت مناسب در سمت سرور بسازند به طوری كه این گزارش‌های سمت سرور توسط هر برنامه كاربردی سمت كلاینت در هر پلتفرمی با همان امكانات اتصال به SQLServer قابل مشاهده  است.


بهبودهای ایجاد شده در زبان
در 2005 SQLServer تغییرات بسیار مثبتی در زبان SQL T  ایجاد شده است. این تغییرات در زمینه‌های مختلف مثل مدیریت خطاها، جستجوهای بازگشتی (Recursive Query) و حتی در بدنه موتور پایگاه داده‌ها انجام شده و كارایی كلی ذخیره و یا خواندن اطلاعات را به نحو مطلوبی افزایش داده است. به عنوان مثال دردستورات
TSQL، دو اپراتور جدید دیده می‌شود، كه PIVOT وUNPIVOT نام دارند. این دو اپراتور كه در قسمت FROM یك پرس‌وجو مورد استفاده قرار می‌گیرند می‌توانند نتیجه یك جستجوی انجام شده توسط دستور SELECT را به جای برگرداندن در قالب ردیف‌ها یا ركوردهای پشت‌سرهم، به صورت ستون‌های مختلف یك یا چند ركورد برگردانند. در این روش یكی از ستون‌های (فیلدهای) یك جستجو به عنوان محور معرفی شده و بقیه ستون‌ها براساس آن به صورت افقی طبقه‌بندی می‌شوند. به یك مثال توجه كنید:
SELECT CUSTOMER ID, order No
FROM orders PIVOT CustomerID

































Order No


Order No


Order No


Order No


Customer ID


 


4400


1120


25


1


 


 


 


350


2


 


 


1780


443


3


8989


2222


1980


555


4


                                              نتیجه جستجوی فوق چیزی شبیه جدول بالا‌ خواهد بود


همان‌طور كه مشاهده می‌كنید با استفاده از اپراتور مذكور، نتیجه پرس‌وجوی انجام شده به این صورت كه هر ردیف به یك شماره مشتری و چندین شماره سفارش مربوطه به آن مشتری در قالب ستون‌های مختلف است، در می‌آید. این همان چیزی است كه سال‌ها درSQLServer وجود نداشت و ابزارهای مختلف گزارش‌سازی مثل CrystalReport آن را با نام Cross Tab به كاربران خود ارایه می‌دادند. در همین رابطه اپراتورUNPIVOT هم عمل عكس اپراتور مذكور را انجام می‌دهد.
اپراتور دیگری كه می‌تواند نقش مهمی را در دستورات SQL بازی كند APPLY نام دارد كه در قسمت FROM یك دستور SQL به كار می‌رود. با استفاده از این دستور می‌توان خروجی یك تابع (Function) را با یك یا چند جدول دیگر تركیب (Join) كرد همان‌طور كه می‌دانید در 2005  SQLServer توابع می‌توانند یك یا چند ردیف یك جدول اطلاعاتی را برگردانند كه این خروجی می‌تواند با یك جدول دیگر با استفاده از اپراتور مذكور تركیب شود.

مدیریت خطا
در نسخه‌های قدیمی SQLServer برای كشف و مدیریت خطا از سیستم Error Handling استفاده می‌شد. این شیوه كشف خطا كه در زبانی مثل ویژوال بیسیك 6 هم مورد استفاده قرار می‌گرفت با استفاده از دستور GOTO  می‌توانست كنترل و خط اجرای روال را از یك محل به محل دیگر و در واقع از محل بروز خطا به محل مدیریت و آشكار كردن (Raise) آن ببرد و بدین‌وسیله پیغام خطایی را به كار نشان دهد. نسخه جدید SQLServer با تأثیر از پلتفرم دات‌نت، از دستورات ویژه كشف و مدیریت خطا با عنوان Exception Handling استفاده می‌كند. این روش با استفاده از دستورات جدید TRY/CATCH شیوه بهتری از مدیریت خطا را به اجرا می‌گذارد. در این روش برخلاف روش قبل، تمام خطاهای اتفاق‌افتادنی مثل خطاهای مربوط به تبدیل داده‌ها به یكدیگر (DataConversion) به خوبی مدیریت شده و از بروز خطاهایی كه منجر به اتمام ناقص عملیات یك روال یا تریگر می‌شود جلوگیری به عمل می‌آید.

پی‌نوشت:
اطلاعات بیشتر درباره این نرم‌افزار (از جمله چند دموی Flash) را می‌توانید از این نشانی بدست آورید

با سپاس از سایت ICTNA.IR