数据库管理员

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

1
序列正在重用
我有一个序列,可以为系统中的对象生成跟踪号。它已经运行了一段时间了。 上周,我们注意到它开始重新使用值。 似乎发生的事情是,在晚上的不同时间点,它将回滚到前一天的值。然后它将继续从该点生成值。 因此,例如,我可以得到这样的东西: 10112 10113 10114 10115 10116 10117 10118 10113 10114 10115 10116 ... 何时发生,第一次使用与第二次使用之间的持续时间(少至10分钟或几小时)或回滚了多少(少至1次至数百次)似乎没有任何规律。 我曾考虑过运行跟踪(现在仍然可以),但是我认为序列对象没有被直接修改。我认为这是因为修改日期已经过了几天,并且指出了我们手动提高该值以尝试消除重复项的时间。(此后此问题已经发生过好几次了。) 是否有人知道每晚可能导致序列回滚和重用值的原因? 更新:要回答评论中的几个问题: @@Version: Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64)2012年10月19日13:38:57 创建脚本: CREATE SEQUENCE [schemaName].[SequenceName] AS [bigint] START WITH 410014104 INCREMENT BY 1 MINVALUE 410000000 MAXVALUE 419999999 CYCLE CACHE GO 我没有唯一约束(但我打算穿上)。但是,这只会让我知道何时重用了值。不是什么导致值重置。我的工作是每5分钟保存一个新值。时间和价值跳跃没有遵循规律。 我已经检查了事件日志,看是否有错误。唯一正在发生的事情是这样的:http : //support.microsoft.com/kb/2793634 我们今天正在应用此修复程序。我不认为这些是相关的,但是可能是相关的。

1
每天在给定时间安排活动
我希望我的活动每天00:20举行。我对时间安排感到困惑。我应该使用第一个选项还是第二个选项? 选项1 CREATE EVENT my_event ON SCHEDULE EVERY 1 DAY STARTS '2014-04-30 00:20:00' ON COMPLETION PRESERVE ENABLE DO # My query 选项2 CREATE EVENT my_event ON SCHEDULE AT ('2014-04-30 00:20:00'+ INTERVAL 1 DAY) ON COMPLETION PRESERVE ENABLE DO # My query
11 mysql  event 

1
删除语句死锁
运行SQL Server作业时出现死锁。死锁发生在简单的DELETE语句上。我本以为必须要运行SELECT / UPDATE查询才能引起死锁?但是看起来是DELETE / DELETE死锁... 我要寻找的是为什么会出现DELETE / DELETE死锁。(据我所知)传递了不同的参数。 有任何想法吗?谢谢。 deadlock-list 2014-05-20 07:30:09.66 spid25s deadlock victim=process409048 2014-05-20 07:30:09.66 spid25s process-list 2014-05-20 07:30:09.66 spid25s process id=process409048 taskpriority=0 logused=0 waitresource=PAGE: 12:1:7127294 waittime=4352 ownerId=629860973 transactionname=DELETE lasttranstarted=2014-05-20T07:30:05.307 XDES=0x397219620 lockMode=U schedulerid=5 kpid=3792 status=suspended spid=150 sbid=0 ecid=3 priority=0 trancount=0 lastbatchstarted=2014-05-20T07:30:05.307 lastbatchcompleted=2014-05-20T07:30:05.307 clientapp=QSQL25 hostname=MORRIS hostpid=1528 isolationlevel=read committed …

1
恢复差异备份会创建DEFUNCT日志文件吗?
这是我的问题。我正在尝试通过完全还原将数据库移动到新服务器,然后使用快速差异备份/还原进行切换。我可以完全还原,但是还原差异备份时会收到以下警告: 消息3127,级别16,状态1,行1还原的数据库'DatabaseName'的文件'Database_Log2'处于关闭状态,因为该数据库正在使用简单恢复模型,并且该文件被标记为可读写访问。因此,只能通过逐段还原来恢复只读文件。 数据库已还原并被视为联机,但是由于此DEFUNCT文件而导致的任何备份操作失败,并出现以下错误: 消息3636,级别16,状态2,行1处理数据库ID 10文件ID 6的“ BackupMetadata”元数据时发生错误。消息3046,级别16,状态2,行1元数据不一致。唯一可能的备份操作是使用WITH CONTINUE_AFTER_ERROR或NO_TRUNCATE选项进行尾日志备份。消息3013,级别16,状态1,第1行BACKUP DATABASE异常终止。 如果我对完整文件和差异文件执行RESTORE FILELISTONLY,则两者都给我相同的输出,这与我从源数据库上的sys.database_files中看到的输出匹配。服务器为Developer Edition上的SQL2012 SP1。 我可以进行完整备份,然后立即进行差异处理,然后将这些文件还原到同一服务器上的其他数据库中,并看到完全相同的问题,因此造成差异的原因与创建差异有关。如果使用“恢复”还原完整备份,则没有问题。我不知道该文件是否曾经存在于该数据库中,但是该文件很可能曾经存在并且很久以前就被删除了。如果我在已还原的数据库上查询sys.database_files,则DEFUNCT文件具有drop_lsn的值,似乎可以确认这一点。当前,源数据库中只有一个文件组(PRIMARY),4个数据文件和一个日志文件。 有任何想法吗?

2
SQL Job步骤作为其他SQL帐户运行
我很好奇如何设置要作为其他SQL登录帐户执行的SQL作业步骤。看来我需要设置一个需要现有凭据的新代理帐户。创建凭据时,我唯一的选择是使用Windows登录凭据。 我尝试运行的作业如下。还有其他一些语句,但是当我将作业步骤设置为以SQL登录名运行时,它将失败。 insert into [dbo].[TableA] SELECT ss.[Ref_ID] ,mm.[studentID] ,mm.[studentPersonID] ,mm.[studentFirstname] FROM [dbo].[TableB] mm left outer join [dbo].[TableC] ss on ss.parentPersonID=mm.parentPersonID and mm.studentPersonID = ss.studentPersonID where ss.Ref_ID is not null; 通过SQL作业步骤运行此命令时,它将失败。 Executed as user: an_admin_account. Access to the remote server is denied because the current security context is not trusted. [SQLSTATE …

1
为什么自动增量跳跃的次数超过插入的行数?
auto_increment使用存储过程执行批量插入后,我在Bids表的bidID中记录的值中看到这种奇怪的行为,对此感到非常不安: INSERT INTO Bids (itemID, buyerID, bidPrice) SELECT itemID, rand_id(sellerID, user_last_id), FLOOR((1 + RAND())*askPrice) FROM Items WHERE closing BETWEEN NOW() AND NOW() + INTERVAL 1 WEEK ORDER BY RAND() LIMIT total_rows; 例如,如果开始时的auto_incrementbidID值为101,并且我插入了100行,则结束值将变为213,而不是201。但是,这些插入的行的bidID依次运行,最大为201。 检查以下内容后, SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 1 | | …

1
估计突发使用的IO需求
我们有一个可以全天定期查询SQL数据库的应用程序。有零个活动周期或只有零个活动周期,并散布着对相对大量数据的单独请求。当这些请求出现时,主要目标是快速交付数据,次要目标是经济高效地完成数据处理。由于应用程序的性质,数据/索引不太可能会从先前的查询(不同的用户,在数据的不同部分上)缓存到RAM中。 对于使用率相对稳定的系统,我听说过经验法则以观察磁盘队列长度并使该数量保持较小。这将特别在AWS中运行,在该AWS中,我已经看到一条经验法则,即磁盘队列长度为每100 IOPS 1个是合理的。 我如何估算此类系统的IO要求?在处理单个突发查询时,磁盘队列长度是否是可靠的指标?我还应该考虑其他指标吗?

2
在位列上添加索引会大大降低插入速度吗?
我有一张桌子,上面有大约100万到500万条记录。该记录的一小部分将bit列之一设置为“ TRUE”。需要快速找到该记录。我认为该索引可以加快在此列上的搜索,但是我担心INSERT。因此,我的问题。 数据库的工作就像某种数据仓库,因此有很多SELECT和小的选择(每天最多10到20个),但有很大的INSERT(一次最多有20万条记录)。我担心导入数据库的时间较长。

2
什么是将数据从一个Cassandra ColumnFamily复制到同一键空间上的另一个好方法(例如SQL的INSERT INTO)?
试图找到一种将所有行从Cassandra ColumnFamily / Table轻松转移到另一行的方法。 据COPY我了解,该命令是一个不错的选择。但是,由于它将所有数据转储到.csv磁盘上然后再加载回去,我不禁想知道是否有更好的方法可以在引擎内完成。 我的意思的一个具体示例将INSERT * FROM my_table INTO my_other_table在许多SQL数据库中可用。当然,我意识到Cassandra是NoSQL,因此不能以相同的方式工作-但似乎可以使用。 有什么好的方法可以做到这一点? 非常感谢!

3
如何从SQL Server数据库导出所有与安全相关的信息
你们可能知道,SQL Server没有提供开箱即用的解决方案来导出针对数据库中每个元素(在数据库级别以及对象级别)声明的所有与安全相关的语句。 我说的是提出这些信息的能力 所有用户 所有用户定义的角色 数据库级别的所有权限(例如GRANT CREATE FUNCTION) 对象级别的所有权限(例如,GRANT SELECT ON OBJECT :: xxx) 您可能会认为SQL Server必须具有类似这样的内容,但是SQL Server导出向导或通过右键单击对象而生成的各种脚本都不会捕获此信息。 我在网上看到了许多使用人们亲切发布的非精选脚本的“可能解决方案”,但是由于我必须100%确保捕获了所有安全信息,所以我不能完全依靠这些脚本。 我可以选择以这些为起点自己写东西,但我讨厌不得不重新发明轮子,以达到您认为很多人可能拥有的要求。 有人没有提供可以可靠地为您提供此信息的工具(作为SQL Server产品的一部分或第三方工具)吗? 或者至少,是否有一个社区支持的脚本,大多数人会同意“会做”? 谢谢!

1
PostgreSQL事务提交数小时
我遇到一个问题,从用户到我的PostgreSQL服务器有两个连接,它们已经运行了大约4个小时,并且处于提交状态已经有一段时间了(我一直在观察它至少1个小时) 。这些连接阻止了其他查询的运行,但它们本身并未被阻止。 这是有问题的两个连接。 postgres=# select * from pg_stat_activity where usename = 'xxxxx'; datid | datname | procpid | usesysid | usename | current_query | waiting | xact_start | query_start | backend_start | client_addr | client_port -------+---------+---------+----------+---------+---------------+---------+-------------------------------+-------------------------------+-------------------------------+---------------+------------- 20394 | xxxxxx | 17509 | 94858 | xxxxx | COMMIT | f | …

1
将多个服务器登录名映射到一个数据库用户
这似乎是一个愚蠢的问题,但是尽管进行了一些研究,但我仍然无法找到与此有关的任何信息(可能是由于使用了错误的术语)。 是否可以将多个服务器登录名(SQL Server身份验证)记录到单个数据库用户(该用户具有作为数据库角色的成员所分配的权限)? 我有几十个sql登录名(sql服务器身份验证),它们需要从中央数据库读取一个设置,我宁愿将所有这些登录名映射到目标数据库中的单个DB用户,而不是为每个登录名创建一个自己的DB用户。 如果是,正确的T-SQL语法是什么?

3
db_owner无法删除数据库-错误615,SQL Server
我有一个在Amazon EC2上运行的SQL Server 2012数据库。我已经创建了一个用户,可以创建,编辑和删除数据库。我给新用户dbcreator担任服务器角色。 我的用户可以远程连接并成功运行create database foo;命令。但是,当用户尝试使用drop database foo;命令再次删除数据库时,失败并显示以下错误: Warning: Fatal error 615 occurred at Feb 1 2014 5:15PM. Note the error and time, and contact your system administrator. ErrorCode: 21 即使选择的数据库是master(所以我也不认为是因为它正在使用中)。当我再次运行该命令时,该命令成功,以管理用户身份登录。 我检查了新创建的数据库,并按db_owner预期向用户分配了该数据库中的角色,因此我的理解是,这对于该用户来说应该是足够的权限,以便能够删除他们刚刚创建的数据库。 根据http://technet.microsoft.com/zh-cn/library/ms178613.aspx,db_owner角色应具有足够的权限。“需要数据库的CONTROL权限,ALTER ANY DATABASE权限或db_owner固定数据库角色的成员身份。” 我查找了错误615,发现“找不到数据库表ID%d,名称为'%。* ls'。” 这对我来说毫无意义。http://technet.microsoft.com/zh-CN/library/aa937592(v=sql.80).aspx SQL Server版本信息:Microsoft SQL Server 2012 (SP1) - 11.0.3368.0 (X64) /n May …

2
从何处开始?
这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 这个问题只需要一个答案:甲骨文入门的大量资源清单,包括数据库管理,PL / SQL和SQL。 您可能会发现您的问题已作为该问题的副本被关闭,如果是的话,请不要生气:我们正在竭尽所能提供帮助,而不会稀释该站点的专家重点。要结束与此问题的重复,我们要说:“您真正需要的是花一些时间阅读一些最佳的可用资源,而不是立即回答您的特定问题。如果您确实掌握了这些资源,很快还会有更多高级问题!
11 oracle  plsql 


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.