目录

2638264600 的个人博客

记录精彩的程序人生

sqlserver中的select死锁问题

更改库的锁级别:
if(charindex('Microsoft SQL Server 2017',@@version) > 0)
begin

declare @sql varchar(8000)
select @sql = '
ALTER DATABASE ' + DB_NAME() + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
ALTER DATABASE ' + DB_NAME() + ' SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE ' + DB_NAME() + ' SET MULTI_USER;'

Exec(@sql)
end

#查询是否设置成功
select is_read_committed_snapshot_on from sys.databases where name = DB_Name()
#查询看版本和当前库名
select @@version, DB_Name()
https://blog.csdn.net/hailang9027/article/details/51861065

备份和恢复数据库

Backup Database 数据库名 To disk='F:\Backup\h备份文件名.bak'
estore Database 数据库名 from disk='F:\Backup\h备份文件名'
执行下面的还原语句将覆盖当前数据库
restore Database 数据库名 from disk='F:\Backup\h备份文件名' WITH REPLACE
#备份日志
BACKUP LOG CityNorthPark_New TO DISK = 'D:\备份\数据库\XXX_LogBackup.trn';

SQL Server数据库备份还原后,在数据库名称后会出现“受限制访问”字样。

右键点击数据库->【属性】->【选项】->【状态】->【限制访问】->选择【Multiple】->【确定】
System.Data.SqlClient.SqlError:因为数据库正在使用,所以无法获得对数据库的独占访问权
解决办法:

方法一(最方便):右键点击数据库->【属性】->【选项】->【状态】->【限制访问】->选择【Single...】->【确定】。然后还原。(十有八九这个方法是行不通的,如有有很多人连接着,设置后就省下最后一个,那么可能那个人不是你,你还是无法还原)

方法二(最直接):断开数据库连接。

方法三(最暴力):注销/重启数据库服务器。(也可能行不通,如果重启后,你的操作不够快,最后还是给别人先连上了)

方法四(最麻烦):写代码修改数据库相关属性,虽然麻烦,有的时候还是要用到,那就用到的时候再研究。

select * from master..sysprocesses where dbid=db_id( '数据库名称')

exec('kill 64')

```declare @dbname varchar(50)
set @dbname='数据库名称'
declare @sql varchar(50)
declare cs_result cursor local for select 'kill '+cast(spid as varchar(50)) from sys.sysprocesses where db_name(dbid)=@dbname 
open cs_result
fetch next from cs_result into @sql
while @@fetch_status=0
begin
    execute(@sql)
    fetch next from cs_result into @sql
end
close cs_result
deallocate cs_result
alter database [数据库名称] 
set OFFLINE with rollback IMMEDIATE

注意:以上操作全部在master数据库上操作。


SQL Server报错:数据库"YourDatabaseName"的事务日志已满,原因为"LOG_BACKUP"

--设置简单模式
USE[master]
GO
ALTER DATABASE YourDatabaseName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE YourDatabaseName SET RECOVERY SIMPLE
GO
————————————————
-设置压缩后的日志大小为2M,可自定义
USE YourDatabaseName
GO
DBCC SHRINKFILE (N'YourDatabaseName_log' , 2, TRUNCATEONLY)
GO

--还原完全模式
USE[master]
GO
ALTER DATABASE YourDatabaseName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE YourDatabaseName SET RECOVERY FULL
GO
————————————————
可以配置为自动收缩

ALTER DATABASE [YourDatabaseName] SET AUTO_SHRINK ON
 
USE [YourDatabaseName];
GO
EXEC sp_configure 'autoshrink', 1;
RECONFIGURE;
GO
USE [YourDatabaseName];
GO
ALTER DATABASE [YourDatabaseName]
MODIFY FILE (
    NAME = N'YourDatabaseName_log',
    MAXSIZE = 20480 MB
);
GO

原文链接:https://blog.csdn.net/nullcodeworld/article/details/139349044


标题:sqlserver中的select死锁问题
作者:2638264600
地址:http://bk.isseeker.com/articles/2025/01/14/1736844553108.html