我正在将一个宠物项目从 PostgreSQL (9.2.2) 迁移到 SQL Server (2012 Standard)。
在查询 unicode 单词时,我注意到一个有趣的现象。鉴于定义:
CREATE TABLE [word](
[id] [int] IDENTITY(0,1) NOT NULL,
[value] [nvarchar](255) NULL
);
Run Code Online (Sandbox Code Playgroud)
和数据:
insert into word (value) values (N'????');
insert into word (value) values (N'???');
insert into word (value) values (N'???');
insert into word (value) values (N'???');
insert into word (value) values (N'???');
insert into word (value) values (N'???');
insert into word (value) values (N'???');
insert into word (value) values (N'???');
insert into word (value) values (N'??????');
insert into …Run Code Online (Sandbox Code Playgroud) 我们有一个 SQL Server 2000,很快就会迁移到 SQL Server 2005。它创建了多年的 Windows 身份验证帐户,这些帐户不再存在于 Active Directory 中,这会阻止复制数据库向导在新服务器上创建这些帐户。
是否有脚本或某种自动方法可以删除我们的 Active Directory 中不再存在的帐户?
编辑:需要明确的是,需要删除的登录名是在 SQL Server 2000 上,它不支持该DROP LOGIN命令。
另外,手动删除 SQL Server 2000 中exec sp_droplogin 'loginname'的登录名将(我认为)完成,但在我的,无法找到登录名,无论我使用“域\登录名”还是“登录名”
只是为了增加混乱,exec sp_revokelogin 'domain\loginname'似乎确实有效。
编辑2:终于解决了这个问题。许多有问题的登录以编程方式添加到数据库中,虽然它们在用户可以连接的意义上工作,但当 SQL Server 期望没有域时,用户名与 NT 登录名的域前缀登录不匹配,反之亦然反之。
为了解决这个问题,我修改了 sp_droplogin 过程以删除其中一项出错的检查。
我接受我自己的答案,因为它适用于 SQL Server 2000。
将事务日志 ( *.ldf) 放在与数据库文件 ( *.mdf, *.ndf)不同的物理磁盘系统上是一种常见的做法。
在虚拟机云环境中,事务日志可以和其他数据文件放在同一个盘符上吗?这在当今流行的云虚拟机环境中通常是如何处理的。
注意:不使用 SQL Azure。使用具有完全访问权限的 Windows 虚拟机。
这篇文章的SQL Server的tempdb最佳实践提高性能建议我应该拆分tempdb成若干文件等于内核的数量。因此,对于 4 个内核,您将获得 4 个文件。
通过拥有更多数量的文件,您可以增加 SQL Server 可以随时推送到磁盘的物理 I/O 操作的数量。SQL Server 可以下推到磁盘级别的 I/O 越多,数据库运行的速度就越快。使用标准数据库,SQL Server 可以将其需要的大量数据缓存到内存中。由于 tempdb 的高写入特性,数据需要先写入磁盘,然后才能缓存到内存中。
虽然理论上听起来不错,但它真的像一般优化一样好吗?它是否可能仅适用于 IO 非常高的特定系统?
sql-server storage disk-structures sql-server-2008-r2 tempdb
我正在尝试获取当前活动的全局临时表的列表。它们相互碰撞(同名)似乎存在问题。作为“代理”dba,试图解决这里的混乱。
是的,这听起来像是一个非常普遍的问题,但我还没有能够缩小范围。
所以我在 sql 批处理文件中有一个 UPDATE 语句:
UPDATE A
SET A.X = B.X
FROM A JOIN B ON A.B_ID = B.ID
Run Code Online (Sandbox Code Playgroud)
B 有 40k 条记录,A 有 4M 条记录,它们通过 A.B_ID 一对一关联,尽管两者之间没有 FK。
所以基本上我正在为数据挖掘目的预先计算一个字段。这个题虽然改了表名,但是语句没改,真的就是这么简单。
这需要几个小时才能运行,所以我决定取消一切。数据库损坏了,所以我删除了它,恢复了我在运行该语句之前所做的备份,并决定使用游标更深入地了解细节:
DECLARE CursorB CURSOR FOR SELECT ID FROM B ORDER BY ID DESC -- Descending order
OPEN CursorB
DECLARE @Id INT
FETCH NEXT FROM CursorB INTO @Id
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @Msg VARCHAR(50) = 'Updating A for B_ID=' + CONVERT(VARCHAR(10), @Id)
RAISERROR(@Msg, 10, 1) WITH NOWAIT
UPDATE …Run Code Online (Sandbox Code Playgroud) 我想知道 SQL Server Management Studio Express(主要用于 Microsoft SQL Server)是否安装在独立机器上(没有任何 SQL 服务和东西)以连接到远程数据库?
我运行的是 SQL Server 2012;我的一位经理告诉我,他们希望我为指定用户创建一个 Web UI 来运行查询/更新数据库;这在我的 PHP 能力范围内;但我想为方便起见,我可以提议取消对 Web UI 的需求,因为这将花费我们的服务器管理员大量时间,但是在我们的网络机器上安装 SMSE 以连接/管理我们的数据库?
这可能吗?或者我是否必须经历创建一个显示模式、表格等的 WebUI 的痛苦任务。
我有一个大约 6Gb 的备份。它是原始文件的“轻量级”备份(清除了日志表),大约为 14Gb。
我尝试在我的 SQL Express 本地服务器上恢复备份。它失败并显示类似 : 的消息System.Data.SqlClient.Error: insufficient disk space。它要求 227,891,019,776 字节,这绝对是疯狂的,几乎和我的整个硬盘一样大。
正如在其他网站上发现的那样,我尝试了RESTORE FILELISTONLY FROM DISK = 'backupfile.bak'.
数据文件(列Size)的大小为 6,888,226,816,但日志文件的大小为 221,006,987,264。该列BackupSizeInBytes返回 6,259,736,576 和 0。
因此,如果我理解正确,则在继续之前,恢复检查我是否有足够的空间来恢复日志文件的“理论”大小,而忽略实际的日志文件大小?
我怎样才能绕过它?获得备份有点困难,所以如果我能在不返回生产服务器的情况下解决我的问题,那就太好了。
谢谢 !
哦顺便说一句,我在 SQL Server 2008 R2 Express 上。
在 SQL Server 中,你们使用扩展属性做什么?一些文章和博客建议将它们用于数据库及其对象的自我记录,但我看不到它被正确使用......大多数人都忽略了这一点吗?
我们有一个合并复制环境,它正在推送到 8 个订阅者。这工作正常。我们的分发数据库设置为简单恢复模式。我们有一个维护计划,将在每天 00:30 备份所有数据库。此过程完成后,分发日志文件会在接下来的 30 分钟内增长并吸收硬盘驱动器上的所有剩余空间(约 90GB)
然后发生的情况是分发数据库显示为“Recovery Pending”,在重新启动机器之前我们无法做任何事情。在此之后,我可以将日志文件缩小到 2MB。
我不知道为什么会这样。日志文件在白天以大约 10MB 的速度运行。数据库大小为 15GB。
sql-server ×10
backup ×2
ssms ×2
azure-vm ×1
cloud ×1
disk-space ×1
log ×1
logins ×1
postgresql ×1
restore ×1
security ×1
storage ×1
tempdb ×1