数据库管理员

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

4
仅在CPU空闲时才按计划运行服务器代理作业
我在SQL Server代理中设置了一个作业来运行更新查询。我希望这项工作在每晚午夜至凌晨5点之间执行,并且希望在该时间范围内每5分钟重复一次。但是我只希望作业在CPU空闲时才能实际执行,也就是说CPU利用率低于20%。我知道我可以设置时间表,也可以单独设置CPU空闲要求。我是否可以设置它,以便两个“时间表”都必须正确才能运行作业? 谢谢

2
为什么CAST(1 AS SIGNED INTEGER)在MySQL上返回BIGINT?
如果我这样做,CAST(1 AS SIGNED INTEGER)最终总是会得到BIGINT退货,例如: $ mysql -u root -p --column-type-info Enter password: --- Copyright and help message snipped for brevity --- mysql> select cast(1 as signed integer); Field 1: `cast(1 as signed integer)` Catalog: `def` Database: `` Table: `` Org_table: `` Type: LONGLONG <== LONGLONG i.e. 64 bit integer Collation: …


1
如何在MySQL中优化InnoDB表
我一直在研究如何仅在MySQL中优化碎片表,并回顾了有关优化表的文章。基本上,它针对任何表对information_schema数据库执行查询,data_free > 0并OPTIMIZE仅对那些表构建SQL语句。我运行了此查询,它确定了148个表以进行优化。标识的所有表都是InnoDB表。执行结果优化SQL脚本后,我重新运行原始脚本以识别碎片表,并在第一遍过程中返回完全相同的表。 我看到了有关InnoDB表和OPTIMIZE命令的冲突帖子。有人说这OPTIMIZE不适用于InnoDB表,需要运行ALTER TABLE table_name ENGINE=INNODB。其他人则说,针对InnoDB表执行时OPTIMIZE实际上会调用该ALTER TABLE命令。考虑到这一点,我ALTER TABLE对被标识为碎片(data_free > 0)的InnoDB表之一运行了该命令,发现其data_free之后没有改变。它仍然大于0。我还重新启动了MySQL,并检查了它以发现相同的结果。 现在,我们组织中有几台运行MySQL 5.5.29的服务器,我对所有服务器进行了查询,以识别出任何带有InnoDB表且未DATA_FREE=0 or NULL返回任何表。它们都大于零。 我还OPTIMIZE对一些大于零的MyISAM表运行了该命令,DATA_FREE然后验证它是否为零。 谁能为我阐明一下?从InnoDB表中删除碎片的正确方法是什么?确定零散的InnoDB表的正确方法是什么? 谢谢

1
SQL Server如何在UPDATE期间同时返回新值和旧值?
在高并发期间,我们遇到了返回无意义结果的查询的问题-结果违反了发出查询的逻辑。重现了一段时间。我设法将可重现性问题分解为少数几个T-SQL。 注意:实时系统中有问题的部分由5个表,4个触发器,2个存储过程和2个视图组成。对于发布的问题,我已经将实际系统简化为更易于管理的内容。事情已经减少了,列被删除了,存储过程被内联了,视图变成了普通的表表达式,列的值改变了。说了这么长的话,虽然后面的内容会重现错误,但可能更难以理解。您必须避免怀疑为什么某种事物以这种方式构造。我在这里试图弄清楚为什么这种玩具模型中的错误情况可重复发生。 /* The idea in this system is that people are able to take days off. We create a table to hold these *"allocations"*, and declare sample data that only **1** production operator is allowed to take time off: */ IF OBJECT_ID('Allocations') IS NOT NULL DROP TABLE Allocations CREATE …

2
PostgreSQL中的数据库一致性检查器
PostgreSQL中是否有任何DBCC(数据库一致性检查器)命令?我可以找到SQL Server DBCC命令,但找不到Postgres吗?我读到postgresql具有性能调整的内置功能,并且没有DBCC命令可用于postgres。是真的吗

3
根据最新日期选择具有多个联接的行
我有此查询(SQLFiddle): SELECT c.name, a.user_id, a.status_id, a.title, a.rtime, u.user_name, s.status_name FROM company c LEFT JOIN action a ON a.company_id=c.id LEFT JOIN user u ON u.id=a.user_id LEFT JOIN status s ON s.id=a.status_id WHERE u.user_name='Morgan' -- WHERE c.name='Fiddle' GROUP BY c.id HAVING a.rtime IS NULL OR a.rtime = ( SELECT max(rtime) FROM action …
8 mysql  group-by 

2
正确地删除Oracle实例
我想删除在AIX 6.0 OS中创建的oracle实例(oracle 10.2.0.4.0)。我知道我可以删除终端中的所有dbf和ctl文件,但是我认为这不是最好的方法。我认为这一定是一种更清洁的方法。 提前致谢。

3
在SQL Server Management Studio中的标题中显示表名称
有谁知道如何获取SQL Server Management Studio在标题中显示表名称。现在它们几乎没用了,每次我需要查看一张桌子时,我都必须重新打开它。 在过去的美好时光里,我曾经习惯于使用Enterprise Manager,这非常有用。 我在这里找到了Brent Ozars的文章,并且在Options ...中的相应条目似乎没有什么用处。也许是第三方产品?

5
列出所有数据库上所有表的表大小
是否有一种简单的方法可以列出MSSQL服务器上每个数据库中每个表的大小? 我已经在sys.tables上使用查询来获取单个数据库的结果,但是每个服务器上有100个以上的数据库,因此对于所有数据库而言,获取相同结果的方法将是不错的选择。 目前,我必须从master.sys.databases创建一个临时数据库列表,然后使用游标对其进行迭代,构建查询并将结果插入到temp表中EXEC sp_executeSQL @SQLString。

3
“当连接关闭并返回到池时,保留来自最后一个SET TRANSACTION ISOLATION LEVEL语句的隔离级别”?
MSDN在线文章“ SQL Server中的快照隔离 ”指出: “隔离级别具有连接范围的范围,并且一旦使用SET TRANSACTION ISOLATION LEVEL语句设置了连接,它将一直有效,直到关闭连接或设置另一个隔离级别为止。当关闭连接并返回到池中时,则保留了最后一个SET TRANSACTION ISOLATION LEVEL语句的隔离级别。后续重用池化连接的连接将使用在池化连接时生效的隔离级别。” 这是不矛盾的段落(“直到”还是“保留”)? 然后,如果在关闭连接并将其返回到池之后,“ 保留了与最后一个SET TRANSACTION ISOLATION LEVEL语句的隔离级别”,则应如何理解: 默认隔离级别将具有任意值(池中的不同连接将具有不同的隔离级别,并且其值将取决于重新打开的连接)? 还是池中所有连接的所有默认值都将更改为最后一个?但是又是未知数吗?

2
如何将Oracle数据库迁移到MySQL服务器?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 当前,我们的应用程序正在使用Oracle 11g数据库运行。我们正在开发在MySQL群集上运行的应用程序的更新版本。我们需要将数据从Oracle数据库迁移到MySQL数据库。这不是数据库对象的直接副本。在较新版本的应用程序中,架构(表结构和关系)已更改。而且审计表也需要复制。有什么方法可以映射旧Oracle模式和新MySQL模式中的表,列并应用复制,以便复制数据? 我们正在考虑分两个步骤进行此活动。1.将Oracle数据库转换为MySQL数据库。2.编写存储过程以逐表复制。 从一个RDBMS供应商到另一供应商执行这种数据库迁移时,是否有最佳实践?是否有任何开源或商业工具可用于此?

1
如何在SQL Server中批量迁移架构之间?
我们目前有多个数据库,但希望将它们组合起来,而是使用架构将我们的域上下文分开。 在MS SQL Server 2008 R2中,如何将一个架构的所有内容批量重新放置到另一个架构中? 例如,我们在dbo架构中创建的所有表,视图,过程,索引等... 现在都将存在于foo架构中。 编辑:我想根据AaronBertrand的精彩评论进行澄清。这不是多租户的情况。我们的情况是内部工具插件是由没有将表合并到工具数据库中的开发人员隔离开发的。

2
tempdb位置损坏,无法恢复
犯了一个错误,并为tempdb输入了一个alter database命令。 现在该实例将无法启动。我无法使用-m在单用户模式下启动,因为它指出找不到tempdb。我尝试使用: net start msqsqlserver /f /t3608 但是,我实际上根本无法使用sqlcmd或连接到实例ssms。

1
UserDB选择结果的特定TempDB插入将SOS_SCHEDULER_YIELD中的结果转换为ENCRYPTION_SCAN
我们的其中一个生产系统出现了一个问题,即从我们的用户数据库向临时表插入一条插入语句。当我注释掉插入/选择时,有问题的存储过程会及时运行,因此我对问题的隔离很有信心。 当我取消注释有问题的插入/选择时,调用的一系列存储过程基本上停止了。在tempdb或我们的任何用户数据库中,我看不到“按年龄划分的热门交易”中的任何内容。当数据库处于“静止”状态时,我看不到活动监视器中有任何偏离活动监视器信息的东西,除了CPU的平坦度约为20%。 行为如下:当我设置然后执行重现情况时,到达有问题的插入/选择时,我看到一个SOS_SCHEDULER_YIELD并有一个ENCRYPTION_SCAN。大约五个小时后,我将看到对存储过程的处理恢复并且该活动将完成(我在每个不同的操作周围放入了快速且肮脏的日志语句)。 我还用执行时的值替换了插入的选择部分中的变量,并运行选择查询本身,并在五秒钟内将其返回。 有问题的用户数据库的加密启用值为FALSE,tempdb也是如此。有问题的操作发生在大约65k行数据上,我仅用1k行进行了尝试,并且这种行为仍然存在,尽管花费的时间要少得多。 单个用户数据库是此行为的唯一实例。我已经通过该用户数据库的备份在本地复制了它。我们还有大约70个该软件的其他用户没有出现此问题。 鉴于上述信息,我的问题是,为什么我们的存储过程停止处理?由于可能希望获得一个准确的答案,因此调试此错误的正确步骤是什么?DMV之一中可能有某些东西,例如dm_tran_locks,dm_exec_requests,dm_tran_database_transactions,dm_os_schedulers,dm_exec_sessions,尽管它们为我提供了一些信息,但我并没有以指向解决方案的方式来解释或理解输出。 以下是有问题的插入/选择: INSERT INTO #TS_EVENT_DATA ( EVENT_FK, EVENT_TYPE_CR_FK, EVENT_ENTITY_CLASS_CR_FK, userDatabase_ID, DATA_NAME_FK, IMPORT_JOB_FK, PRODUCT_STRUCTURE_FK, ORG_ENTITY_STRUCTURE_FK, ENTITY_CLASS_CR_FK, ENTITY_DATA_NAME_FK, ENTITY_STRUCTURE_FK, DATA_SET_FK, DATA_TYPE_CR_FK, ORG_IND, TABLE_NAME, NET_VALUE1_NEW, NET_VALUE2_NEW, NET_VALUE3_NEW, NET_VALUE4_NEW, NET_VALUE5_NEW, NET_VALUE6_NEW, NET_VALUE1_CUR, NET_VALUE2_CUR, NET_VALUE3_CUR, NET_VALUE4_CUR, NET_VALUE5_CUR, NET_VALUE6_CUR, PERCENT_CHANGE1, PERCENT_CHANGE2, PERCENT_CHANGE3, PERCENT_CHANGE4, PERCENT_CHANGE5, PERCENT_CHANGE6, VALUE_UOM_CODE_FK, ASSOC_UOM_CODE_FK, VALUES_SHEET_NAME, UOM_CONVERSION_FACTOR, END_DATE_CUR, …

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.