zoukankan      html  css  js  c++  java
  • 【SQL Server DBA】日常维护语句


    数据库的日常维护,可以通过SQL Server中的维护计划来自动实现,非常方便。


    不过,也不是所有的维护,都可以通过维护计划来实现,下面将通过代码来实现。



    1、检查数据库完整性

    dbcc checkdb(test)


    通过加tablock提高速度

    dbcc checkdb(test) with tablock

    2、数据库重命名、修改恢复模式、修改用户模式

    --数据库重命名  
    ALTER DATABASE WC  
    MODIFY NAME = test 
    
    
    --设置数据库为完整恢复模式
    alter database test
    set recovery full
    
    
    --只允许一个用户访问数据库  
    alter database test  
    set single_user   
    with rollback after 10 seconds --指定多少秒后回滚事务  
      
      
    --只有sysadmin,dbcreator,db_owner角色的成员可以访问数据库  
    alter database wc  
    set restricted_user   
    with rollback immediate        --立即回滚事务  
      
      
    --多用户模式 
    alter database wc  
    set multi_user  
    with no_wait       --不等待立即改变,如不能立即完成,那么会导致执行错误  
    


    3、扩展数据库:增加文件组、增加文件、修改文件大小、修改文件的逻辑名称

    --添加文件组
    ALTER DATABASE test
    ADD FILEGROUP WC_FG8
    
    
    --添加数据文件
    ALTER DATABASE test
    ADD FILE
    (
    	NAME = WC_FG8,
    	FILENAME = 'D:WC_FG8.ndf',
    	SIZE = 1mb,
    	MAXSIZE = 10mb,
    	FILEGROWTH = 1mb
    )
    TO FILEGROUP WC_FG8
    
    
    --添加日志文件
    ALTER DATABASE test
    ADD LOG FILE
    (
    	NAME = WC_LOG3,
    	FILENAME = 'D:WC_FG3.LDF',
    	SIZE = 1MB,
    	MAXSIZE = 10MB,
    	FILEGROWTH = 100KB
    )
    
    
    --修改数据文件的大小,增长大小,最大大小
    ALTER DATABASE test
    MODIFY FILE
    (
    	NAME = 'WC_FG8',
    	SIZE = 2MB,      --必须大于之前的大小,否则报错
    	MAXSIZE= 8MB,
    	FILEGROWTH = 10%
    )
    
    
    --修改数据文件或日志文件的逻辑名称
    ALTER DATABASE test
    MODIFY FILE
    (
    	NAME = WC_LOG3,
    	NEWNAME = WC_FG33
    )
    


    4、移动文件

    --由于在SQL Server中文件组、文件不能离线
    --所以必须把整个数据库设置为离线
    checkpoint
    go
    
    ALTER DATABASE WC
    SET OFFLINE
    go
    
    
    --修改文件名称
    ALTER DATABASE WC
    MODIFY FILE
    (
    	NAME = WC_fg8,
    	FILENAME = 'D:WCWC_FG8.NDF'
    )
    go
    
    
    --把原来的文件复制到新的位置:'D:WCWC_FG8.NDF'
    
    
    --设置数据库在线
    ALTER DATABASE WC
    SET ONLINE


    5、设置默认文件组、只读文件组

    --设置默认文件组
    ALTER DATABASE WC
    MODIFY FILEGROUP WC_FG8 DEFAULT
    
    
    --设为只读文件组
    --如果文件已经是某个属性,不能再次设置相同属性
    ALTER DATABASE WC
    MODIFY FILEGROUP WC_FG8 READ_WRITE
    


    6、收缩数据库、收缩文件

    --收缩数据库  
    DBCC SHRINKDATABASE('test',    --要收缩的数据库名称或数据库ID  
                        10         --收缩后,数据库文件中空间空间占用的百分比  
                        )  
      
      
    DBCC SHRINKDATABASE('test',    --要收缩的数据库名称或数据库ID  
                        10,        --收缩后,数据库文件中空闲空间占用的百分比  
                        NOTRUNCATE --在收缩时,通过数据移动来腾出自由空间  
                        )  
                   
                          
    DBCC SHRINKDATABASE('test',      --要收缩的数据库名称或数据库ID  
                        10,          --收缩后,数据库文件中空间空间占用的百分比  
                        TRUNCATEONLY --在收缩时,只是把文件尾部的空闲空间释放  
                        )  
                          
      
    --收缩文件  
    DBCC SHRINKFILE(wc_fg8,   --要收缩的数据文件逻辑名称  
                    7         --要收缩的目标大小,以MB为单位  
                    )  
                      
    DBCC SHRINKFILE(wc_fg8,   --要收缩的数据文件逻辑名称  
                    EMPTYFILE --清空文件,清空文件后,才可以删除文件  
                    ) 

    7、删除文件、删除文件组

    --要删除文件,必须要先把文件上的数据删除,或者移动到其他文件或文件组上
    --可以清空文件的内容
    DBCC SHRINKFILE(WC_FG8,EMPTYFILE)
    
    
    --删除文件,同时也在文件系统底层删除了文件
    ALTER DATABASE test
    REMOVE FILE WC_FG8
    
    
    --要删除文件组,必须先删除所有文件
    
    
    --最后删除文件组
    ALTER DATABASE test
    REMOVE FILEGROUP WC_FG8
    
    /*
    drop database www
    go
    
    create database www
    on primary
    (
    name = 'www_data01',
    filename = 'c:www_data01.mdf'
    ),
    (
    name = 'www_data02',
    filename ='c:www_data02.ndf'
    )
    
    log on
    (
    name = 'www_log',
    filename = 'c:www_log.ldf'
    )
    go
    
    use www
    go
    
    create table a(id int ,v varchar(10)) on [primary]
    go
    
    insert into a
    select OBJECT_ID,left(name,10) from sys.objects 
    go
    
    
    insert into a
    select * from a
    go 10
    
    
    DBCC SHRINKFILE(www_data02,EMPTYFILE) 
    go
    
    ALTER DATABASE www  
    REMOVE FILE www_data02 
    */

    8、重新组织索引

    ALTER INDEX [idx_temp_lock_id] ON [dbo].[temp_lock] 
    REORGANIZE 
    WITH ( LOB_COMPACTION = ON )


    批量生成重组索引的语句

    use test
    go
    
    select 'DBCC INDEXDEFRAG('+db_name()+','+o.name+','+i.name + ');'
            --,db_name(),
            --o.name,
            --i.name,
            --i.*
    
    from sysindexes i
    inner join sysobjects o
            on i.id = o.id
    where o.xtype = 'U'
          and i.indid >0
          and charindex('WA_Sys',i.name) = 0

    9、重新生成索引

    ALTER INDEX [idx_temp_lock_id] ON [dbo].[temp_lock] 
    REBUILD PARTITION = ALL 
    WITH ( PAD_INDEX  = OFF, 
           STATISTICS_NORECOMPUTE  = OFF, 
           ALLOW_ROW_LOCKS  = ON, 
           ALLOW_PAGE_LOCKS  = ON, 
           ONLINE = OFF, 
           SORT_IN_TEMPDB = OFF )

    10、更新统计信息

    --更新表中某个的统计信息  
    update statistics temp_lock(_WA_Sys_00000001_07020F21)  
      
      
    update statistics temp_lock(_WA_Sys_00000001_07020F21)  
    with sample 50 percent  
      
      
    update statistics temp_lock(_WA_Sys_00000001_07020F21)  
    with resample,    --使用最近的采样速率更新每个统计信息  
         norecompute  --查询优化器将完成此统计信息更新并禁用将来的更新  
      
      
      
    --更新索引的统计信息  
    update statistics temp_lock(idx_temp_lock_id)  
    with fullscan          
      
      
    --更新表的所有统计信息  
    update statistics txt  
    with all   

    11、执行SQL Server代理作业

    exec msdb.dbo.sp_start_job 
    	@job_name =N'job_update_sql';

    12、备份数据库(完整、差异、日志备份),这个在其他文章中已有详细描述,这里不再赘述。


  • 相关阅读:
    LeetCode Subsets II
    LeetCode Rotate Image
    LeetCode Palidrome Number
    LeetCode Generate Parentheses
    LeetCode Maximum Subarray
    LeetCode Set Matrix Zeroes
    LeetCode Remove Nth Node From End of List
    Linux Loop设备 使用
    Linux 文件系统大小调整
    LeetCode N-Queens II
  • 原文地址:https://www.cnblogs.com/momogua/p/8304511.html
Copyright © 2011-2022 走看看