数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

2
SQL Server 2014压缩和最大行大小
我需要创建一个包含许多十进制(26,8)列的宽非规范化表(少于1024列限制,大多数列将为null或零)。我知道每行限制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
如何在Postgres中的CASE表达式上创建索引
我正在尝试在CASE表达式上创建索引,如下所示 CREATE TABLE test(i INT, j INT); CREATE UNIQUE INDEX test_index ON test(CASE WHEN i=1 THEN j END); 收到此错误: ERROR: syntax error at or near "CASE" LINE 1: CREATE UNIQUE INDEX test_index ON test(CASE WHEN i=1 THEN j ... ^ ********** Error ********** ERROR: syntax error at or near "CASE" …

2
每个SQL实例的SPN条目应该是什么样的?
我在寻找相互矛盾的信息,以了解如何精确格式化SPN(服务主体名称)以获取正确的Kerberos连接,以及每个SQL实例需要多少连接。 该2017 MS文档包含以下内容: 从SQL Server 2008开始,为了支持TCP / IP,命名管道和共享内存上的Kerberos身份验证,更改了SPN格式。命名实例和默认实例支持的SPN格式如下。 命名实例: MSSQLSvc/FQDN:[port|instancename] 默认实例: MSSQLSvc/FQDN:port|MSSQLSvc/FQDN 新的SPN格式不需要端口号。这意味着不使用端口号的多端口服务器或协议可以使用Kerberos身份验证。 我以最后一段表示我只需要一个条目,即以下一项: 命名实例: MSSQLSvc/sqlbox1.mydomain.org/instance2 默认实例: MSSQLSvc/sqlbox1.mydomain.org 这似乎与该较旧的(2011)MS文档矛盾,不仅与端口号有关,而且与使用的名称有关: 若要创建SPN,可以使用SQL Server的Ne​​tBIOS名称或完全限定域名(FQDN)。但是,您必须为NetBIOS名称和FQDN创建一个SPN。 当我查看环境中已经存在的SPN时,会看到各种各样的组合,某些服务器最多包含4个条目: MSSQLSvc/sqlbox1 MSSQLSvc/sqlbox1:1433 MSSQLSvc/sqlbox1.mydomain.org MSSQLSvc/sqlbox1.mydomain.org:1433 甚至MS自己的Kerberos配置管理器似乎都希望生成最后两个版本(具有适当的混淆): 同样,对于现有的命名实例,我看到了一个奇怪的组合,其中一些几乎肯定是无效的: MSSQLSvc/sqlbox1:1522 MSSQLSvc/sqlbox1:instance2 MSSQLSvc/sqlbox1.mydomain.org:1522 MSSQLSvc/sqlbox1.mydomain.org:instance2 MSSQLSvc/sqlbox1.mydomain.org/instance2 MSSQLSvc/sqlbox1.mydomain.org:1522:instance2 因此,如果我仅在环境中使用TCP,那么对于默认实例和命名实例,DSN的实际外观如何? 我应该包括端口吗?还是在端口中包含一个,在端口中包含一个? 仅使用FQDN,还是仅需要Netbios名称的条目?还是仅当我们使用命名管道(不是)时? (对于上下文,我们运行SQL 2005到2014,其中一些是群集的,其他是独立的。连接仅通过TCP,在配置管理器中禁用了命名管道。我们将手动修复/创建这些管道,而不是允许SQL服务帐户在创建时服务器启动。)

2
如何找到两次之间的工作
是否有查询以检查在给定时间之间运行的作业。我可以检查两次之间安排的作业,但我不希望这样。 示例我想知道介于16:00:00和之间的作业17:00:00 在某些情况下,计划在的工作15:00:00可能会运行超过1个小时,我也希望这样做。我确实在google中搜索过,但所得到的只是两次安排的工作

2
SSMS和注册服务器结果
背景: 我们正在尝试为我们的一个支持团队创建AG“主要”测试工具。不知道在任何给定时间哪些服务器将是指示它们针对已注册服务器组执行TSQL的主要服务器。注册的服务器组由AG中的所有服务器组成。目标是仅在当前主服务器上执行TSQL: 当前测试线束: IF EXISTS (SELECT * FROM sys.dm_hadr_availability_replica_states AS HARS INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS HACS ON HACS.replica_id = HARS.replica_id WHERE (HARS.role_desc = 'PRIMARY') AND (HACS.replica_server_name LIKE @@SERVERNAME)) BEGIN <<SOME CODE TO EXECUTE>> END 问题: 如果第一台响应多服务器查询的服务器未返回任何结果,则SSMS将假定正确的结果集为没有结果集,即使其他服务器随后返回了结果集也是如此。因此,在这种情况下,不会返回任何结果……这是不正确的,也不是预期的功能。 谁能想到使用SSMS(这是CS团队最熟悉的工具)强制在当前主服务器上执行的方法吗?

1
重新设计大量传感器数据的存储
我受命实施/重新设计一个解决方案,该解决方案将存储来自传感器阵列的天气数据。该阵列将由约40个塔组成,每个塔均带有约10个传感器,每个传感器将以10秒的间隔对大气状况进行采样,时间不确定(年)。此任务的一些应用程序和要求如下: 管理和检索塔/传感器配置,以进行数据分析。 通过传感器或时间间隔进行数据可视化以进行气象观测。 为客户提供可靠和持久的数据资源/数据集,以比较模型和传感器的性能(可能需要进行一些后处理才能以所需的格式交付?)。 注意:当前的解决方案(实现为概念证明,有5个塔)将数据存储为平面文件(每小时一个文件)。 我最初不确定将来是否会构成大数据问题,所以我研究了关系数据库和NoSQL数据库的两种解决方案,但是我觉得我需要更多指导,因为我不是数据管理专家。 我认为解决方案之一是将数据存储在按塔,传感器和时间戳编制索引的关系数据库中,并按日期对表进行分区。 另一个基于将来的扩展,是将其存储在文档类型的NoSQL数据库(如MongoDB)中,并模拟当前解决方案的结构。 这些好方法中有什么?如果没有,什么是更好/推荐的解决方案?另外,是否有必要重新设计当前解决方案?有人告诉我,使用平面文件的理由是,他们认为关系数据库会占用过多的开销。如果是这样,是否有办法避免这种情况?

2
如何将Windows SID转换为SQL Server server_user_sid?
有一个不错的SQL Server函数SUSER_SNAME,可将server_user_sid转换为用户名。这对于将众所周知的Windows SID转换为(可能本地化的)用户名很有用。 例: SELECT SUSER_SNAME(0x01020000000000052000000021020000) -- yields 'BUILTIN\USERS' (or, on a German system, 'VORDEFINIERT\Benutzer') 通过一些Google搜索和反复试验(=手动创建用户,然后进行检查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 将Windows SID转换为SQL Server server_user_sids的算法是什么?


2
为什么Oracle为补充unicode字符Chipmunk使用与Java不同的字节长度?
我有Java代码将UTF-8字符串修整为我的Oracle(11.2.0.4.0)列的大小,由于Java和Oracle将字符串视为不同的字节长度,最终引发了错误。我已经验证我NLS_CHARACTERSET在Oracle中的参数是“ UTF8”。 我编写了一个使用Unicode花栗鼠表情符号(🐿️)在下面说明我的问题的测试 public void test() throws UnsupportedEncodingException, SQLException { String squirrel = "\uD83D\uDC3F\uFE0F"; int squirrelByteLength = squirrel.getBytes("UTF-8").length; //this is 7 Connection connection = dataSource.getConnection(); connection.prepareStatement("drop table temp").execute(); connection.prepareStatement("create table temp (foo varchar2(" + String.valueOf(squirrelByteLength) + "))").execute(); PreparedStatement statement = connection.prepareStatement("insert into temp (foo) values (?)"); statement.setString(1, squirrel); statement.executeUpdate(); } …
8 oracle  java  utf-8  unicode 

1
为什么GETUTCDATE早于SYSDATETIMEOFFSET?
另外,Microsoft如何使时间旅行成为可能? 考虑以下代码: 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; @Offset设置在之前 @UTC,但有时值更高。(我已在SQL Server 2008 R2和SQL Server 2016上尝试过此操作。您必须运行几次以捕获可疑事件。) 这似乎不只是舍入或缺乏精度的问题。(实际上,我认为四舍五入是偶尔“解决”该问题的原因。)样本运行的值如下: 偏移量 2017-06-07 12:01:58.8801139 …

4
SSRS和托管服务帐户-无法配置?
我们正在尝试将Reporting Services配置为使用托管服务帐户。环境是: 服务器:Windows 2008 R2 SP1报告服务:SQL Server 2012(版本11.0.6567.0) 当前,SSRS作为域服务帐户运行,但是我们希望更改为作为MSA运行。SQL Server实例和代理都已成功更改为使用MSA。 当我尝试通过Reporting Services配置管理器将服务帐户更改为MSA时,收到错误消息: Microsoft.ReportingServices.WmiProvider.WMIProviderException:帐户名无效。以domain \ alias形式指定一个帐户。 ---> System.Runtime.InteropServices.COMException(0x8004021D):来自HRESULT的异常:0x8004021D-内部异常堆栈跟踪的结尾--- Microsoft.ReportingServices.WmiProvider.RSWmiAdmin.ThrowOnError(ManagementBaseObject mo)在Microsoft.ReportingServices .WmiProvider.RSWmiAdmin.SetWindowsServiceIdentity(String accountName,SecureString password,Boolean useBuiltinAccount)at ReportServicesConfigUI.WMIProvider.RSReportServerAdmin.SetWindowsServiceIdentity(String accountName,SecureString password,Boolean useBuiltinAccount) 我的问题很简单: 是否有人成功将SSRS服务帐户更改为使用托管服务帐户?如果是这样,怎么办?

1
SQLite3不使用带有json_extract表达式的覆盖索引
我正在尝试SQLite3使用json_extract表达式在(3.18)中创建索引。我的目标是执行只需要索引即可产生结果的查询。这样做的原因是json_extract操作昂贵,在较大的数据集和/或值上进行操作时会降低性能。我得出结论,我需要一个覆盖指数来满足我的需求。 步骤1-使用标准表结构测试理论 CREATE TABLE Player ( Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, FirstName TEXT NOT NULL, MiddleName TEXT, LastName TEXT NOT NULL ); CREATE INDEX Player_FirstName ON Player ( FirstName ASC, LastName ASC ); EXPLAIN QUERY PLAN SELECT FirstName, LastName FROM Player WHERE LENGTH(LastName) > 10 ORDER BY FirstName …

1
了解SELECT列表中的集返回函数(SRF)
为什么在SELECT列表中使用Set Returning Function(SRF)与在FROM子句中使用SRF之间在行为上有区别? 例如,对于一个简单的SRF返回2行: CREATE OR REPLACE FUNCTION gen_series(out integer, out int) RETURNS SETOF record AS $$ SELECT 1,1 UNION SELECT 2,2; $$ LANGUAGE SQL; SELECT gen_series(); 返回两个单列行,每个行包含一条记录: => gen_series ------------ (1,1) (2,2) (2 rows) 而SELECT * FROM gen_series();返回记录扩展的两行: => column1 | column2 ---------+--------- 1 | 1 2 | 2 …

1
执行计划显示缺少索引但查询很快
在查看实际的执行计划时,即使查询所用的时间少于1秒,它也会显示缺少的索引。 SELECT Account.AccountID, Account.Name FROM account LEFT OUTER JOIN accountfeaturesetting afs ON afs.accountid = account.accountid and afs.featureid = 'Schedules' and afs.settingid = 'EditReasons' WHERE ISNULL(afs.Value, '0') = '0' AND EXISTS (SELECT 1 FROM program WHERE program.AccountID = account.AccountID AND program.Active = 1 AND (program.ScheduleEditReasonFlags <> 0 OR program.ScheduleEditReasonFields <> 0)) …

3
如何在保留FK关系的同时将迁移数据复制到带有Identity列的新表中?
我想将数据从一个数据库迁移到另一个数据库。表模式完全相同: CREATE TABLE Customers( [Id] INT NOT NULL PRIMARY KEY IDENTITY, (some other columns ......) ); CREATE TABLE Orders( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [CustomerId] INT NOT NULL, (some other columns ......), CONSTRAINT [FK_Customers_Orders] FOREIGN KEY ([CustomerId]) REFERENCES [Customers]([Id]) ) 这两个数据库具有不同的数据,因此在两个数据库中,同一表的新标识密钥将有所不同。那不是问题;我的目标是将新数据添加到现有数据中,而不是完全替换整个表中的所有数据。但是,我想保留插入数据的所有父子关系。 如果我使用SSMS的“生成脚本”功能,则脚本将尝试使用相同的ID进行插入,这将与目标数据库中的现有数据发生冲突。如何仅使用数据库脚本复制数据? 我希望目标处的身份列从其上一个值正常继续。 Customers没有任何其他UNIQUE NOT NULL约束。它是确定在其他列重复数据(我使用的是Customers与Orders只是作为一个例子在这里,所以我没有解释整个故事)。问题是关于任何一对N关系。

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.