我有一个数据库已经在恢复模式下停留了几天。关于这个有多个线程,但那里的解决方案对我不起作用。
这是我已经尝试过的:
RESTORE DATABASE [DBNAME] WITH RECOVERY
Error: Exclusive access could not be obtained because the database is in use.
ALTER DATABASE [DBNAME] SET OFFLINE WITH ROLLBACK IMMEDIATE
Error: ALTER DATABASE failed because a lock could not be placed on database 'DBNAME'
I get the same error when trying to set the db to SINGLE_USER
exec sp_who2 --> nothing that contains my database, so nothing that I can kill
(Or I need to look for something else ??)
Run Code Online (Sandbox Code Playgroud)
我不能只是停止 SQL …
我们的生产服务器正在运行 SQL Server 2008(非 r2)。
我正在调查似乎与网络或连接相关的问题,即我们的 Web 服务器丢失或断开与数据库服务器的连接。
如果有一种方法或计数器可以用来跟踪与 SQL Server 的DROPPED连接,这将对我有很大帮助。具体来说,我们想知道 ODBC/ADO 连接是否被 CLIENT 强行关闭。
可以想象,我们还可以跟踪客户端取消查询的时间,这可能会为我们提供相同的信息。
从我自己的研究来看,我没有看到用 perfmon 计数器跟踪这个的方法,但我对它们不太熟悉。
2013 年 12 月,一个名为 user1 的用户在 SQL 2008 上创建了一个数据库。今天,我们将从服务器中删除该用户(/所有者)。那么数据库的所有者属性将显示什么?
sql-server-2005 sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012
尝试向附加到经常使用的表的触发器添加一行
ALTER TRIGGER [dbo].[name_of_trigger] ON [dbo].[name_of_table] AFTER UPDATE
BEGIN
IF ORIGINAL_LOGIN() in ('username') RETURN
....somecode
END
Run Code Online (Sandbox Code Playgroud)
陷入僵局,唯一的解决方案似乎是每隔几秒钟重试一次,到目前为止还没有奏效。除了按 F5 并希望它有效之外,还有其他方法可以让我的 if 条件处于何种状态吗?
谢谢,
克雷格
我有一个 SQL Server 2008 实例,我想用它从 Oracle 服务器导入数据。
我已经设置了一个链接服务器,它在运行像SELECT * FROM table. 但是,如果我声明一个变量或循环遍历表中的行或OPENQUERY.
是否可以使用OPENQUERY? 我需要额外的权限吗?
我有一个美元金额值,由于历史原因,它总是存储在 nvarchar 字段中。现在我们存储的行比过去多得多,并且正在使用这个字段来汇总使用一个会经常自动刷新的应用程序的数量,我担心性能。
但我也担心在开发周期的后期做出这样的改变的成本。
很快,这个数据库将被客户使用,生成数百万行。所有这些行都不会参与此计算。这些行被分成大约 10,000 行的组,组的每个父级将每 10 分钟左右处理一次,这是计算这些总数的时间。
现在将列类型更改为货币是否值得,包括存储过程、UDT、数据层等?
看起来它可能会对性能产生影响,但不幸的是,我无法用我必须进行性能测试的资源生成足够的数量,这将是现实的。所以我希望有人有字符串到数字转换的经验,并且可以让我知道一次对 10,000 行进行这种转换是否会出现问题。
我试图找到答案并遇到了这些 MSDN 页面,但它们实际上并没有解释真正发生的事情:
http://msdn.microsoft.com/en-us/library/ms152771.aspx http://msdn.microsoft.com/en-us/library/ms189701.aspx
逐步重新初始化所有订阅选项实际上对 SQL Server Management Studio 2008 中的数据库做了什么?

我有一个旧数据库 - 几年前由 ASP.Net 2 应用程序自动设置的用户成员资格/角色:

当前运行的Sql Server版本为:Sql Server 10.5.1617
用户数据库日志文件很大(ldf 文件大约是 mdf 文件大小的 400 倍)。
恢复模式当前设置为“完整”。我明白那是什么 - 我不需要时间点恢复。
如果我只是从 Sql Server Management Studio 中将恢复模型更改为“简单”:

...并单击确定以保存更改 - 我是否会以任何方式冒险使用我当前的数据库?或者 Sql Server 可以对实时数据库进行这样的更改吗?日志文件会自动缩小吗?
谢谢你的建议,
标记
在我公司,我们使用 SQL Express 2008 R2,它支持高达 10GB 的数据库。
我们有 2 个数据库,所有表中的行数几乎相同。但是,其中一个大小为 4.5 GB(在开发部门),另一个(生产中的)大小为 9.87GB。
正在开发的数据库是通过批量插入行以进行测试自动生成的。而在生产中的数据库,慢了将近 1 年才能生成如此大量的数据。
特别是一张表,有 4,700,000 行,并进行以下查询:
SELECT colum1,column2 FROM table WHERE column1 = 2
Run Code Online (Sandbox Code Playgroud)
在生产数据库上响应大约需要 2 分钟,在开发数据库中大约需要 20 秒。
我在生产数据库中做了一个收缩,大约需要 20 分钟才能完成,但之后,数据库的大小减少到 7 GB。我尝试通过右键单击重建索引,但它超时并且无法完成重建。
我的问题是:为什么具有相同记录数量的 2 个数据库的大小如此不同,我可以做些什么来提高生产数据库的性能?
谢谢。-
我的理解是在线索引在开始(准备)和结束(最终)阶段获取锁。但是,我们看到很多 DML 查询在构建阶段被阻塞。
被阻止的查询的样本显示它们有一些共同点 - 等待类型是 PAGELATCH_UP,等待资源引用 PFS 页面,并且查询使用锁定提示(NOLOCK、ROWLOCK 等)。锁定提示会干扰吗?
任何人都可以在这里阐明或指出我正确的方向吗?
让我补充一下,实际命令是:
ALTER TABLE dbo.Whatever DROP CONSTRAINT [PK_Whatever] WITH (ONLINE=ON);
Run Code Online (Sandbox Code Playgroud)
这是聚集索引,没有非聚集索引。
sql-server-2008 ×10
sql-server ×8
blocking ×1
concurrency ×1
import ×1
monitoring ×1
oracle ×1
recovery ×1
restore ×1
ssms ×1
trigger ×1