我在 Ubuntu 上安装了 SQL Server 2016 Developer Edition,可免费用于开发目的:
SQL Server 2016 SP1 Developer 是一个功能齐全的免费版本,许可在非生产环境中用作开发和测试数据库。
我也想在 Ubuntu 上安装 SQL Server 2017。对于 Windows,在 SQL Server 下载页面上,有三个选项 - 试用评估、SQL Express(免费但有限)和 SQL Developer(对于非生产环境免费)。
但是,对于 Linux,只有在 Red Hat、Ubuntu 或 SUSE 上安装的链接。
在 Ubuntu 上安装时,SQL Server 2017 (v.Next) 说:
Enter the SQL Server system administrator password:
Confirm the SQL Server system administrator password:
Configuring SQL Server...
This is an evaluation version. There are [174] days left in the evaluation period.
Run Code Online (Sandbox Code Playgroud)
是否有适用于 Linux 的 SQL Server 2017 …
我有一个带有 SSMS 17 的 Windows 10 盒子。我安装了 SSMS 2016,但现在已卸载。当我去安装 SqlServer 模块时,我收到此警告:
C:\WINDOWS\system32> install-module sqlserver -Scope AllUsers
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy
value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): y
PackageManagement\Install-Package : The following commands are already available …Run Code Online (Sandbox Code Playgroud) 阅读 IBM 网站HERE上发布的 CouchDB 的旧概述,我惊讶地发现以下内容:
大多数现代数据库已经开始从锁定机制转向 MVCC,包括 Oracle(自 V7 起)、MySQL(与 InnoDB 一起使用时)和 Microsoft® SQL Server 2005 及更高版本。
我目前使用 SQL Server 相当多(V2012)并且从未考虑过可能存在任何形式的 MVCC。我之前也在with (tablock, holdlock)存储过程中使用过。
SQL Server 是否真的在任何地方实现了 MVCC,它如何与是否实现的想法相协调with (tablock, holdlock)?
有这个很好的 SQL Server 函数SUSER_SNAME可以将server_user_sid转换为用户名。这对于将众所周知的 Windows SID 转换为(可能已本地化的)用户名非常有用。
例子:
SELECT SUSER_SNAME(0x01020000000000052000000021020000)
-- yields 'BUILTIN\USERS' (or, on a German system, 'VORDEFINIERT\Benutzer')
Run Code Online (Sandbox Code Playgroud)
通过一些谷歌搜索和反复试验(=手动创建用户并sys.server_principals随后检查),我确定了以下等效项:
Built-in User/Group Windows SID SQL Server server_user_sid
BUILTIN\USERS S-1-5-32-545 0x01020000000000052000000021020000
NT AUTHORITY\SYSTEM S-1-5-18 0x010100000000000512000000
Run Code Online (Sandbox Code Playgroud)
将 Windows SID 转换为 SQL Server server_user_sids 的算法是什么?
或者,微软是如何让时间旅行成为可能的?
考虑这个代码:
DECLARE @Offset datetimeoffset = sysdatetimeoffset();
DECLARE @UTC datetime = getUTCdate();
DECLARE @UTCFromOffset datetime = CONVERT(datetime,SWITCHOFFSET(@Offset,0));
SELECT
Offset = @Offset,
UTC = @UTC,
UTCFromOffset = @UTCFromOffset,
TimeTravelPossible = CASE WHEN @UTC < @UTCFromOffset THEN 1 ELSE 0 END;
Run Code Online (Sandbox Code Playgroud)
@Offset设置在 之前 @UTC,但它有时具有较晚的值。(我已经在 SQL Server 2008 R2 和 SQL Server 2016 上尝试过这个。你必须运行几次才能捕捉到可疑的事件。)
这似乎不仅仅是四舍五入或缺乏精度的问题。(事实上,我认为舍入是偶尔“修复”问题的原因。)示例运行的值如下:
因此日期时间精度允许 .880 作为有效值。
甚至Microsoft 的 GETUTCDATE 示例也显示 SYS* 值 …
在准备迁移项目时,我们正在尝试识别任何跨数据库选择数据的查询。
这可以是以下形式:
SELECT fieldA, fieldB
FROM dbo.TableA a
JOIN DatabaseB.dbo.TableB b ON b.ID = a.ID
Run Code Online (Sandbox Code Playgroud)
或者
DECLARE @resultFromDatabaseB VARCHAR(50)
SELECT @resultFromDatabaseB = b.ID
FROM DatabaseB.dbo.TableB
SELECT fieldA, fieldB
FROM dbo.TableA a
WHERE a.ID = @resultFromDatabaseB
Run Code Online (Sandbox Code Playgroud)
或任何其他变体(包括插入/更新/等...)
不幸的是,大多数查询不是存储过程,因此我无法对 SQL 文本进行静态分析,我当前的计划要求记录缓存的查询文本并对它们进行静态分析。
这种方法有什么替代方法吗?即:使用扩展事件/跟踪/审计?
是否有查询来检查在给定时间之间运行的作业。我可以检查两次之间安排的作业,但我不想要那样。
示例 我想知道在16:00:00和之间运行的作业是什么17:00:00
在某些情况下,安排在的作业15:00:00可能会运行超过 1 小时,我也想要这些。我在谷歌搜索过,我得到的只是安排在两次之间的工作
我需要创建包含大量小数 (26,8) 列的宽非规范化表(少于 1024 列限制,大多数列将为空或零)。我知道每行限制为 8060 字节,因此我尝试使用页面压缩创建表。下面的代码创建表,插入一行并查询行大小。行大小远低于限制,但如果我尝试向表中再添加一个小数 (26,8) 列,操作将失败并显示错误“创建或更改表 't1' 失败,因为最小行大小为 8074,包括 1256字节的内部开销。”。有没有办法创建具有这么多列的单个表?
drop table t1
GO
create table t1(c1 decimal(26, 8) null)
with (data_compression = page)
GO
declare @i int = 2;
declare @sql varchar(100);
while @i <= 486
begin
set @sql = 'alter table t1 add c' + convert(varchar, @i) + ' decimal(26, 8) null';
execute (@sql);
set @i += 1;
end;
GO
insert into t1(c1) select 0
GO
declare @i int = 2;
declare @sql varchar(100);
while …Run Code Online (Sandbox Code Playgroud) 我们的管理员使用 Visual Studio 2015 设置了一个全新的 Windows 2012 R2 服务器。当我尝试从 Visual Studio 连接到现有的 sql server 2008 数据库(在 Windows 2008 r2 服务器上运行)时,使用Tools-> Connect to database...,我可以输入所有信息,对话框检索数据库列表,Test Connection工作,但当我点击ok我得到:
必须信任计算机进行委派,并且必须将当前用户帐户配置为允许委派
两台服务器都在同一个域(开发)下,我是它们的本地管理员。我的帐户虽然位于可以访问开发域的不同域上。
有想法该怎么解决这个吗?他们是指消息中的 windows 2012 服务器还是数据库服务器?
顺便提一下,我可以使用相同的 Windows 帐户从另一个 Windows 2008 r2 服务器成功连接。
更新:失败的连接使用 Windows 身份验证。
在清理阶段,我们的 10000 个集成测试中的每一个都需要在每个集成测试完成之前将数据库恢复到其原始的“干净”状态。运行所有测试需要时间,80% 的时间花在数据库还原操作期间。
恢复操作只是从光盘中获取备份并恢复它。我现在想知道是否有办法优化这一点。我正在考虑的一种选择是将备份文件的位置从磁盘更改为内存。那可能吗?
另一种选择是仅拍摄表数据的快照,并仅将其保存为备份数据。我假设备份文件变得更小,因此恢复速度更快。那可能吗?
理想情况下,我希望避免恢复,而只是重置受影响的数据(每个测试产生的数据)。类似于:“恢复自测试开始以来修改过的任何表行”
我有哪些选择?我不是这方面的专家,但感觉我的问题应该有一个简单的解决方案。
sql-server ×10
backup ×1
compression ×1
datetime ×1
jobs ×1
license ×1
mvcc ×1
powershell ×1
restore ×1
ubuntu ×1
users ×1
windows ×1