Questions tagged «sql-server-2008»

SQL Server 2008(主要版本10.00.xxxx)。请同时用sql-server标记。

1
破坏和还原镜子
我必须在镜像的辅助节点上进行一些维护。由于这是站点变慢的结果,而在短暂的网络中断后重新建立镜像时,我想确保安全并禁用该镜像,然后在完成对有问题的服务器的拨入操作后重新启用它。 我目前的计划是: 禁用镜子 进行潜在的危险故障排除 恢复所有丢失的事务日志 重新建立镜子 这是断开/重新建立镜像的最安全方法吗?有什么我应该注意的陷阱吗?

3
在Management Studio T-SQL查询中指定连接
当将用户添加为数据库服务器的角色时,我经常使用GUI中的“为此操作编写脚本”功能。然后,我只需转到“连接::更改连接”即可在其他服务器上执行相同的操作。 有没有一种方法可以在脚本操作中指定连接,因此不必执行第二个“更改连接”步骤?

1
如何为SQL Server重写为Oracle编写的触发器?
如何为SQL Server重写最初为Oracle编写的触发器? 这是我的Oracle触发代码: CREATE OR REPLACE TRIGGER P000KUL_TEST BEFORE INSERT ON P000KUL REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN SELECT TO_CHAR(SYSDATE, 'dd/mm/RRRR') INTO :NEW.SYSTEM_DATE FROM DUAL; SELECT TO_CHAR(SYSDATE, 'hh:mi') INTO :NEW.SYSTEM_TIME FROM DUAL; END;


2
数据库何时脱机
我试图找到一种方法来弄清何时将几个sql数据库脱机。 我检查了日志,但找不到任何此类信息,而且没有启用默认跟踪。 我刚刚得到的信息是,以前有一个DBA使该任务脱机,但是没有电子邮件或书面通讯。 我们可以找到有关此信息吗? 请提出建议,谢谢!

2
TempDB不会收缩。没有公开交易
我在SQL 2008上有一个TempDB,它已经变得很大(> 40gb),我想缩小它。我已经通过Management Studio使用了dbcc收缩数据库,dbcc收缩文件和收缩命令。 我收到以下错误: 页面1:4573184无法移动,因为它是工作表页面。 我已经能够通过运行DBCC FREEPROCCACHE并重新运行其中一个收缩例程来回收一些空间,使我摆脱危险,但是显然这不是理想的选择,可能只会给我带来一点时间。 我已经运行过DBCC OpenTran,那里没有东西挂。 我在Internet上阅读的所有内容都归结为回收SQL Server ...肯定有更好的方法...有人吗? 谢谢, 汤姆

3
锁使用的内存
我很好奇,数据库容量为128 GB的SQL 2012 Enterprise Edition的其中一个为370 GB,并且还在不断增长,锁(OBJECTSTORE_LOCK_Manager)内存管理员使用的内存量显示7466016 KB。我也可以通过查看性能计数器来确认select * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)' 但是,当我运行查询时 select count(*) from sys.dm_tran_locks 它仅显示16个锁。那么,什么使用了超过7 GB的锁。有没有办法找出来? 这是否意味着一旦分配了用于锁的内存,SQL尚未释放它?在过去的1小时内,我看不到锁数超过500,但是锁内存保持不变。 最大服务器内存为106 GB,我们没有在内存中使用锁定页面,并且在过去12小时内我没有看到任何内存压力或错误日志中的任何错误。可用兆字节计数器显示了超过15 GB的可用内存。 活动监视器始终显示0个等待任务,因此显然没有阻塞。 考虑到SQL Server锁占用约100个字节的内存,因此7 GB的内存很大,并试图找出谁在使用它。 我通过锁定计数运行服务器仪表板报告的最重要的事务,它说:“当前系统上没有正在运行的锁定事务。但是,锁定内存仍然如上所示。DB在夜间工作最忙。


2
如何检查空值或空表值参数?
我有一个存储过程(SS2k8),带有几个表值参数,有时会为null或为空。我看过这个StackOverflow帖子,其中指出应该从调用参数列表中省略空/空TVP。我的问题是我无法弄清楚如何在存储过程中检查空或空,因为“ IF(@tvp IS NULL)”在创建过程时失败,并显示消息“必须声明标量变量” @tvp”。我是否必须在TVP上执行SELECT COUNT(*)并检查零? 代码摘录: CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS IF (@tvp IS NOT NULL) -- doesn't work BEGIN -- lots of expensive processing END ELSE BEGIN -- a little bit of cheap processing END ...

1
联接的虚拟表中的NEWID()导致意外的交叉应用行为
我的实际工作查询是一个内部联接,但是这个带有交叉联接的简单示例似乎几乎总是重现了该问题。 SELECT * FROM ( SELECT 1 UNION ALL SELECT 2 ) AA ( A ) CROSS JOIN ( SELECT NEWID() TEST_ID ) BB ( B ) 对于我的内部联接,我有很多行,我使用NEWID()函数向每个行添加了一个GUID,对于10行中的大约9行,与2行虚拟表的乘法产生了预期的结果,只有2个副本相同的GUID,而十分之1会产生不同的结果。至少可以说这是出乎意料的,这让我很难在测试数据生成脚本中找到此错误。 如果使用非确定性getdate和sysdatetime函数查看以下查询,您将不会看到此信息,无论如何我都不会看到-我总是在两个最终结果行中看到相同的datetime值。 SELECT * FROM ( SELECT 1 UNION ALL SELECT 2 ) AA ( A ) CROSS JOIN ( SELECT GETDATE() TEST_ID …

3
什么会导致孤立的## MS_PolicyEventProcessingLogin ##?
今天早上,我注意到我的SQL日志中充满了以下消息: 在队列'msdb.dbo.syspolicy_event_queue'上运行的激活的过程'[dbo]。[sp_syspolicy_events_reader]'输出以下内容: '无法作为数据库主体执行,因为主体“ ## MS_PolicyEventProcessingLogin ##”不存在,这种类型的无法冒充校长,或者您没有权限。” 运行以下命令EXEC sp_change_users_login 'report'表明登录实际上是孤立的。 我能够按照此MSDN帖子中的建议运行以下命令来修复它。 EXEC sp_change_users_login 'Auto_Fix', '##MS_PolicyEventProcessingLogin##', NULL, 'fakepassword' 但是问题仍然存在:究竟是什么原因导致该校长最初成为孤儿?谷歌搜索和研究表明,其他人也有这个问题,但是我还没有找到原因的描述。错误开始出现的那一刻,我什么都没有注意到。 去年夏天,我们将整个服务器移至SAN存储模型,此举恢复了所有操作(包括msdb),但那是几个月前。只是最近才使该症状变得明显,因为它早在几周前才出现在日志中。

3
什么时候应该删除索引并重新创建?
我们正在构建一个最初将是1 TB的数据仓库,并且每月将增长20gig。 对于某些表,我们每天进行ETL流程,而另一些表则每周/每月进行。 当有数据导入到表中时,是否有必要删除并重新创建索引? 是否有必要删除和重新创建索引,或者它们会自动更新? 统计信息设置为自动更新。 非常感谢您的帮助和指导。 我得到了这个天才脚本: SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' + CASE WHEN ps.avg_fragmentation_in_percent > 40 THEN 'REBUILD' ELSE 'REORGANIZE' END + CASE WHEN pc.partition_count > 1 THEN ' PARTITION = ' + …


2
在备份大型SQL Server数据库的同时执行数据更新操作
我有一个大型数据库(有上千万条记录),我将在该数据库上执行完整的数据库备份。 但是,数据库足够大,可以在备份之前和期间以及在备份发生期间和之后启动事务。 例如: T0 = Transaction A start T1 = Full database backup start T2 = Transaction B start (will not deadlock with A) T3 = Transaction A commit/rollback (does not matter, does it?) T4 = Full database backup end T5 = Transaction B commit/rollback (again, does not matter, does …

1
在视图中创建一个新列并为其分配数据类型
这是我的查询: CREATE VIEW VIEW2 AS SELECT [Column1], (NULL) AS column2 VARCHAR(10) FROM VIEW1; 第三行出现错误。 如果我这样离开查询,但未指定Column2的数据类型,则该查询有效,但是默认数据类型为int,而我想使用VARCHAR。 CREATE VIEW VIEW2 AS SELECT [Column1], (NULL) AS column2 FROM VIEW1; 你能帮忙吗?谢谢! 注意:VIEW1中只有Column1。Column2不在VIEW1中,它是具有NULL值的生成的列。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.