数据库管理员

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


2
要分区还是不分区?
已经阅读了关于SO,外部博客文章和手册的几个问题 SO:Pg中分区表的外键约束 dba.SE:在Pg中处理FK到分区表的不同方法 手册:继承 手册:分区 手册:约束触发器 博客:具有继承性的Postgres建模 我仍然发现自己想知道是否应该考虑我的情况进行分区。 案例-简化 存储客户数据。为了清楚起见,下面提到的所有表名均已组成。 具有需要客户识别的非物理对象,以及需要将某些对象按需发送回客户或以其他方式进行处理的情况下,实际存储它们的物理对象。它们以多对多关系映射。objects_nonphysical,objects_physical,objects_mapping_table。 第二个多对多关系是这些非物理对象与其度量之间的关系。有些对象与某些指标绑定。metrics,metrics_objects_nonphysical 非物理对象和物理对象都有其子级关系表。objects_nonphysical_hierarchy,objects_physical_hierarchy 根据每个客户的需求和要求,可以提供有关物理对象的数据,或者可能需要从头开始创建。基本上,我需要做的是: 保持内部系统的快速运行INSERT和SELECT声明,因为这是要进行映射的地方。 维护系统以供外部客户查看和操作其非物理对象 -快速检索数据。报表高效性的需求SELECT -许多客户可以随时使用此数据进行搜索。 我的考虑 可以有一个客户,他们可以访问数据,查看数据并对其进行操作,但是不必是我们从中获取数据/正在处理数据的承包商。 考虑到我总是知道应该将哪些分区数据归入(针对承包商的分区),然后考虑到需要为客户进行分区的外部客户的维护系统,这导致我将表分区引入到我的系统中(某些情况下可以做到这一点)延迟使用自动化工具和一组规则以客户的方式重写数据,因此对于每个客户,我们只为每个表扫描一个分区。 数据量 我的数据将不断增长,尤其是在导入新客户的对象和指标时。从长远来看,目前无法预测新数据进入系统的速度。确实,没有知道谁将成为下一个客户,就无法衡量它。眼下正好有2客户提供更多或更少的1M行对每个表的每个客户。但是将来我预计新客户也将有1000万行左右。 问题 这些问题都是相互关联的。 应该在这里真正考虑分区,还是过大?我认为它很有用,因为我始终只扫描一个分区。 如果要进行分区,那么如何FK考虑到我的需求最有效地实施约束?我应该选择constraint triggers还是将其保留在内部系统的应用程序层中,或者使用其他方法? 如果无法进行分区,那我应该深入研究什么呢? 如果没有足够的数据,请在下面的评论中让我知道。

1
日志传送SQL Server 2012
我是一家没有DBA的小商店的开发人员,并且我正在尝试使用sql server 2012进行日志传送。我正在尝试从事务系统到新的数据仓库的报告卸载,并将此数据库用作暂存区。 我运行了日志传送向导,并且每次都执行主备份和文件复制作业。辅助还原作业似乎随机失败。 主服务器只有一个事务日志作业。差异备份已禁用(不确定是否重要),但是具有完整备份。 辅助服务器是全新安装,没有维护计划,备份或活动用户。 有没有办法强制备份恢复同步,或者始终确保备份保持同步? 看起来太脆弱了。请指教。 以下是已编辑的日志: *Starting transaction log copy. Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7' Retrieving copy settings. Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7' Retrieved copy settings. Primary Server: '', Primary Database: 'db', Backup Source Directory: '\\server\folder', Backup Destination Directory: '\\server\folder', Last Copied File: '\\server\folder\db_20160105070002.trn' Starting transaction log restore. Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7' …

2
更新大小为5k的行时出现8k行溢出错误
我正在尝试将具有5k大小的一行的目标表也更新为5k的行。 由于是一行,因此很容易知道行的实际大小: select * from sys.dm_db_index_physical_stats(DB_ID('RODS_HSD_ES'), OBJECT_ID(N'TBL_BM_HSD_SUBJECT_AN_148_REPRO'), NULL, NULL, 'DETAILED') 复制 自创建以来,表未更改。没有看到任何原因导致它失败。有想法吗?

2
不是索引的列是否与索引一起在磁盘上排序?
在MySQL,MyISAM和InnoDB中,不是索引的列是否与索引一起在磁盘上排序? 我开始写一个错误的想法: 我认为可能不会,因为它们没有索引。如果将它们排序,则意味着它们是索引。 这是不正确的,因为每个索引列均按其自身内容的顺序排序,但是我要询问的是每一行(或仅某些列)及其相应索引的排序。 解释一下,我说:这对于使选择行的范围(按索引并排在一起)的速度更快很有用。例如,如果我想select * where id >1000 and id<2000(MySQL语法中可能有错误,我不太了解),那么可以快速从磁盘读取id列本身,因为它的1000到2000的单元可能一起位于物理磁盘上。但是可以将与id 1000到2000对应的其他列内容写入物理磁盘上的不同位置。如果还对它们进行了排序,则读取速度会更快。我认为,也许MySQL会自动对物理磁盘上的该列进行排序,以实现此类操作。 它们是否在其他类型的数据库(PostgreSQL等)中排序? 12月27日:从这两个答案中可以看到,在存在聚集索引/主键的情况下,简单行本身并未在物理磁盘上排序(正如我认为的那样/可能),甚至聚集索引也是没有排序,如果它是b树,我已经阅读了有关b树的信息,并且据我了解,它的节点停留在磁盘上的随机位置。

3
更新WHERE子句以检查值是否不在单独的表中
我有一个使用WHERE子句的查询,并且碰巧在此表的许多查询中使用了完全相同的WHERE子句(等)。 查询是: SELECT DATENAME(DW, [AtDateTime]) AS [Day of Week] ,COUNT(*) AS [Number of Searches] ,CAST(CAST(COUNT(*) AS DECIMAL(10, 2)) / COUNT(DISTINCT CONVERT(DATE, [AtDateTime])) AS DECIMAL(10, 2)) AS [Average Searches per Day] ,SUM(CASE WHEN [NumFound] = 0 THEN 1 ELSE 0 END) AS [Number of Searches with no Results] ,CAST(CAST(SUM(CASE WHEN [NumFound] …

2
使用ADODB.SQL Server 2014的经典ASP连接(不带TLS 1.0)
由于以PCI合规性名义禁用了TLS 1.0,因此我无法使32位Classic ASP应用程序正常工作。 根据MS / Stack Exchange的建议,我已经安装了: SQL Server 2014 SP1 CU1 .NET Framework 4.6 这使我们的ASP.NET应用程序/ SSMS运行。但是我们使用ADODB.Connection对象的经典ASP应用程序无法正常工作。 我尝试了使用的连接字符串Provider=SQLNCLI11;,但这似乎也无济于事。共享内存提供程序仍在抱怨管道的另一端没有任何内容。错误信息: Microsoft SQL Server本机客户端11.0错误'80004005' 共享内存提供程序:管道的另一端没有进程。 我还尝试将命名管道与连接字符串一起使用,Provider=SQLNCLI11;Server=np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query;Database=northwind;Trusted_Connection=Yes;并收到以下错误消息: Microsoft SQL Server本机客户端11.0错误'80004005' 命名管道提供者:管道的另一端没有进程。 我应该了解ADODB的补丁程序吗?我是否应该考虑以其他方式使用命名管道?(尽管对于TLS设置如何,为什么共享内存无法正常工作,我还是有些困惑) 评论更新: Web服务器和SQL Server在同一框中。 这是一个SQLExpress命名实例。启用TLS 1.0的连接字符串为: "Driver={SQL Server}; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes; Integrated_Security=True;" 我也尝试过: "Provider=SQLNCLI11; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes;" 禁用TLS 1.0后,两者均无效。我知道Trusted_Connection / Integrated_Security是多余的,但是弄乱这些似乎也无济于事。 我已切换了TCP和命名管道的启用,禁用和顺序。上面的连接字符串中使用的管道名称直接来自该实例的“服务器配置”。我还尝试禁用共享内存以确保命名管道正常运行。我还没有尝试过TCP(好像共享内存由于TLS而不能工作,为什么要使用TCP?)共享内存和命名管道都可以在启用TLS 1.0的情况下工作。一旦我翻转注册表项以禁用TLS …

1
带有条件的唯一标识符字段
我有一个不在生产中的数据库,所以主表是CustodyDetails,此表有一个ID int IDENTITY(1,1) PRIMARY KEY列,我正在寻找一种添加另一个在其他任何表中都未引用的唯一标识符的方法。帐户列的内容将不完全是一个身份密钥。 这个新的身份列中有一些具体细节,这就是我的问题所在。格式如下:XX/YY其中XX是一个自动递增的值,它将在每个新年度重置/重新启动,而YY是本年度的后两位SELECT RIGHT(YEAR(GETDATE()), 2)。 因此,例如,让我们假设从2015年12月28 日至03/01/2016结束的一天添加了一条记录,该列将如下所示: ID ID2 DATE_ADDED 1 1/15 2015-12-28 2 2/15 2015-12-29 3 3/15 2015-12-30 4 4/15 2015-12-31 5 1/16 2016-01-01 6 2/16 2016-01-02 7 3/16 2016-01-03 我想到了使用前端来解析组合ID(示例中为ID2)以获取最后2位数字并与当年的最后2位数字进行比较,然后决定是否启动新的相关项。当然,能够在数据库端完成所有操作将是宏伟的。 编辑1:顺便说一句,我也看到人们使用单独的表只是为了存储并行的身份密钥,所以一个表的身份密钥成为第二个表的辅助密钥,这听起来有点狡猾,但也许是这样的实现到位的情况? 编辑2:此额外的 ID是旧文档参考,标记每个文件/记录。我猜想它可能是主ID的特殊别名。 在过去的20年中,该数据库每年处理的记录数没有超过100,并且极有可能(确实非常高),当然,如果超过99,该字段将能够继续使用多余的数字,前端/过程将能够超过99,因此它不会改变它。 当然,我一开始没有提到这些细节,因为它们只会缩小解决方案的可能性,以满足我的特定需求,并试图将问题范围扩大。

2
透明数据加密
在SQL Server 2008中配置TDE时是否有最佳实践?在SQLMag上,文章“透明数据加密常见问题解答”说,CPU使用率可能增加了30%? 除了增加服务器功能之外,打开TDE时,DBA通常还会执行其他操作吗?

1
是否可以在没有备用文件的情况下从待机/只读状态恢复SQL数据库?
如果缺少“备用文件”,有什么方法可以从备用/只读模式恢复SQL数据库? (在日志传送方案中,我看到一些引用将其称为TUF文件,但就我而言,这只是手动还原,备用文件具有BAK扩展名。) 进行“ RESTORE DATABASE foo WITH RECOVERY”会导致致命错误: During startup of warm standby database 'foo', its standby file ('path\filename.bak') was inaccessible to the RESTORE statement. The operating system error was '5(Access is denied.)'. Diagnose the operating system error, correct the problem, and retry startup. 恢复是在前一段时间完成的,不幸的是,备用文件位于备份文件夹中,并被我们的文件夹清理例程删除。该文件的副本在任何其他媒体上均不存在。还原到这一点的原始备份也早已消失。 幸运的是,这对我们来说不是什么大问题(这是临时还原),但是除了“不删除该文件”之外,我找不到关于此问题的其他有用参考。 如果涉及到它,我想我可以编写整个数据库的脚本,或者使用SSIS将所有对象复制到一个新的数据库容器中,因为我前面有数据库的只读副本。 有什么办法解决这个问题?我当然不希望自己能够将其翻转回“还原”状态并继续执行后续的还原操作或其他任何操作,我只是想将其强制为当前状态的正常在线模式,这样我才能例如更改权限,更改恢复模式或进行新的完整备份等。


2
SQL Server见证的版本重要吗?
可以在镜像安装程序中使用比镜像更高的SQL Server版本的SQL Server见证程序吗? 就是 镜像位于SQL Server 2012 Standard上,见证服务器使用SQL Server 2014 Express。

2
在PostgreSQL中针对多种记录类型的generate_series
我有两个表,我想查询:pest_counts和pests看起来像: CREATE TABLE pests(id,name) AS VALUES (1,'Thrip'), (2,'Fungus Gnosts'); CREATE TABLE pest_counts(id,pest_id,date,count) AS VALUES (1,1,'2015-01-01'::date,14), (2,2,'2015-01-02'::date,5); 我想使用postgres generate_series来显示在日期系列中发现的每种害虫的数量: 预期成绩 name | date | count -------------+------------+------- Thrip | 2015-01-01 | 14 Thrip | 2015-01-02 | 0 .... Fungus Gnats | 2015-01-01 | 0 Fungus Gnats | 2015-01-02 | 5 ... 我知道我将需要以下内容,但我不确定如何进行其余操作: …

1
下一版本的SQL Server的计划发布日期[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 Microsoft是否发布了下一版本的路线图,以标识计划的发布日期? 如果没有,您认为下一个版本可以投入生产多久?

3
调整具有多个联接的查询
我有这个查询.. 214执行/分钟,平均44.42 CPU(ms)有没有办法使它更快 SELECT P.Id id0, P.ProgramId ProgramId1, P.ProgramName ProgramName2, P.ProgramLevel ProgramLevel3, P.Department Department4, P.Track Track5, P.AcademicYear AcademicYear6, P.StartTerm StartTerm7, P.Delivery Delivery8, P.Fee Fee9, P.City City10, P.STATE State11, P.StartDate StartDate12, P.Deadline Deadline13, P.DeadlineDisplay DeadlineDisplay14, P.ProgramType ProgramType15, O.Id as OrganizationId16, O.NAME OrganizationName17, P.ApplicationType ApplicationType18, P.Concentration Concentration19, P.ZipCode ZipCode20, P.Campus Campus21, P.WADisplayName …

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.