نمایش نتایج 1 تا 9 از 9

نام تاپیک: ارسال خروجی به فایل

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1382
    محل زندگی
    فعلا ایران - فعلا تهران
    پست
    2,628

    ارسال خروجی به فایل

    نتایج حاصل از یک دستور dbcc رو چطور میتونیم به یک فایل بفرستیم .(غیر از راه حل OSQL)

  2. #2
    معمای جالبی بود! (بابک جان به نظرم هنوز با SHOWCONTIG داری سر و کله میزنی! من برای مثال از همین استفاده کردم)

    USE Northwind
    GO

    CREATE PROC Gen_TabResult
    AS
    DBCC SHOWCONTIG ('Orders','PK_Orders') WITH TABLERESULTS
    SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
    GO

    EXEC Master..XP_CmdShell 'BCP "EXEC Northwind..Gen_TabResult" QUERYOUT C:\MyResult.txt -T -c -Craw'

    اگر برای DBCCهای دیگه خواستی استفاده کنی، تعداد NULLها رو دقت کن.
    موفق باشی

  3. #3
    کاربر دائمی
    تاریخ عضویت
    بهمن 1382
    محل زندگی
    فعلا ایران - فعلا تهران
    پست
    2,628
    ممنون امین جان
    بله هنوز درگیر اون مسئله هستم
    اینم یک سری کد
    البته بک باگ خیلی ریز داره که فکر کنم به sql Server مربوطه بشه
    با کمک این کد میشه DataBase Consistency Check دستور Showcontig رو با کمک OSQL به خروجی داد اما همیشه یک جدول ( اونم آخرین جدول رو نمایش نمیده )
     
    /*
    **Script that Executes DBCC ChekDB in all the databases
    **and records the result in a log file named C:\CheckDB\Current_Date\Db_Current Date.log
    **It is necesary to create a directory in c:\ with the name "Checkdb".
    **The Script connects to the server with OSQL and it needs the password of the SA.
    **In this script is null, but change it with your own.
    */
    Set Nocount on
    Declare @dbname varchar(100)

    Declare db Cursor For --Cursor that holds the names of the databases without Pubs and Northwind
    Select name from master.dbo.sysdatabases
    Where name not in ('Pubs','Northwind','master','model','msdb','tempd b')

    Declare @date Varchar(20) --Date to name the .log file
    Set @date=(Select Convert(Varchar(50),getdate(),110))


    Declare @osql varchar(1000)
    /*
    **Then I create a Subdirectory in c:\Checkdb\ with the date as name.
    **Because it use the current date as parameter to create the Subdirectory,
    **if you execute the script more that once in the same day, it will show you
    **and error because the subdirectory already exist.
    */
    Declare @mkdir varchar(100)
    Set @mkdir='EXEC master.dbo.xp_cmdshell '+''''+'mkdir c:\CheckDb\'+@date+''''
    EXEC (@mkdir)

    /*
    **I use the cursor to execute the osql statement in all the databases
    **wich log every DBCC Checkdb in the path created before.
    **If the password of the SA is not null, change it here.
    */

    Open db
    Fetch Next from db into @dbname
    While @@Fetch_status=0
    Begin
    --Set @osql='EXEC master.dbo.xp_cmdshell '+''''+'osql -Ubk -Pakz -Q"DBCC Checkdb ("'+@dbname+'")" -oC:\CheckDB\'+@date+'\'+@dbname+'_'+@date+'.log'+' '''
    Set @osql='EXEC master.dbo.xp_cmdshell '+''''+'osql -Ubabak -Pbabakz -Q"DBCC Showcontig " -oC:\CheckDB\'+@date+'\'+@dbname+'_'+@date+'.log'+' '''
    EXEC (@osql) --Execute the osql statement
    Fetch Next from db into @dbname
    End
    Close db

    /*
    **This section is in coments because it enable you to send the log files by E-mail.
    **If you want to recieve all the log files by email uncoment this section to enable the script.
    **You must have configured a mail client in your server

    Declare @mail Varchar(1000)
    Open db
    Fetch Next from db into @dbname
    While @@Fetch_status=0
    Begin
    Set @mail='EXEC master.dbo.xp_sendmail @recipients='+''''+'your@adress.com'+''''+',
    @subject='+''''+'Log of execution of CheckDB in Database '+@dbname+''''+',
    @message='+''''+'Check the log to see if an error ocurred while executing CheckDB in database '+@dbname+''''+',
    @attachments='+''''+'C:\CheckDB\'+@date+'\'+@dbnam e+'_'+@date+'.log'+''''
    Fetch Next from db into @dbname
    EXEC (@mail)
    End

    --Close and Deallocate the Cursor
    Close db
    **Uncoment up to here to use
    */
    Deallocate db
    آخرین ویرایش به وسیله بابک زواری : پنج شنبه 10 آذر 1384 در 14:22 عصر

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



    Set @osql='EXEC master.dbo.xp_cmdshell '+''''+'osql -Usa -P -Q"DBCC Showcontig " -o"C:\CheckDB\'+@date+'\'+@dbname+'_'+@date+'.log"' +''''


  5. #5
    کاربر دائمی
    تاریخ عضویت
    بهمن 1382
    محل زندگی
    فعلا ایران - فعلا تهران
    پست
    2,628
    در این کد شما چی ؟ اینجا درسته ؟



     


    Set @osql='EXEC master.dbo.xp_cmdshell '+''''+'osql -Usa -P -Q"DBCC Showcontig " -o"C:\CheckDB\'+@date+'\'+@dbname+'_'+@date+'.log"' +''''





  6. #6
    بله, این تنها خطی بود که من عوض کردم.

  7. #7
    قبول نیست! قائده بازی رو رعایت نکردین ;)
    قرار بود از OSQL استفاده نکنیم!!

  8. #8
    بابک جان ضمنا یک روش دیگه به ذهنم رسید که بسیار مرتب کار میکنه:
    هر Step از Job میتونه یک Output File داشته باشه. شما در Step میتونی DBCC رو استفاده کنی و بهش مسیر دلخواه رو برای Result بدی. حالا هر وقت نیاز داشتی، SP_Start_Job رو Call کن تا برات اجرا کنه و نتیجه رو به File بفرسته.
    من این کار رو انجام دادم و بعد از طریق Enterprise Manager ازش Generate SQL Script گرفتم. حالا این Script رو میتونی در برنامه (مثلا به شکل SP) استفاده کنی. اگر چه به راحتی استفاده از BCP نیست، اما خروجی اون بسیار مرتب و مناسبه.

  9. #9
    امین جان, روشی که شما استفاده کردید خیلی جالب بود و ترکیب اون با کد آقا بابک فکر کنم یک روش جالب برای نگهداری این اطلاعات بشه.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •