解决事务日志已满的问题
https://docs.microsoft.com/zh-cn/sql/relational-databases/logs/troubleshoot-a-full-transaction-log-sql-server-error-9002?view=sql-server-ver15
-- 获取数据库文件的逻辑名
sp_helpdb dbname
-- 完整模式收缩:会保留有效的日志,必须先备份再shrink
备份数据库日志:
Backup log dbname to disk='H:\log.bak'
收缩log文件到100M,使用log逻辑名
dbcc shrinkfile ('BGI_Log', 100)
-- 切换到简单模式收缩: 将所有的提交完成(所有有效的日志)都可以删除
USE master
GO
ALTER DATABASE dbname SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE dbname SET RECOVERY SIMPLE
GO
备份数据库:
Backup dbname to disk='H:\db.bak'
dbcc shrinkfile ('BGI_Log', 100)
或
DBCC SHRINKFILE (N'platform_Log' , 100, TRUNCATEONLY)
ALTER DATABASE dbname SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE dbname SET RECOVERY SIMPLE
GO
--Truncate Shrink/REORGANIZE REBUILD
Truncate 只会将虚拟日志的活跃部分标记为非活跃部分,这样就可以重用这些空间,它并不会影响整体事务日志大小;
Simple 模式每次事务结束后都会执行CheckPoint 检查,没有事务日志。
Full/Bulked-Log 模式每次日志备份操作以后都会执行CheckPoint 检查,将以前提交完的逻辑日志标记为可用。
Shrink 操作可以减小日志文件的物理文件大小,同时也导致日志文件被重新组织,聚簇索引和非聚簇索引的原有结构都会被打乱,导致产生索引碎片,
带来的影响是索引失效,磁盘I/O 和 CPU 的资源消耗加大,
对于Shrink 我们尽量避免使用它,一旦迫不得已使用Shrink 操作,要按照实际情况决定是否需要重建/重组织索引。
REORGANIZE更轻量,可以随时停止不需要回滚
rebuild 索引不可用导致数据访问慢(需要有维护窗口),如果有alwayson有可能同步时间变长
rebuild online需要企业版
dbcc dbreindex ([tabname],'indexname',90)
dbcc dbreindex ([tabname],'',90)
ALTER INDEX ALL ON tabname REORGANIZE
ALTER INDEX ALL ON tabname REBUILD
WITH (
ONLINE = ON
);
-- 碎片:查询索引碎片百分比:
SELECT [avg_fragmentation_in_percent] FROM sys.dm_db_index_physical_stats (
DB_ID ('DBNAME'), OBJECT_ID ('ProdTable'), 1, NULL, 'LIMITED');
GO
-- log空间利用率:
select * from msdb.sys.dm_db_log_space_usage
DBCC SQLPERF(LOGSPACE)
-- 查询各个磁盘分区的剩余空间:
Exec master.dbo.xp_fixeddrives
-- 查询当前数据库的数据文件及日志文件的相关信息(
-- 包括文件组、当前文件大小、文件最大值、文件增长设置、文件逻辑名、文件路径等)
select * from [数据库名].[dbo].[sysfiles]
-- 转换文件大小单位为MB:
select name, convert(float,size) * (8192.0/1024.0)/1024. from [数据库名].dbo.sysfiles
-- 查询当前数据库的磁盘使用情况:
Exec sp_spaceused
-- 查看所有数据库文件大小:
SELECT DB_NAME(database_id) AS [Database Name],[Name] AS [Logical Name],[Physical_Name] AS [Physical Name],
((size * 8) / 1024) AS [Size(MB)],[differential_base_time] AS [Differential Base Time]
FROM sys.master_files
-- 统计信息创建:
CREATE STATISTICS Customer_LastName
ON AdventureWorksPDW2012.dbo.DimCustomer (LastName);
GO
DBCC SHOW_STATISTICS ("dbo.DimCustomer",Customer_LastName) WITH HISTOGRAM;
-- 自动统计信息收集显示
EXEC sp_autostats 'Production.Product';
-- 开启
EXEC sp_autostats 'Production.Product','ON';
-- 关闭
EXEC sp_autostats 'Production.Product', 'OFF', AK_Product_Name;
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', REG_SZ, N'E:\YourData'
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'E:\YourLogs'
GO
-- 查询用户库Data文件默认路径:
DECLARE @DefaultData VARCHAR(100)
EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='Software\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer',
@value_name='DefaultData',
@DefaultData=@DefaultData OUTPUT
SELECT @DefaultData
-- 查询用户库Log文件默认路径:
DECLARE @DefaultLog VARCHAR(100)
EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='Software\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer',
@value_name='DefaultLog',
@DefaultLog=@DefaultLog OUTPUT
SELECT @DefaultLog
-- 查询用户库备份文件默认路径:
DECLARE @BackupDirectory VARCHAR(100)
EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='Software\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer',
@value_name='BackupDirectory',
@BackupDirectory=@BackupDirectory OUTPUT
SELECT @BackupDirectory
DECLARE @BackupDirectory VARCHAR(100)
EXEC xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', @BackupDirectory output
select @BackupDirectory
-- 修改用户库备份文件默认路径:
EXEC master..xp_regwrite
@rootkey='HKEY_LOCAL_MACHINE',
@key='Software\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer',
@value_name='BackupDirectory',
@type='REG_SZ',
@value='D:\SQL2005\DBBak'
-- 更改数据文件存放目录
EXEC xp_instance_regwrite
@rootkey='HKEY_LOCAL_MACHINE',
@key='Software\Microsoft\MSSQLServer\MSSQLServer',
@value_name='DefaultData',
@type=REG_SZ,
@value='E:\Data'
GO
-- 更改日志文件存放目录
EXEC master..xp_instance_regwrite
@rootkey='HKEY_LOCAL_MACHINE',
@key='Software\Microsoft\MSSQLServer\MSSQLServer',
@value_name='DefaultLog',
@type=REG_SZ,
@value='E:\Data'
GO
-- 查看日志具体内容
SELECT * From ::fn_dblog(Default,Default)