zoukankan      html  css  js  c++  java
  • SqlServer基础语法(三)

    1.数据库备份的方法:

    完整数据库备份GPOSDB 文件大小:23MB  日志备份 GPOSDB日志备份文件大小:211KB
    --完整备份
     Backup DATABASE GPOSDB
     To disk='D:GPOSDB_backup_201207160152.bak'
    

     --还原

    restore database 数据库 from disk='c:abc.bak' WITH replace
    

    2.收缩数据库的大小的方法

       数据文件:建立聚集索引,或者重建索引,然后shrinkfile 收缩数据文件
       日志文件:数据库恢复模式不能是简单要大容量日志或者完整 ,
    定期备份事务日志,才能截断事务日志

    3.设置数据库自动增长注意要点
    -1要设置成按固定大小增长,而不能按比例  对于小的数据库,设置一次增长50MB到100MB,大的数据库,一次增长100MB到200MB
    --2要定期监测各个数据文件的使用情况,尽量保证每个文件剩余的空间一样大或者是期望的比例
    --3设置文件最大值 --4发生增长后,要及时检查文件空间分配情况,避免SQL总是往个别文件写数据

    4.模仿灾难发生时还原adventurework数据库 示例 stopat
     --模仿灾难发生时还原adventurework数据库 示例 stopat
     
      BACKUP DATABASE AdventureWorks
      TO DISK= 'D:MSSQLDatabackupAdventureWorks.bak'
     
      BACKUP LOG AdventureWorks
      TO DISK ='D:MSSQLDatabackupAdventureWorks.trn'
      GO
      --灾难发生后,试图创建一个尾日志备份
     BACKUP LOG AdventureWorks
     TO DISK='D:MSSQLDatabackupAdventureWorkstail.trn'
     WITH norecovery;
     GO
     --------------------------------------
    --用界面的话这两步一起完成
    --从备份恢复一个全备份
     RESTORE DATABASE AdventureWorks
     FROM DISK ='D:MSSQLDatabackupAdventureWorks.bak'
     WITH FILE=1,NORECOVERY
     
     --从备份中恢复一个正常的日志备份
     RESTORE LOG AdventureWorks
     FROM DISK ='D:MSSQLDatabackupAdventureWorks.trn'
     WITH NORECOVERY;
     
     --------------------------------------------------------------
     
     --用stopat 恢复尾日志备份
     RESTORE LOG AdventureWorks
     FROM DISK='D:MSSQLDatabackupAdventureWorkstail.trn'
     WITH STOPAT='2012 20:59:00',
     RECOVERY;
    GO
     
    

     5.检查日志文件不能被截断的原因

      --检查日志文件不能被截断的原因
      SELECT * FROM sys.databases WHERE database_id=9
      --SELECT * FROM sys.sysdatabases
      --查看日志占用日志文件占用率
      DBCC SQLPERF(LOGSPACE)
      GO
      
      --查看不能截断日志文件的原因
      SELECT name,recovery_model_desc,log_reuse_wait,log_reuse_wait_desc
     FROM sys.databases
     GO
     
     --检查最老的活动事务
     DBCC OPENTRAN
     GO
     SELECT st.text,t2.* FROM  sys.dm_exec_sessions AS t2,sys.dm_exec_connections AS t1
     CROSS APPLY sys.dm_exec_sql_text(t1.most_recent_sql_handle) AS st
     WHERE t1.session_id=t2.session_id
     AND t1.session_id>50
     
     --如果事务比较久,可以用kill命令杀掉进程
     KILL 54
    

     6.检测孤立用户并恢复孤立用户到新的服务器 解决数据库镜像孤立用户问题

     1 --检测孤立用户并恢复孤立用户到新的服务器 解决数据库镜像孤立用户问题
     2 --注意:重新链接只能链接SQL登录帐号,不能链接Windows登录帐号
     3 --如果不选择重新链接可以使用备份master数据库的方法还原到新的服务器上,可以避免一个数据库有
     4 --成千上百个数据库用户的情况
     5 SELECT * FROM sys.server_principals
     6 SELECT  * FROM sys.database_principals
     7 
     8 --检测孤立用户
     9 USE GPOSDB     --要建立镜像的数据库
    10 EXEC sys.sp_change_users_login @Action = 'report', -- varchar(10)
    11     @UserNamePattern = NULL, -- sysname
    12     @LoginName = NULL, -- sysname
    13     @Password = NULL -- sysname
    14 GO
    15 
    16 --在服务器新建一个同名的登录帐号 ,例如hengshan,然后重新链接hengshan服务器登录帐户与数据库用户hengshan,将
    17 --他们的SID改成一致的
    18 USE GPOSDB
    19 GO
    20 EXEC sys.sp_change_users_login @Action = 'update_one', -- varchar(10)
    21     @UserNamePattern = 'hengshan', -- sysname<database_user>
    22     @LoginName = 'hengshan', -- sysname<login_name>
    23     @Password = 'test' -- sysname 将数据库用户密码跟登录帐号密码都设置为test   这里主库的hengshan用户的密码也是test
    24 
    25 
    26 
    27 ---------------SQL2008 AUTO_FIX才有用----------------------------------------------
    28    
    29 USE GPOSDB
    30 EXEC sys.sp_change_users_login @Action = 'AUTO_FIX', -- varchar(10)
    31 @UserNamePattern =hengshan -- sysname
    32 
    33    
    34 ------------------------解决数据库镜像孤立用户问题---------------------
    35 --在主数据库中执行如下语句:
    36 USE master;
    37 select sid,name from syslogins;
    38 
    39 
    40 --查找出相应的数据库用户名和sid,例如:上述的’myuser’
    41 --
    42 --在备数据库中执行如下语句:
    43 
    44 USE master;
    45 exec sp_addlogin
    46 @loginame = 'myuser',
    47 @passwd = 'test',
    48 @sid = 0x074477739DCA0E499C29394FFFC4ADE4
    49 
    50 --这里的’LoginName’即主数据库中的登录名,sid即是上述通过SQL语句查找出的sid。
    51 --注意一下密码
    52 
    53 --到此为止可以认为备机数据库的环境已经与主机同步了,还差数据库内的数据未同步
    
  • 相关阅读:
    2021.2.28
    《构建之法》11~16章读后感
    《构建之法》6~10章读后感
    《构建之法》1~5章读后感
    4.7 wait notify
    4.8 wait,notify 的正确姿势
    4.9 park&unpark
    4.10 重新理解线程的状态转换
    第七章 Redis-6.2.1脚本安装
    第三十九章 Centos 7 系统优化脚本
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/5830924.html
Copyright © 2011-2022 走看看