数据库管理员

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

4
选择所有具有最小值的行
在Sqlite 3中,我试图弄清楚如何根据最小值选择行。我认为我受限制的原因是对相关术语的了解不足,无法有效地搜索Google。 该表如下所示: num text num2 ---------- ---------- ---------- 0 a 1 0 a 2 1 a 3 1 b 4 我想获得的行num2是1, 2和4。我想基于num的最小值为文本列的每个唯一值进行选择。 因此,对于text = 'a'中,最小值num是0,所以我想行1和2 text = 'b',最小值num是1,所以我想排4。 使用group by的各种组合,我可以获取row 1和2或rows 1and 4。我感觉好像缺少一个可以满足我想要的SQL组件,但是我一直无法弄清楚它可能是什么。 进行此类查询的正确方法是什么? 可能的解决方案 我找到了一种方法。我的声誉不足以回答我自己的问题,因此我在这里进行更新。我不确定这是否总是正确的或者效率是什么样的。欢迎任何意见。 我使用了复合选择语句,其中一个查询为文本的每个唯一值找到num的最小值: sqlite> select num, text from t group by text having num = …
9 sqlite 

1
显示备份信息(成功和失败)的查询SQL Server
我有两个备份两个不同数据库的作业。 作业1备份DB1 作业2备份DB2 由于驱动器1上的空间不足而导致作业1失败,因此DB1 备份失败。要解决该问题,我只需要添加空间。没关系 今天,当这个问题已经发生了一个月时,我被告知这一点。是的,我知道这很疯狂,但这是开发人员 我想要获得DB1的完整备份历史记录。我知道我可以从msdb.dbo.backupset表中检索成功的备份信息,但是我想知道是否存在一个查询,该查询显示数据库的备份失败。 我的下面查询显示了12/31 / 13-1 / 27/14中特定数据库的备份历史记录。信息包括服务器,数据库名称,备份开始和结束时间,备份数据库所需的总时间,数据库大小和备份集名称。 SELECT distinct CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_start_date, msdb.dbo.backupset.backup_finish_date, CAST((DATEDIFF(second, msdb.dbo.backupset.backup_start_date,msdb.dbo.backupset.backup_finish_date)) AS varchar)+ ' secs ' AS [Total Time] , Cast(msdb.dbo.backupset.backup_size/1024/1024 AS numeric(10,2)) AS 'Backup Size(MB)', msdb.dbo.backupset.name AS backupset_name FROM msdb.dbo.backupmediafamily INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id …

2
重新启动数据库(重新启动后)后如何清除错误15404
SQL Server代理每小时作业每隔一段时间(例如,几个月)就会开始报告错误15404,并继续这样做直到被干预。 [298] SQLServer错误:15404,无法获取有关Windows NT组/用户'DOMAIN_NAME \ SomeDomainAccount'的信息,错误代码0x6e。[SQLSTATE 42000](ConnIsLoginSysAdmin) 有时,第一次失败是在手动重新启动SQL Server Engine和SQL Server代理服务后立即发生的。可以通过重新启动计算机来解决此问题。 作业所有者是错误消息中列出的名称,并且是SQL Server管理员。 SQL Server Engine服务帐户看起来像是一个服务帐户(我相信它是默认的安装帐户(比一般的NetworkService好一个级别,以防止Engine / Agent实例之间发生干扰): NT Service\MSSQL$INSTNAME 如果该作业始终失败,那将是一回事,但是由于该作业在重新启动后成功,这使我认为应该使用的服务帐户就可以正常工作,并且存在一些A / D时序问题或错误。当询问IT人员有关A / D配置的信息时,响应通常是“什么都没有改变”。 重新启动引擎和代理服务可能导致作业开始失败。 重新启动计算机即可解决问题。 随后立即重新启动引擎和代理程序不再导致作业失败。 链接: 如何解决SQL Server 8198错误


1
没有数据显示时如何保持Tablix的结构
我们有一个SSRS报告,它以tablix形式显示数据集的结果。如果数据集中的查询未返回任何数据,则显示Tablix的标题,但不显示标题下方的tablix单元。我知道可以拥有属性NoRowMessage,但实际上这不是我们想要的。因为当我指定一条消息时,SSRS会显示该消息而不是空的tablix。我必须按原样显示tablix结构,但单元格为空。 我什IsNothing至使用函数为tablix的每个单元格值设置规则,以显示空白(“”)(如果该值为null的话),但这无济于事。 你有什么主意吗?感谢您的帮助。

3
用另一个表中的数据覆盖表-SQL
我们的用户想要从生产中刷新QA数据库,但希望有两个表(分别称为T1和T2)保留原始QA数据。因此,我将两个表从QA(DB1)复制到临时QA数据库(DB2)。然后从生产中刷新DB1。刷新之后,我想将T1和T2数据从DB2覆盖到DB1,以便它可以包含预刷新的QA值。 我已经完成以下工作: 采用 select * INTO D1.dbo.T1 FROM D2.dbo.T1 然后从产品刷新D1 然后使用以下步骤截断T1: SELECT COUNT(*) AS BeforeTruncateCount FROM T1; GO TRUNCATE TABLE T1; GO SELECT COUNT(*) AS AfterTruncateCount FROM T1; GO 现在,当我返回将数据从D2.T1复制到D1.T1时,我得到一个错误,即数据库中已经存在一个名为T1的对象。 我应该放下桌子复制吗? 还是整个过程中有更好的方法?


4
数据库联机时是否可以复制数据库文件?
我正在努力在SQL Server 2008 R2 SP1上建立生产数据库的开发副本。目前,两个开发人员已很少使用实时数据库来进行只读查询,但是新数据库也将对其进行更新。 由于数据库为2.1TB,并且总共花了3天时间来还原和更新到我们需要测试的最新版本,所以我最初的计划是创建一组新的备份文件,然后从这些文件中还原。这将允许我在同一SQL实例和计算机上创建数据库的开发副本,而不必使当前数据库脱机。 但是,为了节省几天的时间,我认为仅复制物理数据库文件并附加数据库的新副本可能是一个好主意。不幸的是,当我尝试复制时,出现错误,该错误是指SQL Server对这些文件施加的锁定。 由于除了传输日志文件外,我什么都不能使数据库脱机(我可以在人们早上进来之前完成此操作),是否有任何方法可以复制实时数据库文件而无需将数据库置于脱机状态?还是我应该等到人们回家后再这样做?

2
吐司表生长失控-FULLVAC无效
最近,我已经将PostgreSQL 8.2.11服务器升级到8.4,以便利用自动清理功能并与30台其他PGSQL服务器保持一致。这是由管理硬件的独立IT小组完成的,因此在其他任何升级方面我们没有太多选择(暂时不会看到9+)。该服务器存在于非常封闭的环境(隔离的网络,有限的root特权)中,并在RHEL5.5(i686)上运行。升级后,数据库每天不断增长,达到5-6 GB。通常,数据库总体上约为20GB;目前,它约为89GB。我们还有其他几个服务器,它们运行等效的数据库,并实际上通过第3方应用程序将记录彼此同步(其中一个我无法访问内部工作)。其他数据库大约应该是20GB。 运行下面的SQL,很明显特定表,尤其是TOAST表存在问题。 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_relation_size(C.oid)) AS "size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') ORDER BY pg_relation_size(C.oid) DESC LIMIT 20; 产生: 关系| 尺寸 ------------------------------------ + --------- pg_toast.pg_toast_16874 | 89 GB littles00.warmstates | …

3
非聚集索引比聚集索引快吗?
这两个表具有相同的结构,并且每个表中都有19972行。为了练习索引,我创建了两个具有相同结构的表并创建了 clustered index on persontb(BusinessEntityID) 和 nonclustered index on Persontb_NC(BusinessEntityId) 和表结构 BusinessEntityID int FirstName varchar(100) LastName varchar(100) -- Nonclusted key on businessentityid takes 38% SELECT BusinessEntityId from Persontb_NC WHERE businessentityid BETWEEN 400 AND 4000 -- CLustered key businessentityid takes 62% SELECT BusinessEntityId from persontb WHERE businessentityid BETWEEN 400 AND 4000 …

1
为什么pg_lsclusters没有列出我的Postgres集群?
我apt-get安装了Postgres 9.2.4(使用PPA)。 我曾经pg_dropcluster --stop 9.2 main删除默认的数据库集群,因为我打算在刚刚挂载的单独的SSD卷(Rackspace块存储卷)上创建一个新集群。 我创建了一个新集群,其数据驻留在我的SSD卷上(并ps显示了该集群的所有正常Postgres进程,并且我能够打开Postgres Shell并运行SQL-即运行良好)。现在,当我运行时pg_lsclusters,没有列出任何内容。 main在删除群集之前,列出的群集还不错。为什么即使新群集正在运行,我的群集也不会出现?我什至重启了服务器(以防万一)。

1
Amazon RDS上的数据库连接过多
用户在Drupal中运行查询/视图时遇到问题,有时会导致我们的网站冻结。发生冻结是因为查询导致数据库连接数增加到400个以上,并且基本上在站点超过100个数据库连接的任何时候,站点都会严重减速,并且没有响应。 我们正在使用MySQL Red Hat Linux运行Amazon RDS 我们的前端应用服务器上有足够大的EC2,还有足够大的RDS。 我们现在解决此问题的方法是找到有问题的查询,然后将其杀死。一旦查询被终止,我们的数据库连接将下降到20左右,这是监视站点统计信息时看到的正常数量。 有没有办法停止令人讨厌的查询并在它运行太长时间并消耗连接之前将其杀死?我试图在错误查询发生之前自动将其杀死,或者至少在30秒后意识到错误查询并将其杀死。

3
如何将模式中所有表的所有特权授予IBM DB2中的用户?
首先,我想将数据库从IBM DB2 AIX导出到IBM DB2窗口中。不幸的是,由于操作系统问题,我无法使用BACKUP和RESTORE命令。因此,我不得不诉诸db2move命令。 我已经使用以下命令从远程IBM DB2 AIX中的dbemp数据库中导出了myschema模式和所有表: db2move dbemp export -sn myschema 当我运行该命令时,我以名为dbuser1的用户身份登录。 它会在当前文件夹中生成一堆文件。我将文件抓到安装了IBM DB2 LUW的本地计算机(Windows)中。 现在,在本地计算机的IBM DB2中,我首先使用IBM Data Studio 删除了现有的模式myschema(我也有一个本地dbemp数据库)。 然后我使用以下命令导入文件: db2move dbemp import 它将模式和表成功导入到本地dbemp数据库中。 执行上述操作时,我以用户winuser1身份登录。 我的本地计算机(Windows)中也有一个名为dbuser1的本地用户。在IBM Data Studio中,我创建了一个连接配置文件,该连接配置文件使用dbuser1用户连接到本地dbemp,并且可以浏览myschema模式和表,但是无法浏览表的数据(出现特权错误)。用户winuser1可以浏览表的数据,但是出于开发目的,我必须使用用户dbuser1连接到数据库。 因此我发现我可以像这样向表上的用户授予特权: GRANT ALL ON myschema.table1 TO USER dbuser1 问题是我有100个表,我不想为每个表键入这些行。不幸的是,也没有这样的通配符解决方案: GRANT ALL ON myschema.* TO USER dbuser1 -- this doesn't work …

3
锁使用的内存
我很好奇,数据库容量为128 GB的SQL 2012 Enterprise Edition的其中一个为370 GB,并且还在不断增长,锁(OBJECTSTORE_LOCK_Manager)内存管理员使用的内存量显示7466016 KB。我也可以通过查看性能计数器来确认select * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)' 但是,当我运行查询时 select count(*) from sys.dm_tran_locks 它仅显示16个锁。那么,什么使用了超过7 GB的锁。有没有办法找出来? 这是否意味着一旦分配了用于锁的内存,SQL尚未释放它?在过去的1小时内,我看不到锁数超过500,但是锁内存保持不变。 最大服务器内存为106 GB,我们没有在内存中使用锁定页面,并且在过去12小时内我没有看到任何内存压力或错误日志中的任何错误。可用兆字节计数器显示了超过15 GB的可用内存。 活动监视器始终显示0个等待任务,因此显然没有阻塞。 考虑到SQL Server锁占用约100个字节的内存,因此7 GB的内存很大,并试图找出谁在使用它。 我通过锁定计数运行服务器仪表板报告的最重要的事务,它说:“当前系统上没有正在运行的锁定事务。但是,锁定内存仍然如上所示。DB在夜间工作最忙。

2
链接服务器可供未经许可的用户使用
我有用户看到他们不应该看到的链接服务器。 链接服务器被定义为只有我才能访问它,但是每个人都可以看到和使用它。 我使用以下步骤创建了新的链接服务器: 将SSMS对象资源管理器连接到SQL Server实例 展开Server Objects,右键单击Linked Servers并单击鼠标左键New Linked Server... 在General选项卡中选择SQL Server了Server type和写入服务器的名称 在Security上部的标签下,点击Add,选择“ sa”作为Local Login,输入Remote User的名称,然后Remote Password 在Security下部的标签下(在下方For a login not defined in the list above, connections will:),选择第一个选项:Not be made 点击OK并开始测试 现在,唯一应该看到链接服务器的人是我(“ sa”),但其他用户可以某种方式看到它并使用它。 注1:可以使用链接服务器的用户对远程服务器具有权限,他们看不到不应看到的数据,只是在不能访问时才可以从链接服务器访问数据。 注意2:sysadmin在这两种情况下,我都是唯一的。

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.