微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – DBA新工作的第一天 – 检查备份和安全性 – 如何?还应该检查什么?

通常,当我在新环境中启动时,我倾向于检查备份的位置,上次完全备份的时间,应用的最后一次恢复的时间以及我也检查安全性.

我这样做的方法是通过T-sql.

Check the backups

;with Radhe as (
            SELECT  @@Servername as [Server_Name],B.name as Database_Name,ISNULL(STR(ABS(DATEDIFF(day,GetDate(),MAX(Backup_finish_date)))),'NEVER') as DaysSinceLastBackup,ISNULL(Convert(char(11),MAX(backup_finish_date),113)+ ' ' + CONVERT(VARCHAR(8),108),'NEVER') as LastBackupDate,BackupSize_GB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00/1024.00 AS NUMERIC(18,2)),BackupSize_MB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00 AS NUMERIC(18,media_set_id = MAX(A.media_set_id),[AVG Backup Duration]= AVG(CAST(DATEDIFF(s,A.backup_start_date,A.backup_finish_date) AS int)),[Longest Backup Duration]= MAX(CAST(DATEDIFF(s,A.type
            FROM sys.databases B 

            LEFT OUTER JOIN msdb.dbo.backupset A 
                         ON A.database_name = B.name 
                        AND A.is_copy_only = 0
                        AND (A.type = 'D')  --'D' full,'L' log 

            GROUP BY B.Name,A.type

        )

         SELECT r.[Server_Name],r.Database_Name,[Backup Type] = r.type,r.DaysSinceLastBackup,r.LastBackupDate,r.BackupSize_GB,r.BackupSize_MB,F.physical_device_name,r.[AVG Backup Duration],r.[Longest Backup Duration]

           FROM Radhe r

            LEFT OUTER JOIN msdb.dbo.backupmediafamily F
                         ON R.media_set_id = F.media_set_id

            ORDER BY r.Server_Name,r.Database_Name

For checking the security:

Server Level and Database Permissions by Kenneth Fisher

Checking the restores:

DECLARE @dbname sysname,@days int
SET @dbname = NULL --substitute for whatever database name you want
SET @days = -30 --prevIoUs number of days,script will default to 30
SELECT
 rsh.destination_database_name AS [Database],rsh.user_name AS [Restored By],CASE WHEN rsh.restore_type = 'D' THEN 'Database'
  WHEN rsh.restore_type = 'F' THEN 'File'
  WHEN rsh.restore_type = 'G' THEN 'Filegroup'
  WHEN rsh.restore_type = 'I' THEN 'Differential'
  WHEN rsh.restore_type = 'L' THEN 'Log'
  WHEN rsh.restore_type = 'V' THEN 'Verifyonly'
  WHEN rsh.restore_type = 'R' THEN 'Revert'
  ELSE rsh.restore_type 
 END AS [Restore Type],rsh.restore_date AS [Restore Started],bmf.physical_device_name AS [Restored From],rf.destination_phys_name AS [Restored To]
FROM msdb.dbo.restorehistory rsh
 INNER JOIN msdb.dbo.backupset bs ON rsh.backup_set_id = bs.backup_set_id
 INNER JOIN msdb.dbo.restorefile rf ON rsh.restore_history_id = rf.restore_history_id
 INNER JOIN msdb.dbo.backupmediafamily bmf ON bmf.media_set_id = bs.media_set_id
WHERE rsh.restore_date >= DATEADD(dd,ISNULL(@days,-30),GETDATE()) --want to search for prevIoUs days
--AND destination_database_name = ISNULL(@dbname,destination_database_name) --if no dbname,then return all
ORDER BY rsh.restore_history_id DESC
GO

Replication:

--first thing - go to the publisher DB and find out the distributor server and DB
sp_helpdistributor

-- go to the distributor server and DB found above and run the following:
sp_replmonitorhelppublication null

Mirroring:

--==============================================================================
-- query that shows the current state of each database in the mirroring
--==============================================================================
  SELECT   db_name(sd.[database_id])              AS [Database Name],sd.mirroring_state                  AS [Mirror State],sd.mirroring_state_desc             AS [Mirror State],sd.mirroring_partner_name           AS [Partner Name],sd.mirroring_role_desc              AS [Mirror Role],sd.mirroring_safety_level_desc      AS [Safety Level],sd.mirroring_witness_name           AS [Witness],sd.mirroring_connection_timeout AS [Timeout(sec)]
    FROM sys.database_mirroring AS sd
    WHERE mirroring_guid IS NOT null
    ORDER BY [Database Name];

ALWAYS ON

我用的是the script by Rudy Panigas

--  Always On Status Report
--
-- This script will show the status of the Alway On replication status

SELECT disTINCT
primary_replica as 'Primary Server',[endpoint_url] as 'End Point URL',primary_recovery_health_desc as 'Primary Server Health Status',secondary_recovery_health_desc as 'Secondary Server Health Status',operational_state_desc as 'Operational State',connected_state_desc as 'Connection State',recovery_health_desc as 'Recovery Health',synchronization_state_desc as 'Synchronization State',database_state_desc as 'Database State',JOIN_state_desc as 'Join State',suspend_reason_desc as 'Suspended Reason',availability_mode_desc as 'Availability Mode',failover_mode_desc as 'Failover Mode',primary_role_allow_connections_desc as 'Primary Connections Allowed',secondary_role_allow_connections_desc as 'Secondary Connections Allowed',create_date as 'Date Created',modify_date as 'Date Modified',[backup_priority] as 'Backup Priority',role_desc as 'Role Type',last_connect_error_description as 'Last Connection Error',last_connect_error_timestamp as 'Last Connection Error Time',last_sent_time as 'Last Data Send Time',last_received_time as 'Last Data Recieved TIme',last_hardened_time  as 'Last Hardened Time',last_redone_time as 'Last Redone Time',log_send_queue_size as 'Log Send Queue Size',log_send_rate as 'Log Send Rate',redo_queue_size as 'Redo Queue Size',redo_rate as 'Rate of Redo',filestream_send_rate as 'Filestream Send Rate',last_commit_time as ' Last Commit Time',low_water_mark_for_ghosts as 'Low Water Mark for Ghosts'
FROM sys.dm_hadr_availability_group_states

JOIN sys.availability_replicas
ON sys.dm_hadr_availability_group_states.group_id =  sys.availability_replicas.group_id

JOIN sys.dm_hadr_availability_replica_cluster_states
ON sys.dm_hadr_availability_group_states.group_id =  sys.dm_hadr_availability_replica_cluster_states.group_id

JOIN sys.dm_hadr_availability_replica_states
ON sys.dm_hadr_availability_group_states.group_id =  sys.dm_hadr_availability_replica_states.group_id

JOIN sys.dm_hadr_database_replica_states
ON sys.dm_hadr_availability_group_states.group_id =  sys.dm_hadr_database_replica_states.group_id

WHERE operational_state_desc IS NOT NULL
AND database_state_desc IS NOT NULL
ORDER BY [endpoint_url] DESC

-- Testing section
/*
-- Suspend replication from primary
ALTER DATABASE [AdventureWorksLT2008] SET HADR SUSPEND

-- Resume replication from secondary
ALTER DATABASE [AdventureWorksLT2008] SET HADR RESUME

-- Force a manual failover of replication with data loss. MUST EXECUTE ON SECONDARY sql SERVER
ALTER AVAILABILITY GROUP [AG-AdventureWorksLT2008] FORCE_FAIlovER_ALLOW_DATA_LOSS;

-- Force a manual failover of replication with NO data loss MUST EXECUTE ON SECONDARY sql SERVER
--- YOU MUST EXECUTE THE FOLLOWING SCRIPT IN sqlCMD MODE.
--Connect VDV1OPS03

ALTER AVAILABILITY GROUP [AG-AdventureWorksLT2008] FAIlovER;
GO

--- YOU MUST EXECUTE THE FOLLOWING SCRIPT IN sqlCMD MODE.
--:Connect OPSDBSRV

ALTER AVAILABILITY GROUP [AG-AdventureWorksLT2008] FAIlovER;
GO

*/

Log Shipping:

Different ways to monitor Log Shipping for SQL Server databases

题:

除了上述之外,作为优先事项,在新环境开始时我还应该检查其他事项吗?

解决方法

我出于这个原因编写了免费(和开源) sp_Blitz.

人们不停地递给我sql Server,然后说:“你是DBA,你管理着这件事.”我需要能够快速分析以下内容的东西:

>尚未备份或检查损坏的数据库
>不支持sql Server构建
>危险的跟踪标志和数据库设置
>糟糕的sp_configure选项

只需运行它,不需要任何参数,您将获得优先健康检查.优先级1-50是您想要立即跳转内容,优先级51是需要注意的事项.

如需支持或贡献代码,请于FirstResponderKit.org前往Github回购.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐