数据库管理员

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

2
使用\ copy时在psql中进行变量替换
我正在使用psql命令\ copy,我想像在编写查询脚本时一样,从外壳(用于表名)向其传递变量。我已经阅读了psql的文档: 该命令的语法与SQL COPY命令的语法相似。请注意,因此,特殊的解析规则适用于\ copy命令。特别是,变量替换规则和反斜杠转义不适用。 这似乎很确定,但是我想知道是否有人知道解决方法?

3
是否可以独立安装SQL Server Management Studio Express?
我想知道是否将SQL Server Management Studio Express(主要用于Microsoft SQL Server)安装在独立的计算机上(没有任何SQL Services和其他东西)以连接到远程数据库吗? 我运行SQL Server 2012;我的一位经理告诉我,他们希望我为指定用户创建一个Web UI,以运行查询/更新数据库。这是我在PHP的能力范围内;但是我想着想,我可以提出一个建议,以消除对Web UI的需求,因为这将花费我们服务器管理员的大量时间,但是要在我们的网络计算机上安装SMSE来连接/管理数据库吗? 这可能吗?还是我必须完成创建显示模式,表等的WebUI的艰巨任务。

3
捕获SQL Server CDC中更改的日期时间
因此,我们已经开始探索在我们的一个生产数据库中使用变更数据捕获。我们想知道每次更改的日期时间。通读演练和教程等内容,似乎标准方法是使用LSN与cdc.lsn_time_mapping系统表相关。当谈论一天中成千上万的变化时,这种方法行得通,但不是很简单,也不是很有效。 在测试环境中,我对变更跟踪表进行了以下调整。我发表了一条ALTER TABLE声明,在末尾添加一列,[__ChangeDateTime]并将其设置为默认值GetDate()。该方法似乎有效,更改跟踪仍然正常运行,捕获了日期时间。 但是混用系统表会让我有些紧张。 如果这不是Microsoft从一开始就添加的系统字段,则必须说明其原因。由于他们改而选择了LSN来cdc.lsn_time_mapping方法,我是否通过以这种方式创建自己的hack来解决问题? 更新: 在测试过程中发现,有时GetDate()不够精确,无法满足我们的需求-多个更改同时共享。建议使用sysdatetime()和datetime2将值移至纳秒级。显然只有2008年以上的选项。

2
将TempDB拆分为多个文件,这些文件等于CPU的数量
《SQL Server tempdb最佳实践提高性能》一文建议,我应该将tempdb文件分割成与内核数相等的数量。因此,对于4个内核,您将获得4个文件。 通过拥有更多的文件,可以增加SQL Server一次可以推送到磁盘的物理I / O操作的数量。SQL Server可以将其下推到磁盘级别的I / O越多,数据库将运行得越快。使用标准数据库,SQL Server可以将所需的大量数据缓存到内存中。由于tempdb具有高写入特性,因此需要先将数据写入磁盘,然后才能将其缓存回内存。 尽管从理论上讲听起来不错,但总体上来说它真的那么好吗?它仅适用于IO非常高的特定系统吗?

2
云中的SQL Server事务日志
这是一个常见的做法是将事务日志(*.ldf)单独的物理磁盘的系统比数据库文件(上*.mdf,*.ndf)。 在虚拟机云环境中,可以将事务日志与其他数据文件放在相同的驱动器号上吗?在当今流行的云虚拟机环境中通常如何处理? 注意:不使用SQL Azure。使用具有完全访问权限的Windows虚拟机。

2
如何为BI配置在SQL Server上配置这些磁盘?
假设恒定内存(32gb)和CPU(4),2个磁盘阵列,我有以下磁盘 2 x 150(10k) 6 x 150(15k) 它们都是本地磁盘。 我的要求 我的数据库是350gb,并设置为默认10%增长 我的OS和SQL Server是Server 2k8R2(C:驱动器OS +页面+应用程序= 55Gb) 日志要求约为70gb,默认设置为10%的增长,并且通常会被截断 我的TempDb当前约为12gb,默认设置为10%的增长 我的问题是我试图了解将TempDB和OS以及Log放在哪里的最佳方式。我的经验仅限于这两个的最佳配置 这不是一个在线交易系统。它具有大量的数据写入(新数据+索引重建/重组),然后具有大量的数据读取(我估计约为50/50),处理大约13个小时,然后安静下来。 我的理解是,与日志相比,TEMPDB在正常处理期间被大量使用。 我的想法是以下 适用于OS + TempDB的2 x 150g(15k)突袭1 = 150g 2 x 150g(10k)RAID 1 = 150g for LOG(请注意此处的磁盘较慢) 4 x 150g(15k)突袭5 = 150g用于数据 听起来像个好主意吗?然后,如果需要,我可以交换Log + TempDB。 我是否违反基本原则,例如由于分页问题而从不将TempDB放在OS磁盘上,或者也许从不将日志放在比数据慢的磁盘上? 编辑: 我们的系统上也有一个SSAS,最终用户只能访问多维数据集。上面的50%是根据处理SSAS数据库所需的时间得出的。

3
SQL更新状态需要很长时间/大量磁盘使用
是的,这听起来像是一个非常笼统的问题,但是我还不能将其范围缩小很多。 所以我在sql批处理文件中有一个UPDATE语句: UPDATE A SET A.X = B.X FROM A JOIN B ON A.B_ID = B.ID 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 …

2
SQL Server选择计数READ_COMMITTED_SNAPSHOT问题
在特定表上执行select count(*)时,似乎出现了很多死锁。我已经更改了所有必需的参数,并将它们设置为仅行锁定。 我还更改了数据库以使用READ_COMMITTED_SNAPSHOT隔离, 但是,似乎使用select count(*),其中column =?在表上触发死锁或表上的锁。 我是否正确地认为select count(*)应该只访问中间行?但是,似乎不是那样,并且我仍然遇到死锁。正确的索引编制可能会有所帮助, 问题是:即使将read_committed_snapshot设置为on,SQL Server 2008 R2也会在选择count(*)期间在表上放置共享锁吗? 谢谢

1
NVARCHAR列上的相等查询在SQL Server 2012中产生多个结果
我正在将一个宠物项目从PostgreSQL(9.2.2)移到SQL Server(2012 Standard)。 查询unicode字词时,我注意到了一个有趣的现象。给定定义: CREATE TABLE [word]( [id] [int] IDENTITY(0,1) NOT NULL, [value] [nvarchar](255) NULL ); 和数据: 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 …

4
SQL Server脚本删除Active Directory中不再存在的帐户
我们有一个SQL Server 2000,不久将迁移到SQL Server2005。它具有多年创建的Windows身份验证帐户,这些帐户在Active Directory中已不存在,这会阻止复制数据库向导在新服务器上创建这些帐户。 是否存在脚本或某种自动删除活动目录中不再存在的帐户的方法? 编辑:为了清楚起见,需要删除的登录名在SQL Server 2000上,它不支持该DROP LOGIN命令。 另外,可以手动删除SQL Server 2000中的登录名(我认为),exec sp_droplogin 'loginname'但是在我的情况下,无论我使用“ domain \ loginname”还是“ loginname”,都找不到登录名。 只是增加了混乱,exec sp_revokelogin 'domain\loginname'看起来确实有效。 编辑2:终于解决了问题。许多有问题的登录都以编程方式添加到数据库中,尽管它们在某种意义上可以以用户可以连接的方式工作,但是当SQL Server预期没有域时,用户名与NT登录名的域前缀登录不匹配,反之,反之亦然。 为解决此问题,我修改了sp_droplogin过程以取出其中一个出错的检查。 我接受我自己的答案,因为它可以在SQL Server 2000中使用。

1
Postgres 9.2的流复制如何处理模式更改和初始表设置?
我想在物理服务器上建立备份数据库,该服务器位于我的主物理数据库服务器下。我正在使用Postgres 9.2,并且想使用同步流复制(出于原子性),但是我完全不知道类似的事情,A)初始表设置是从服务器1转移到服务器2的(例如,我运行syncdb从我的Django应用程序中,该应用程序在服务器1上创建了一系列表,以及B)如何将模式的持续变化从服务器1携带到服务器2(例如,我运行Django South迁移,该迁移发送ALTER TABLE查询以及添加/删除索引等)。这些事情是通过流复制透明地处理的,还是我需要做一些事情来影响两台服务器之间的更改?

2
随着时间的流逝,SQL Server变得越来越慢,直到我们不得不重新启动它为止
我们有一个混合OLAP / OLTP工作负载的数据库。这些查询是非常特殊的,并且是在中间层应用程序服务器中动态创建的。当我们启动服务器时,性能是可以接受的,但是在所有可用内存(30GB)用完之前,内存消耗越来越多。在那之后,系统变得越来越慢。 像这样的命令Dbcc freeproccache无效。 交易select * from sys.dm_tran_session_transactions不多(不超过系统正常时),有时此列表为空。 的第一个结果dbcc memorystatus是 VM Reserved 42136628 VM Committed 1487176 Locked Pages Allocated 24994048 Reserved Memory 1024 Reserved Memory In Use 0 重新启动SQL Server可以解决该问题一段时间。 是什么原因导致这种现象?如何避免呢? 如果真正的解决方法太困难了,是否有一条命令可以强制SQL Server在不重新启动DBMS的情况下实际释放所有内存? 服务器在专用硬件(不是VM)上运行。我们有一些预定的工作,但是暂时禁用了它们,没有任何变化。同一台服务器上还运行着其他中层应用程序,但是它们使用的内存不超过2GB,CPU可以忽略不计,几乎没有I / O。我们没有更改就重新启动了所有此类应用程序。

2
索引碎片和SSD磁盘
我是性能问题的新手,但我看到一些讨论,即SSD磁盘解决了索引碎片导致的性能问题。有人经历过吗?我正在考虑更改硬件,并且在徘徊是否有帮助

1
安装PostgreSQL所需的权限
我是PostgreSQL数据库的新手。我需要将其安装在我的机器上。 我不是系统管理员。 如果非管理员可以安装,可以有人建议。 如果除了.exe以外,还有其他安装方式,请告诉我。 提前致谢。

1
使用复制数据库向导时发生超时过期错误
微软让我相信,SQL Server 2012复制数据库向导是将SQL Server 2000数据库复制到SQL Server 2012的最佳方法。经过几个小时的努力,我得以解决一些问题,并且能够导入到将中等大小的SQL Server 2000数据库转换为SQL Server 2012。 但是,对于30GB的数据库,该向导始终会失败,并出现以下错误: 消息:传输数据时发生错误。有关详细信息,请参见内部异常。 StackTrace:在Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer() 处的Microsoft.SqlServer.Management.Smo.Transfer.TransferData() InnerException->超时已过期。在操作完成之前超时或服务器没有响应。 CREATE DATABASE失败。列出的某些文件名无法创建。检查相关错误。 StackTrace: 位于System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔值BreakConnection), 位于System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) 我已经仔细检查过,这不是文件路径,权限或磁盘空间问题。我认为该CREATE DATABASE步骤需要2分钟左右的时间,并且向导假定操作已超时。我手动创建了一个具有相同文件路径的空数据库,并使用SQL进行了文件大小调整,这是可行的。有趣的是,一个1GB的数据库副本由于相同的错误而失败,并在第二次尝试中成功。 请帮忙。

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.