1. 可能存在的SQLSERVER系统风险
SQLSERVER是一款常用的关系型数据库管理系统,如果不加以监控,可能存在以下风险:
1.1 数据库的性能问题
如果数据库在进行大量数据操作的时候没有监控,有可能会出现性能问题,从而影响到业务的正常运行。例如,由于长时间没有清理数据库日志等原因,数据库日志文件会不断增大,导致磁盘空间不足。这时候需要及时进行清理,才能避免由此带来的数据库性能问题。
1.2 数据库的安全问题
数据库的安全问题一直是企业关注的重点。如果没有对数据库进行监控,就很容易给黑客留下可乘之机,造成数据泄露、数据被篡改等严重问题。
1.3 数据库的故障问题
数据库的故障问题是常见的,例如数据库死锁、磁盘损坏等。如果没有对数据库进行监控,就很难及时发现问题并加以解决,从而给企业带来严重的损失。
2. 监控SQLSERVER状态
针对上述风险,我们需要对SQLSERVER进行监控,及时发现问题并进行处理。
2.1 监控数据库性能
为了保证数据库的高性能,需要对数据库进行实时监控。下面是一个可以实时监控数据库性能的SQL脚本:
SELECT TOP 3
qs.query_stats.query_hash AS "Query Hash",
SUBSTRING(qt.text,qs.statement_start_offset/2,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) AS "Query Text",
qs.query_stats.total_worker_time AS "TotalWorkerTime",
qs.query_stats.total_physical_reads AS "TotalPhysicalReads",
qs.query_stats.total_logical_writes AS "TotalLogicalWrites",
qs.query_stats.execution_count AS "ExecutionCount",
CAST((qs.query_stats.total_worker_time / qs.query_stats.execution_count) / 1000.0 / 1000.0 AS DECIMAL(18, 2)) AS "AvgCPUTime",
CAST((qs.query_stats.total_physical_reads / qs.query_stats.execution_count) AS DECIMAL(18, 2)) AS "AvgPhysicalReads",
CAST((qs.query_stats.total_logical_writes / qs.query_stats.execution_count) AS DECIMAL(18, 2)) AS "AvgLogicalWrites",
CAST(("AvgPhysicalReads" * 8.0) / 1024 / 1024 AS DECIMAL(18, 2)) AS "AvgPhysicalReadsGB",
CAST(("AvgLogicalWrites" * 8.0) / 1024 / 1024 AS DECIMAL(18, 2)) AS "AvgLogicalWritesGB"
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
ORDER BY "TotalPhysicalReads" DESC;
执行上述脚本后,可以实时监控数据库的性能,及时发现性能问题并加以解决。其中,可以根据具体需求修改TOP参数,获取更多或更少的性能信息。
2.2 监控数据库安全
数据库安全是企业管理的重要部分,为了确保数据库的安全性,需要对数据库进行实时监控。下面是一个可以监控数据库登录和权限变更等重要行为的脚本:
SELECT
TE.name AS "Grantee",
TR.name AS "Grantor",
TR.type_desc AS "GrantorType",
TP.name AS "Permission",
TP.object_name AS "OnObjectName",
TP.type AS "OnObjectType",
TP.state_desc AS "State",
TP.permission_name AS "Action",
TP.class_desc AS "Class",
TP.major_id AS "ObjectID",
TP.minor_id AS "ColumnID",
TP.revoke_restrictions AS "WithOption"
FROM
sys.database_permissions TP
JOIN sys.database_principals TE ON TP.grantee_principal_id = TE.principal_id AND TE.name NOT IN ('public','guest')
JOIN sys.database_principals TR ON TP.grantor_principal_id = TR.principal_id
ORDER BY
TP.class_desc ASC,
TP.object_name ASC,
TE.name ASC;
以上脚本可以查看数据库的安全设置,一旦发现异常情况,需要及时进行处理。
2.3 监控数据库故障
对于数据库的故障问题,我们需要及时发现并加以解决。下面是一段可以查询数据库故障信息的SQL脚本:
SELECT
database_id,
log_reuse_wait_desc,
state_desc,
is_auto_create_stats_on,
is_auto_update_stats_on,
is_auto_update_stats_async_on,
is_parameterization_forced,
is_read_only,
is_auto_close_on,
is_in_standby,
is_cleanly_shutdown,
is_supplemental_logging_enabled,
recovery_model_desc,
page_verify_option_desc,
user_access_desc
FROM
sys.databases
WHERE
database_id > 4;
通过该脚本,可以查看数据库的故障信息,及时发现并处理数据库故障。
3. 总结
SQLSERVER是企业常用的关系型数据库管理系统,在企业管理中扮演着重要的角色。对于SQLSERVER,我们需要进行实时监控,及时发现数据库的性能、安全以及故障问题,并加以解决。通过对SQLSERVER的全面监控,可以预防系统风险的发生,保证企业的业务正常运行。