es
Feedback
SQL Server

SQL Server

Ir al canal en Telegram

حمید رضا صادقیان 🔴طراح‌ومشاوربانک های اطلاعاتیSQLSERVER ⚫️مدرس دوره های آموزشیDatabase ارتباط با من: @Hamidreza_Sadeghian گروه تبادل نظر: https://t.me/+uIc1qhv58gU0NWQ0

Mostrar más
3 953
Suscriptores
Sin datos24 horas
-47 días
-1530 días
Archivo de publicaciones
میلاد با سعادت حضرت مهدی عج الله تعالی فرجه الشریف رو به همه دوستداران و منتظران واقعی حضرت تبریک عرض می کنم.
میلاد با سعادت حضرت مهدی عج الله تعالی فرجه الشریف رو به همه دوستداران و منتظران واقعی حضرت تبریک عرض می کنم.

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

دوره بسیار عالی با افرادی بسیار دقیق و باهوش در شرکت موتورسازان تراکتور سازی تبریز #performance_tuning #T_SQL #SQL_Server

photo content
+1

بدون شرح 😍😍😍😍😉😉
بدون شرح 😍😍😍😍😉😉

سلام وعرض ادب خدمت دوستان عزیز امیدوارم حالتون خوب باشه شاید بارها پیش اومده باشه براتون که نیاز داشته باشین روی نتیجه SP ها سلکت بزنین و شرط بذارین یا از نتیجه اون در Join ها استفاده کنید. خوب راه معمولش این هست که نتیجه SP رو داخل یک جدول موقت بریزین و بعد از اون جدول استفاده کنید. یک راه ساده تر این هست که از Openrowset استفاده کنید. برای استفاده از OpenrowSet ابتدا باید دستور زیر رو اجرا کنید. sp_configure 'Ad Hoc Distributed Queries',1 Go Reconfigure go سپس میتونید از این قالب استفاده کنید. select a.* from openrowset('sqlncli','server=.;trusted_connection=yes;',' exec DbName.dbo.UspReturnPersonelList ''01-11-2018'',''29-12-2018''') as a where a.[name] =N'Hamidreza' در این کد در قسمت Trusted_Connection من از Windows_Authentication استفاده کردم و در قسمت Server هم نام سرور لوکال خودم رو قرار دادم. که میتونه نام هر سروری و باهر دسترسی باشه. و درنهایت نام دیتابیس به همراه Schema رو با نام SP صدا زدم و بهش دوتا پارامتر تاریخ پاس دادم. نکته : اگر حجم داده ها زیاد هست و نیاز دارید خیلی از این داده ها استفاده کنید پیشنهاد میکنم از جدول استفاده کنید. چون روی جدول شما قابلیت ایندکس گذاری نیز دارید . این مورد برای زمانهایی هست که یا حجم داده ها کمتر هستن یا تعداد استفاده آنها خیلی کم هست. امیدوارم از این نکته لذت ببرید ☺️☺️ ارادتمند شما حمیدرضا صادقیان #openRowset #SQL_Server #TSQL #SP #Stored_Procedure ID:@Hamidreza_Sadeghian Channel :@SQL_Server SQL Server Group :https://t.me/joinchat/BTQQtzy50j_MVbMcUf6PtA

حملات SQL(1).pdf9.52 KB

با سلام خدمت دوستان عزیزم امیدوارم حالتون خوب باشه در پست بعد مقاله ای رو به فارسی براتون قرار میدم که یکی از عزیزان زحمت ارسالش رو کشیدن و خیلی دقیق به موضوع SQL Injection پرداختند. پیشنهاد میکنم حتما از این مقاله بهره ببرید تا امنیت سیستم هاتون ارتقا پیدا کنه. ارادتمند شما حمیدرضا صادقیان با تشکر از @xXKingAttilaXx ID:@Hamidreza_Sadeghian Channel :@SQL_Server

سلام و عرض ادب خدمت دوستان عزیزم شبتون بخیر باشه نکته ای که اخیرا زیاد میشنوم در خصوص مدیریت فایلهای LDF ، این هست که بعضی مواقع نیاز شده فایلها سایزشون کم بشه ، دوستان اومدن دیتابیس رو Detach کردن و فایل log رو حذف کرده و با استفاده از attach for rebuild دیتابیس رو attachکردن که فایل Log هم ساخته شده.!!! این یک کار بسیار خطرناک و پر ریسکی هست و اگر به هردلیلی تراکنش های باز در فایل Log باشه دیگه فایل Log برای شما ساخته نمیشه و در واقع دیتابیس شما attach نخواهد شد. و تنها راهش استفاده از روشهای پیچیده برای بازیابی فایلهای MDF می باشد. لطفا برای مدیریت Log ها از روشهای بهتر مانند Log Backup استفاده کنید و زندگی بی دردسری رو تجربه کنید. 😁😁 نکته دوم و خیلی حیاتی برای دوستانی که عادت دارند مستقیما در محیطهای عملیاتی داده ها رو تغییر بدن و عملا دل شیر دارن😉 حتما از این روش استفاده کنید که اگر یک درصد خطایی هم رخ داد بتونید به شرایط نرمال برگردین. Begin Tran Update Table1 set field1=10 اگر دقت کرده باشین من یک Transaction باز کردم ولی نه Commit کردم نه Rollback . این باعث میشه تغییرات من در دیتابیس اعمال نشه و در همین Session من میتونم از جداولی که نیاز هست Query تهیه کنم ببینم داده ها درست اعمال شدند یا خیر. اگر درست بود میتونم با دستور Commit تغییرات رو اعمال کنم و اگر درست نبود با Rollback تغییرات برمیگرده. بارها پیش اومده مثلا جدولی Drop شده یا مقداری حذف شده ، با این روش به راحتی میتونید جلوی خطاهایی مانندوارد کردن اشتباه اسم جداول ، نذاشتن فیلترهای مناسب ، دستورات نابجا رو بگیریم. امیدوارم این دو نکته کمک کنه وارد شرایط بحرانی نشین.😉😉😉 ارادتمند شما حمیدرضا صادقیان ID:@Hamidreza_Sadeghian Channel :@SQL_Server

یک دوره عالی در شرکت الگوریتم پویا در خصوص performance tuning با بچه هایی بسیار پر انرژی ، باهوش و خستگی ناپذیر💪💪💪💪

photo content
+1

سلام و عرض ادب خدمت دوستان گرامی امیدوارم حالتون خوب باشه اخیرا موردی در یک سازمان بزرگ رخ داده و اون هم این بوده که دیتابیس سیستم اتوماسیون دچار مشکل شده و شرکت محترم نرم افزاری که القصه یکی از بزرگترین شرکتهای بزرگ تولید کننده سیستم های اتوماسیون هست!! اومدن دیتابیس رو بررسی کردن و زحمت کشیدن آخرین بکاپ رو Restore کردن و به دلیل عدم دانش درست از دیتابیس ، سبب شده تقریبا 2 ساعت کار بر روی این دیتابیس در اون سازمان از دست بره. دوستان عزیز ، اگر شرکت نرم افزاری هستید ، به هیچ وجه مسئولیت نگهداری بانک های اطلاعاتی یک سازمان به عهده شما نیست. اگر قرار هست بانک اطلاعاتی رو شما نگهداری کنید ، حتما در تیم خودتون از یک DBA حرفه ای استفاده کنید. دوستان عزیز ، کار یک DBA ، در تخصص یک مهندس نرم افزار و برنامه نویس نیست به هیچ وجه. مسئول شبکه نیز تخصصش DBA نیست. گاها مواردی پیش میاد که فقط یک DBA با تجربه میتونه مشکل رو حل کنه. اگر همچنان مصر هستید که بانک های اطلاعاتی سازمان رو نگهداری کنید باید حتما یک قرارداد جداگانه برای نگهداری دیتابیس وضع بشه. باید تمام ابزارهای مانیتورینگ تخصصی بر روی SQL Server پیاده سازی بشه . سیستم های Notification باید راه اندازی بشه و باید DBA شما بتونه در مواقع بحرانی و حساس در هر ساعت و ایامی بر روی دیتابیس کار کنه و حتما باید برای اینکار شیفت مخصوص داشته باشید. حتما باید دیتابیس ها به صورت روزانه مانیتور بشه. سازمانهای عزیز ، دقت کنید وقتی قرار هست دیتای شما توسط شرکت نگهداری بشه باید حتما قرارداد محرمانگی بین شما و شرکت نرم افزاری امضا بشه تا دیتای شما از دست نره. فقط یک نفر و فقط یک نفر و فقط یک نفر باید SYSAdmin باشه. حتی مدیر شبکه نباید دسترسی به دیتابیس داشته باشه باید حتما Audit Log بر روی SQL Server راه اندازی شده باشه تا بتونید وضعیت رفتاری هر شخصی که بر روی سرور متصل میشه رو Trace کنید. دوستان عزیز، اگر هر کدوم ا زموارد فوق رو رعایت نکردین ، باید عواقبی مانند از بین رفتن دیتا ، آلوده شدن و Encrypt شدن توسط باج افزارها ، کند شدن سرورها ، دزدیده شدن داده ها و .... رو کاملا بپذیرید. ارادتمند شما حمیدرضا صادقیان ID:@Hamidreza_Sadeghian Channel :@SQL_Server

شرکت پخش رازی جهت تکمیل کادر فنی خود نیاز به افراد زیر به صورت تمام وقت دارد: برنامه نویس Windows Application : - مسلط به زبان C#.Net - تسلط کافی به کدنویسی T-SQL - آشنایی با برنامه نویسی تحت وب مزیت حساب می شود. توانایی های عمومی : - توانایی کار در سازمانهای بزرگ - توانایی حل مشکلات پیچیده - توانایی مدیریت استرس افراد واجد شرایط لطفا رزومه های خود را به آیدی زیر ارسال کنید. @Hamidreza_Sadeghian

سلام و عرض ادب خدمت دوستان گرامی امیدوارم حالتون خوب باشه اگر در جایی مشغول به فعالیت هستید که AlwaysON راه اندازی شده باشه ، ممکنه این سناریو براتون رخ بده فرض کنید دوتا سرور دارید که بر روی اون AlwaysON راه اندازی کردین و این ها به صورت Synchronous هستند . حالا سرور دوم از کار افتاده و عملا سبب شده فایل لاگ شما داره به شدت رشد میکنه. اگر در این حالت دستور زیر رو اجرا کنید. select name,log_reuse_wait_desc from sys.databases ملاحظه خواهید کرد که در Wait ها نوشته Availability_group . در این حالت اگر شما بیاین دیتابیس رو از Availability_Group خارج کنید مشکلی که پیش میاد بهتون خطا میده که Chain در فایل LOG با MDF همخوانی نداره و به نظر میاد دیتابیس شما به مشکل خورده و نه میشه ازش Backup تهیه کرد نه دستورات DBCC اجرا میشه و اگر دیتابیس رو Detach کنید با مشکلات عدیده ای مواجه خواهید شد. راه حل اول : اینکه ارتباط سرور دوم رو برقرار کنید تا لاگها ارسال شده و این مشکل حل بشه راه حل دوم : تغییر مد Replica از Synchronous به Asynchronous که سبب میشه این Wait به Log_Backup تبدیل بشه که به راحتی با یک Log Backup مشکل فضای شما حل میشه و مساله ای نخواهید داشت. اگر اشتباها اومدین دیتابیس رو از Availability group حذف کردین راهش این هست که با استفاده از کد زیر: use Master Go ALTER AVAILABILITY GROUP MyAG ADD DATABASE YourDB; GO دیتابیس رو سوری به AlwaysON اضافه کنید و مراحل بالا رو طی کنید. امیدوارم این نکته مفید واقع شده باشه. ارادتمند شما حمیدرضا صادقیان ID:@Hamidreza_Sadeghian Channel :@SQL_Server #Log_FIle #LDF #LOG_Growth #AlwaysON #Availability_GROUP #Log_Backup

سلام و عرض ادب خدمت دوستان عزیزم امیدوارم حالتون خوب باشه یکی از مواردی که در بررسی کدهای سازمانها و شرکتهای مختلف دیدم وجود داره استفاده از Scalar function ها هست. امروز میخوام نکته ای رو بگم که بهتون کمک میکنه پرفورمنس این نوع توابع نیز افزایش پیدا کنه. اگر در تعریف این تابع دقت کرده باشین این کلید ها وجود داره <function_option>::= { [ ENCRYPTION ] | [ SCHEMABINDING ] | [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ] | [ EXECUTE_AS_Clause ] } یکی از این گزینه ها Returns null on null input هست . اگر د راستفاده از این تابع در جدول مورد نظر مقادیر Null وجود داره که میتونه Null برگردونه ، با اضافه کردن این گزینه به هدر تابع ، اسکیوال سرور مقادیر Null رو صرفنظر کرده و فقط مقادیر اصلی رو به این تابع ارسال ، و خروجی واحد دریافت خواهد کرد. مثلا فرض کنید در یک جدولی تابعی نوشتید که میدونید اگر مقدار Null به پارامتر تابع ارسال بشه حتما خروجی Null خواهد بود و این جدول فرضا 40000 ردیف دارد. که 20000 ردیف آن Null و مابقی مقدار دارد. اگر از این دستور استفاده نکنید و از تابعی که نوشتید در بدنه Select استفاده کنید ، این تابع به ازای هر 40000 ردیف موجود در جدول اجرا خواهد شد. ولی اگر از این دستور استفاده کنید تابع شما فقط 20000 مرتبه اجرا خواهد شد و برای مقادیر Null اجرا نمی شود. این سبب خواهد شد سرعت پردازش و اجرای کدهای Scalar شما در صورتی که دارای شرط فوق باشه ، افزایش پیدا کنه. در ضمن اینکه این گزینه از نسخه 2008 به بعد وجود داره. برای تست این موضوع ، بر روی دیتابیس Adventureworks 2017 نیز میتونید با توابع زیر این رو تست کنید. USE [AdventureWorks2017]; GO CREATE FUNCTION [dbo].[ufnLeadingZeros_new]( @Value int ) RETURNS varchar(8) WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT AS BEGIN DECLARE @ReturnValue varchar(8); SET @ReturnValue = CONVERT(varchar(8), @Value); SET @ReturnValue = REPLICATE('0', 8 - DATALENGTH(@ReturnValue)) + @ReturnValue; RETURN (@ReturnValue); END; GO و سپس این کدهارو اجرا کنید. SELECT SalesOrderID, dbo.ufnLeadingZeros(CurrencyRateID) FROM Sales.SalesOrderHeader; GO SELECT SalesOrderID, dbo.ufnLeadingZeros_new(CurrencyRateID) FROM Sales.SalesOrderHeader; GO برای مانیتور کردنش هم Event های زیر رو تعریف کنید. CREATE EVENT SESSION [Session72] ON SERVER ADD EVENT sqlserver.module_end( WHERE ([package0].[equal_uint64]([sqlserver].[session_id],(125)))), ADD EVENT sqlserver.sql_batch_completed( WHERE ([package0].[equal_uint64]([sqlserver].[session_id],(125)))), ADD EVENT sqlserver.sql_batch_starting( WHERE ([package0].[equal_uint64]([sqlserver].[session_id],(125)))), ADD EVENT sqlserver.sql_statement_completed( WHERE ([package0].[equal_uint64]([sqlserver].[session_id],(125)))), ADD EVENT sqlserver.sql_statement_starting( WHERE ([package0].[equal_uint64]([sqlserver].[session_id],(125)))) WITH (TRACK_CAUSALITY=ON) GO فقط نکته اینکه مقدار 125 برای Session تستی من هست که فیلتر کنم که دقیقا همین کدهارو نمایش بده. شما اینرو براساس Session خودتون فیلتر کنید. امیدوارم این نکته در افزایش سرعت کدهاتون کمکی بهتون بکنه. ارادتمند شما حمیدرضا صادقیان ID:@Hamidreza_Sadeghian Channel :@SQL_Server #TSQL #Scalar_Funcion #UDF #Performance

سلام و عرض ادب خدمت دوستان عزیزم امیدوارم حال همگی خوب باشه یکی از مسائلی که اکثرا باهاش در کدنویسی ها درگیر هستیم بحث کنارهم قراردادن رشته هاست. مثلا فرض کنید میخواهیم ستون نام یک جدول رو کنار هم قرارداده و با , اینهارو از هم جدا کنیم ورشته ای مثل رشته زیر رو تولید کنیم. علی,حمید,محمد,داریوش,.... یکی از روشهای اینکار استفاده از For Xml path بود که باید رشته رو تولید کرده و توسط دستورات stuff رشته درست بشه و اضافاتش حذف بشه. در نسخه 2017 تابعی به نام String_Agg() اضافه شده که همین کار رو برای شما انجام میده. این تابع دوتا ورودی میگیره که رشته و نوع جداکننده هست و همچنین میتونید تعیین کنید رشته مورد نظر براساس چه فیلدی مرتب بشه. به این مثال توجه کنید.: SELECT town, STRING_AGG (email, ';') WITHIN GROUP (ORDER BY email ASC) AS emails FROM dbo.Employee GROUP BY town; نتیجه کوئری : town emails Seattle catherine0@adw.com;kim2@adw.com;syed0@adw.com LA hazem0@adw.com;sam1@adw.com در این مثال لیست ایمیلها به واسطه ; از هم جداشدند و براساس Town نیز دسته بندی شدند و خود ایمیلها نیز به صورت الفبا مرتب شدند. امیدوارم این نکته براتون مفید واقع شده باشه. ارادتمند شما حمیدرضا صادقیان ID:@Hamidreza_Sadeghian Channel :@SQL_Server #TSQL #For_XML_PAth #String_agg #Concatenates_String

سلام و عرض ادب خدمت دوستان عزیزم امیدوارم حال همه شما خوب و خوش باشه . یکی از موارد مهمی که برای اکثر شرکتهای نرم افزاری پیش میاد ، نحوه بروز رسانی دیتابیس های مشتری ، پیدا کردن تفاوت های بین دیتابیس های مشتری ، نحوه توسعه Database ، و این دست موارد هست. در این پست میخواهم در خصوص Database Project به شما توضیح بدم. این ابزار ابتدا توسط مجموعه SSDT Tools توسط مایکروسافت در نسخه 2013 ارائه می شد و از نسخه 2015 به بعد به صورت Builtin درون خود Project های VS قرار داره. وقتی شما در VS از منوی File-new رو انتخاب می کنید یک گزینه ای به نام SQL Server projects داره که داخلش Database Project قرار داره. حالا چه مزایایی داره؟ 1- توسعه دیتابیس بسیار سریع 2- امکان Refactor کردن آبجکت های دیتابیس ، تغییر نام ، و... و اعمال در تمام آبجکتهای وابسته بدون اینکه نگران باشید جایی شاید ممکنه تغییرات شما اعمال نشده باشه. 3- امکان نوشتن Unit Test برای SP,View,Function 4- دارای Intellisense بسیار قدرتمند 5- امکان Compare کردن دیتابیس با دیتابیس محیط Production و بدست آوردن اختلافات بین دو دیتابیس 6- قابلیت اضافه شدن بسیار راحت به TFS 7- امکان Publish کردن دیتابیس و طراحی Automation build 8- امکان Publish بر روی محیط تست و اجرای تست ها بر روی محیط Test و در صورت درست بودن آن ، Publish بر روی محیط عملیاتی 9- اضافه کردن دیتابیس با استفاده از Import دیتابیس فعلی و ایضا تمام قابلیتهایی که محصولات Red gate در اختیار شما قرار میدن به راحتی با Database Project و در یک مجموعه دراختیار خواهید داشت نحوه کار با آن بسیار راحت هست و شما دیگه از سردرگمی در خصوص توسعه دیتابیس رهایی پیدا خواهید کرد. سعی میکنم در پست بعدی یک فیلم از نحوه کار با این ابزار رو برای شما عزیزان فراهم کنم. ارادتمند شما حمیدرضا صادقیان ID:@Hamidreza_Sadeghian Channel :@SQL_Server #DBA #Database_Project #Manage_Database #Database_Compare #Compare #publish #publish_Database #صادقيان #AutomationDeploy #DevOps

سلام و عرض ادب خدمت دوستان عزیزم لینک گروه تخصصی SQL Server رو قرار میدم .‌سوالی داشتید می تونید در گروه با رعایت قوانین‌گروه مطرح بفرمایید ارادتمند حمیدرضا صادقیان https://t.me/joinchat/BTQQtzy50j_MVbMcUf6PtA

سلام و عرض ادب خدمت دوستان عزیزم امیدوارم حالتون خوب باشه یک مقاله ای امروز داشتم مطالعه میکردم از Itzik Ben-Gan در خصوص رفتار SQL Server برای Log buffer Flush . پیشنهاد میکنم حتما این مقاله رو مطالعه کنید و اگر سوالی داشتید در این خصوص ، من در خدمتتون هستم. شاد و خوش باشید ارادتمند حمیدرضا صادقیان https://sqlperformance.com/2018/11/sql-performance/understanding-log-buffer-flushes ID:@Hamidreza_Sadeghian Channel :@SQL_Server #DBA #Log_Buffer_Flush #LOGBuffer #صادقيان

Dba Dailly Checklist.pdf5.87 KB