none
在哪里可以设置不生成文本文件报告 RRS feed

  • 问题

  • 我们一般都是使用脚本来创建job的,但是job每执行一次都会在

    C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL08R2\MSSQL\Log

    文件夹下生成文本文件报告

    如果使用界面来创建,我指的界面是使用维护计划,在创建维护计划的界面有设置的

    只要把生成文本文件的勾去掉,就不会生成文本文件报告

    但是使用脚本来创建job的话,我没有看到哪个参数可以控制不生成文本文件

    http://msdn.microsoft.com/zh-cn/library/ms182079(SQL.100).aspx

    sp_add_job [ @job_name = ] 'job_name'
         [ , [ @enabled = ] enabled ] 
         [ , [ @description = ] 'description' ] 
         [ , [ @start_step_id = ] step_id ] 
         [ , [ @category_name = ] 'category' ] 
         [ , [ @category_id = ] category_id ] 
         [ , [ @owner_login_name = ] 'login' ] 
         [ , [ @notify_level_eventlog = ] eventlog_level ] 
         [ , [ @notify_level_email = ] email_level ] 
         [ , [ @notify_level_netsend = ] netsend_level ] 
         [ , [ @notify_level_page = ] page_level ] 
         [ , [ @notify_email_operator_name = ] 'email_name' ] 
              [ , [ @notify_netsend_operator_name = ] 'netsend_name' ] 
         [ , [ @notify_page_operator_name = ] 'page_name' ] 
         [ , [ @delete_level = ] delete_level ] 
         [ , [ @job_id = ] job_id OUTPUT ] 

    因为这个文本文件报告,很多时候导致服务器C盘爆满

    2014年5月16日 9:56

答案

  • 你的 Job 用的是直接的 SQL 语句备份 (@subsystem=N'TSQL',)

    而生成报告文件的那个截图, 用的是维护计划, 这个维护计划对应的是一个 SSIS 包, 在 Job 步骤的 @subsystem 参数中体现的是SSIS

    这是两个不同的东西, 所以,  如果你那些文本文件如果确定是报告文件的话, 应该是某个(或某些)维护计划产生的, 不是你的 Job 产生的, 你可以找一台空白的服务器试下你的脚本

    2014年5月19日 3:29

全部回复

  • It's defined in job step instead with parameter @output_file_name in msdb..sp_add_jobstep, default value is null. 
    2014年5月16日 12:58
  • sp_add_jobstep [ @job_id = ] job_id | [ @job_name = ] 'job_name' [ , [ @step_id = ] step_id ] { , [ @step_name = ] 'step_name' } [ , [ @subsystem = ] 'subsystem' ] [ , [ @command = ] 'command' ] [ , [ @additional_parameters = ] 'parameters' ] [ , [ @cmdexec_success_code = ] code ] [ , [ @on_success_action = ] success_action ] [ , [ @on_success_step_id = ] success_step_id ] [ , [ @on_fail_action = ] fail_action ] [ , [ @on_fail_step_id = ] fail_step_id ] [ , [ @server = ] 'server' ] [ , [ @database_name = ] 'database' ] [ , [ @database_user_name = ] 'user' ] [ , [ @retry_attempts = ] retry_attempts ] [ , [ @retry_interval = ] retry_interval ] [ , [ @os_run_priority = ] run_priority ] [ , [ @output_file_name = ] 'file_name' ] [ , [ @flags = ] flags ] [ , { [ @proxy_id = ] proxy_id | [ @proxy_name = ] 'proxy_name' } ]

    http://msdn.microsoft.com/zh-HK/library/ms187358

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

    EXEC msdb.dbo.sp_add_jobstep @job_name=N'aaaaaaa', @step_name=N'sdf', 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_fail_action=2, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, @subsystem=N'TSQL', 
    @database_name=N'master', 
    @output_file_name=N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\1.sql', 
    @flags=0

    不对

    维护计划那里是sqlserver自动生成的文本文件报告,而且不需要指定文件名,这个参数@output_file_name

    只能指定某一个“sql文件” 还需要自己预先新建好

    不对

    2014年5月16日 13:20
  • You are talking about maintenance job specifically? It works differently from creating sql job with script.
    2014年5月16日 14:20
  • Sql use ssis package for maintenance job, maintenance log file is not specified in sql job but in ssis package. You are better to add maintenance cleanup task in the plan to delete log files.
    2014年5月16日 14:24
  • 这些作业都是我用创建作业脚本批量创建的

    我的实例下有20个数据库,这些作业的作用是备份数据库,每一个作业对应一个数据库,所以会有20个作业

    每个作业备份完毕之后会在这个路径下:C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG

    生成作业的文本文件报告

    2014年5月16日 14:36
  • Can you post whole script?
    2014年5月16日 15:30
  • USE [msdb]
    GO
    /****** 对象:  Job [DBBackup_B.9196]    脚本日期: 05/17/2014 00:10:55 ******/
    BEGIN TRANSACTION
    DECLARE @ReturnCode INT
    SELECT @ReturnCode = 0
    /****** 对象:  JobCategory [Database Maintenance]    脚本日期: 05/17/2014 00:10:55 ******/
    IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'Database Maintenance' AND category_class=1)
    BEGIN
    EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'Database Maintenance'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

    END

    DECLARE @jobId BINARY(16)
    EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'DBBackup_B_9196', 
    @enabled=0, 
    @notify_level_eventlog=0, 
    @notify_level_email=0, 
    @notify_level_netsend=0, 
    @notify_level_page=0, 
    @delete_level=0, 
    @description=N'备份', 
    @category_name=N'Database Maintenance', 
    @owner_login_name=N'sa', @job_id = @jobId OUTPUT
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    /****** 对象:  Step [Bakcup]    脚本日期: 05/17/2014 00:10:55 ******/
    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Bakcup', 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=3, 
    @on_success_step_id=0, 
    @on_fail_action=2, 
    @on_fail_step_id=0, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, @subsystem=N'TSQL', 
    @command=N'

    --备份主分区(完整备份)

        SET @FileName = ''E:\DBBackup\B.9196_Primary_Full_'' + @CurrentTime+''.bak''
        BACKUP DATABASE [B.9196]
        ' TO DISK=@FileName WITH FORMAT
    ', 
    @database_name=N'B.9196', 
    @flags=0
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

    EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Plan', 
    @enabled=1, 
    @freq_type=8, 
    @freq_interval=42, 
    @freq_subday_type=1, 
    @freq_subday_interval=0, 
    @freq_relative_interval=0, 
    @freq_recurrence_factor=1, 
    @active_start_date=20140105, 
    @active_end_date=99991231, 
    @active_start_time=4000, 
    @active_end_time=235959
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    COMMIT TRANSACTION
    GOTO EndSave
    QuitWithRollback:
        IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
    EndSave:

    2014年5月16日 15:54
  • That script shouldn't generate any log file. Does server have any maintenance plan created?
    2014年5月16日 16:45
  • 没有   
    2014年5月17日 4:52
  • 你的 Job 用的是直接的 SQL 语句备份 (@subsystem=N'TSQL',)

    而生成报告文件的那个截图, 用的是维护计划, 这个维护计划对应的是一个 SSIS 包, 在 Job 步骤的 @subsystem 参数中体现的是SSIS

    这是两个不同的东西, 所以,  如果你那些文本文件如果确定是报告文件的话, 应该是某个(或某些)维护计划产生的, 不是你的 Job 产生的, 你可以找一台空白的服务器试下你的脚本

    2014年5月19日 3:29
  • 如果是维护计划产生的,生成的文本文件名是有规律的,文件名里会有subplan_xxxxxx

    而我在log文件夹里看到的文本文件都是没有subplan这个字的

    2014年5月19日 3:55
  • 刚才测试了,确实不会产生任何文本文件,如果是TSQL的话

    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Subplan_1', 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_success_step_id=0, 
    @on_fail_action=2, 
    @on_fail_step_id=0, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, @subsystem=N'SSIS', 

    如果是ssis确实会产生文本文件

    2014年5月19日 4:22