数据库管理员

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

1
监听/通知权限
我有一个单一的postgres数据库,有两个用户。爱丽丝和鲍勃。 我希望能够在NOTIFY alice_channel 'sensitive data'不让Bob偷偷摸摸的情况下进行操作LISTEN,只需猜测频道名称为“ alice_channel”即可。 在实践中,频道名称是很难猜测,但是这是安全通过朦胧的最好的。 我是否认为没有办法阻止数据库用户使用(滥用)LISTEN&是正确的NOTIFY吗?即似乎没有可以授予或撤销的任何关联特权。 这是死胡同吗?

1
执行跨数据库事务时,信息存储在哪个事务日志中?
给出以下代码段: -- error checking omitted for brevity begin tran exec database1..my_stored_procedure exec database2..my_other_stored_procedure if (@@error <> 0) rollback commit 交易信息将插入到哪个数据库的交易日志中? 我希望两个日志都可以获取所有数据,因为如果您尝试重播database1的事务日志就没有任何意义,它只会影响该数据库。我也希望您将无法database1在database2不存在的服务器上重播的事务日志,反之亦然。 ..但我愿意接受更正!

4
如何通过Linux终端创建mysql存储过程
在mysql控制台中,我们将使用delimiter命令更改定界符,这对定义过程很有用。我了解 delimiter仅适用于mysql客户端的命令(客户端命令)。 但我使用不具有该命令的MySQL客户端delimiter 一样dbslayer,对这种客户我该怎么定义程序。 现在考虑: create procedure test_pro() begin select 'hello pro'; end 我尝试了以下方法: mysql -u root -pmypass test < proc_file 其中proc_file包含以上过程; 但这给了我以下错误: ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right …

1
如何为多个SQL Server实例配置内存?
我们有一组在同一虚拟服务器上运行的SQL Server实例(2008 R2)。每个实例代表我们开发周期中的一个阶段(Dev / Test / Stage / etc。)。实例在任何给定时间都必须处于联机状态,但是负载往往一次只能隔离到一个实例,具体取决于我们在发布生命周期中所处的位置。 SQL Server似乎抢占并保留了我们设置为最大值的任何内存量。我想知道是否可以通过任何方式将实例配置为“智能”的内存消耗,以使它们在需要时不会互相阻碍获取内存。


1
PostgreSQL计数器的并发增量
我需要维护一个项目的统计表,该表由项目列表及其用途组成(想想一个类似网站的网站,您希望在其中计算综合浏览量)。每次实例化一个项目时,我都需要增加特定项目的使用率。 我的第一个实现是: statistics( id integer NOT NULL, name character varying(255) NOT NULL, usage integer NOT NULL DEFAULT 0, ); UPDATE statistics SET usage = usage + 1 WHERE name = '<name>'; 我关心的是性能和并发性。更新过程将由数十个(也许是80-120)设备实例化,并且每秒可能会发生几次,所以我的问题是: 1)这种方法会保留并发性吗?(即,如果有多个设备“同时”请求更新,是否将每个请求都计入?) 2)您能建议一种实现结果的最佳方法吗?我希望在编写更新时会负担很多,而阅读会更频繁。是否存在增加值的特定功能?我正在查看“序列”,但不确定是否正确。 提前非常感谢您的任何建议

6
MySQL-错误1045(28000):用户被拒绝访问
我刚刚在新计算机上安装了Ubuntu 10.04.2 LTS的新副本。我以root身份登录MySQL: david@server1:~$ mysql -u root -p123 我创建了一个名为repl的新用户。我将主机保留为空白,因此新用户可以从任何位置访问。 mysql> CREATE USER 'repl' IDENTIFIED BY '123'; Query OK, 0 rows affected (0.00 sec) 我检查了用户表以验证是否正确创建了新用户repl。 mysql> select host, user, password from mysql.user; +-----------+------------------+-------------------------------------------+ | host | user | password | +-----------+------------------+-------------------------------------------+ | localhost | root | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | server1 | …
9 mysql 

2
如何删除PostgreSQL联接表中的重复记录?
我有一个具有这样的架构的表: create_table "questions_tags", :id => false, :force => true do |t| t.integer "question_id" t.integer "tag_id" end add_index "questions_tags", ["question_id"], :name => "index_questions_tags_on_question_id" add_index "questions_tags", ["tag_id"], :name => "index_questions_tags_on_tag_id" 我想删除重复的记录,即它们既具有相同记录tag_id又question_id具有另一个记录。 SQL看起来像什么?

3
TempDB中损坏的分区如何导致DBCC CHECKDB报告没有问题?
我们的SQL Server之一最近报告了以下错误: DATE/TIME: 2/25/2013 9:15:14 PM DESCRIPTION: No catalog entry found for partition ID 9079262474267394048 in database 2. The metadata is inconsistent. Run DBCC CHECKDB to check for a metadata corruption. 不到15分钟后,我连接到服务器并运行: SELECT name FROM sys.databases WHERE database_id = 2; 哪个返回'tempdb'。然后我跑了: DBCC CHECKDB ('tempdb') WITH NO_INFOMSGS, TABLERESULTS; 其中未返回任何结果,表明受影响的数据库没有问题。 数据库中的损坏如何导致上面的错误消息而又DBCC CHECKDB未报告问题?我假设页面校验和计算失败,导致该页面被标记为怀疑无法引用该页面的任何对象,但是我一定是错误的。 …


2
有没有一种方法可以将Oracle数据库导出到CREATE DATABASE命令?
我有一个现有的Oracle 11实例,我想将数据库(通过DBCA创建)导出到等效的“ CREATE DATABASE”命令,处理字符集等。我还想获取数据文件的列表,并创建同一数据库所需的表空间。我对保留单个架构对象不感兴趣。 我问是因为有DBMS_DDL包,它将为您提供DDL来重新创建任何表等。想知道在数据库级别是否存在类似的东西。 谢谢!

3
SQL Server Express可以拥有的最大连接数?
我在一台客户端计算机上安装了SQL Server 2005 Express版,并且许多其他用户也通过C#应用程序连接到了该SQL Server,我已经将它们作为接口提供了。 有时一台PC连接到SQL Server,有时仅抛出异常 找不到SQL Server。... 我相信Express版本达到了它的最大连接限制,然后给出了错误。 请指导我如何解决此问题。 任何可以帮助我了解哪个版本的并行连接数量的白皮书, 我愿意升级到SQL Server 2008或SQL Server 2012,但更喜欢Express版本。如果他们真的在这种情况下还给我,我也可以选择其他版本,否则Express版本表现不错。

2
如何检查空值或空表值参数?
我有一个存储过程(SS2k8),带有几个表值参数,有时会为null或为空。我看过这个StackOverflow帖子,其中指出应该从调用参数列表中省略空/空TVP。我的问题是我无法弄清楚如何在存储过程中检查空或空,因为“ IF(@tvp IS NULL)”在创建过程时失败,并显示消息“必须声明标量变量” @tvp”。我是否必须在TVP上执行SELECT COUNT(*)并检查零? 代码摘录: CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS IF (@tvp IS NOT NULL) -- doesn't work BEGIN -- lots of expensive processing END ELSE BEGIN -- a little bit of cheap processing END ...

4
MySQL为什么会产生这么多临时MYD文件?
在托管许多PHP / MySQL网站(照相馆)的Debian Linux服务器上,有时我有“许多”文件,例如/tmp/#sql_6405_58.MYD。 例如今天: [2012-12-15 15:18:11] /tmp/#sql_6405_6.MYD : 88MB [2012-12-15 15:18:11] /tmp/#sql_6405_3.MYD : 22MB [2012-12-15 15:18:11] /tmp/#sql_6405_4.MYD : 138MB [2012-12-15 15:18:11] /tmp/#sql_6405_10.MYD : 88MB ... [2012-12-15 15:18:11] /tmp/#sql_6405_9.MYD : 15MB [2012-12-15 15:18:11] /tmp/#sql_6405_65.MYD : 49MB [2012-12-15 15:18:11] /tmp/#sql_6405_44.MYD : 69MB (同时59个文件,超过6GB ...是的,我监视/ tmp中的大文件) 不幸的是,/tmp它位于同一个分区,/并且临时中断了Web服务器,因为/我想它已满。然后文件消失,服务器恢复正常。 所有文件名都遵循该#sql_6405_*.MYD模式。我想了解哪个MySQL操作意味着这么多的临时文件。我在此服务器上大约有2000个数据库。是否可以知道与哪个数据库有关?

1
联接的虚拟表中的NEWID()导致意外的交叉应用行为
我的实际工作查询是一个内部联接,但是这个带有交叉联接的简单示例似乎几乎总是重现了该问题。 SELECT * FROM ( SELECT 1 UNION ALL SELECT 2 ) AA ( A ) CROSS JOIN ( SELECT NEWID() TEST_ID ) BB ( B ) 对于我的内部联接,我有很多行,我使用NEWID()函数向每个行添加了一个GUID,对于10行中的大约9行,与2行虚拟表的乘法产生了预期的结果,只有2个副本相同的GUID,而十分之1会产生不同的结果。至少可以说这是出乎意料的,这让我很难在测试数据生成脚本中找到此错误。 如果使用非确定性getdate和sysdatetime函数查看以下查询,您将不会看到此信息,无论如何我都不会看到-我总是在两个最终结果行中看到相同的datetime值。 SELECT * FROM ( SELECT 1 UNION ALL SELECT 2 ) AA ( A ) CROSS JOIN ( SELECT GETDATE() TEST_ID …

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.