数据库管理员

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


2
交易,参考资料以及如何执行双重记账?(PG)
两次入境簿记是 一套用于在财务会计系统中记录财务信息的规则,其中每个交易或事件都会更改至少两个不同的名义分类帐。 帐户可以是“借方”或“贷方”,所有贷方的总和必须等于所有借方的总和。 您将如何在Postgres数据库中实现这一点?指定以下DDL: CREATE TABLE accounts( account_id serial NOT NULL PRIMARY KEY, account_name varchar(64) NOT NULL ); CREATE TABLE transactions( transaction_id serial NOT NULL PRIMARY KEY, transaction_date date NOT NULL ); CREATE TABLE transactions_details( id serial8 NOT NULL PRIMARY KEY, transaction_id integer NOT NULL REFERENCES transactions (transaction_id) ON UPDATE …

2
Oracle 11g:插入的性能改进
我有一个5亿行的表格(并且还在不断增长) 我做了以下事情来提高插入的性能: 在数据库方面: 删除所有索引和约束 禁用日志记录 在应用程序方面: 从JPA管理的实体切换到本机插入查询,向查询添加了APPEND Oracle提示 尝试每1k / 2k / 3k行批量提交 尝试并行写入(多线程,线程数=服务器上的核心数)到一张表 这使我每秒大约300行 另外尝试: 批量并行写入多个表(使用UNION分组然后返回结果) 这使我每秒大约有1000行,但在空表上。但是,当我用虚拟数据(每个200百万个)填充表时,插入速度下降到每秒250-300个。 有人可以建议我做些什么来加快插入速度吗?基本上,我想首先了解瓶颈(可能是什么)。 UPD: 表格按插入日期进行分区,表格约有60列-大多数列为VARCHAR2(2000 BYTE)
8 java  oracle 

2
生成脚本以自动重命名默认约束
背景:某些默认的列约束是在没有显式名称的情况下生成的,因此我们得到的有趣的名称因服务器而异,例如: DF__User__TimeZoneIn__5C4D869D 我希望使用一致的命名方式来管理它们,DF_Users_TimeZoneInfo以便我们可以确保将来的目标表上存在适当的约束(例如在RedGate比较中,甚至只是在视觉上) 我有一个脚本,该脚本通常可以满足我的需求: select 'sp_rename N''[' + s.name + '].[' + d.name + ']'', N''[DF_' + t.name + '_' + c.name + ']'', ''OBJECT'';' from sys.tables t join sys.default_constraints d on d.parent_object_id = t.object_id join sys.columns c on c.object_id = t.object_id and c.column_id = d.parent_column_id join sys.schemas s on …

7
从MS Access编程移至SQL Server时的主要注意事项
我是100%自学的MS Access程序员(我的主要工作是编程),我现在正在建立更大的数据库;仍然使用MS Access作为UI,但使用SQL Server存储所有数据并完成更多的“工作”。 本质上,我的问题是;使用Access时,我可能不需要了解或需要了解哪些SQL Server主题? 不想让您告诉我如何做任何事情,更不要说您认为我应该进行研究的最重要的事情-有很多主题,而且涉及很多细节,不想长时间找自己沿着一条不太有价值的路走下去... 脑力激荡: 维护:最重要的是什么(检查数据库,缩减数据库,更新统计信息,重建等) 索引-我不太了解,是否有一本好书/博客等可以教我基础知识? 我错过的任何其他事情(可能很多,正如我所说的,我是SQL Server的新手...) 如果有帮助,我可以为中型零售商工作,而我主要从事的数据库工作包括 报告平台(从主系统汇总销售/收据/库存等,并提供快速报告) 第三方与我们的商店通过寄存器进行存储之间的协调工具(从第三方导入数据并交叉引用交易日志) 存储所有与促销有关的数据;产品,价格,预测,实际结果等

3
由于内存配置错误(ORA-00837)无法启动Oracle(11g1)
我决定减少本地开发人员实例的内存分配,并被告知以下命令可以完成此工作; alter system set memory_max_target = 512M scope = spfile; 我猜是这样,因为我不再可以启动所讨论的Oracle实例。这是我尝试以非DBA用户身份连接时遇到的错误; ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist 当以SYSDBA身份连接时,我得到以下信息; Connected to an inactive instance. SQL>startup nomount; ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET SQL>alter system set memory_max_target = 2G scope = spfile; ORA-01034: ORACLE not …


6
SQL Server处于混乱状态:数据库是否存在?
遇到了一个非常奇怪,令人讨厌的问题。。以某种方式在我们的服务器上运行的SQL Server 2008 R2实例已损坏。 首先,我们注意到昨天创建的数据库丢失了。因此,我们环顾四周,发现它仍然在那里,但是与众不同。因此,我们尝试附加mdf,但收到一条类似于的消息The file is currently in use。 我认为这很奇怪,所以重新启动了SQL Server。同样的事情……好吧,是时候采取严厉措施了……于是,我停止了服务,压缩了mdf,启动了服务,解压缩了它,然后试图恢复它。上面的消息不见了,但是我得到了: 无法附加与现有数据库同名的数据库 哎哟。当然它没有显示在数据库浏览器中,所以不知道发生了什么...不得已: DROP DATABASE [DatabaseName] 当然那没用..这告诉我数据库不存在。因此,我陷入了困境……SQL Server一方面认为数据库确实存在,而另一方面它认为db不存在..显然,它处于混乱状态。 有没有人见过这个?对如何解决有任何想法?

1
SQL Server 2008 R2高缓冲区I / O原因
我正在尝试对我们的文档管理服务器具有的SQL Server的性能进行故障排除,而今天的性能一直处于历史最低水平。 查看我最近设置的管理数据仓库(MDW),我可以看到缓冲区I / O急剧增加。组合的SQL等待时间在1500-2000毫秒的范围内,这比正常时间(大约500毫秒)要高得多。这种增加的很大一部分是缓冲区I / O。 我不是一名DBA,而是出于必要而这样做,我深深地陷入了深度。 有什么办法可以说明为什么缓冲区I / O大大增加了?这是否可能是由于查询提取大量数据或SQL Server内存限制的配置不正确?有什么我应该关注的特定问题(或一般性问题)或可以查询以帮助解决问题的DMV? 该服务器是SQL Server 2008 R2。它是一个运行两个vCPU和8GB RAM的VM,其磁盘托管在SAN的单独阵列上。 上面的图形都是使用SQL Server 管理数据仓库生成的。

1
组织具有大量RAM的SQL Server的策略
现在,我们有一个用于数据库的新服务器,除其他外,我们还有128GB的可用RAM(之前我有16GB)。我知道SQL Server非常擅长管理它的资源,但是我想知道在服务器/数据库设置或处理代码(存储的procs /索引等)中是否应该使用任何特殊设置或策略来确保SS采用可用ram的最大优势。 该数据库约为70GB,它是一个非事务性数据库(它是一个数据仓库)。因此,基本的大写操作然后再进行大量读操作是正常的事情。

1
是否有Postgres管理员GUI可以执行包含多个sql文件的主文件
我正在编写一个很长的脚本。我想将脚本分解为更小,更易于管理的脚本,并将每个sql文件包含在主文件中,然后仅执行主文件。 例: master.sql 内容(我不知道使用的语法): file1.sql file2.sql file3.sql 我已经找到了一些有关psql -f在命令行中使用并\i包含这些文件的教程,但是这里的首选是避免终端,并使用GUI来管理我的数据库并执行master.sql脚本。 在任何postgres管理GUI中都可以吗?大概不在 pgAdmin中。

3
当一个表需要太多的外键时,有什么选择呢?
我们有一个基本表,用于定义零件并保存零件号,描述,价格,重量等信息。我们还有大约400个表,这些表引用该基本表并根据零件的类型/类别提供有关零件的其他信息。 我们从使用外键约束开始,以便如果在400个特定于零件的表之一中引用了某个零件,则不能从基表中删除该零件,但是我们很快就达到了SQL Server 2005推荐的最大253个外键。 在这种情况下,是否可以使用外键替代方案来确保数据完整性?访问数据时我们还没有看到性能问题,但是由于查询计划太复杂,更新基表中的现有零件将失败。

2
此数据的最佳关系数据库结构
我正在为以下情况创建数据库方案: 有用户 用户具有角色(例如“开发人员”或“ CEO”) 角色具有应用程序(例如“ Topdesk”) 应用程序具有权限(例如“更新知识库”) 如果角色已经可以访问应用程序,则该角色可以具有权限 假设没有高性能环境(无需针对速度进行优化),那么实现此架构的最佳方法是什么?数据库环境可以是MySQL,MSSQL ...更多是关于关系数据库的设计。 我本人提出以下建议: 我最不确定的部分当然是Applications_Permissions_Roles表。它是另一个链接表之上的链接表。我以前从未使用过或看过。做到这一点的另一种方法是将其替换为“角色”和“权限”之间的链接表,然后使用代码或约束来确保所需的关系...但这对我来说似乎不是一个好的解决方案。这些事情应该在数据库级别(如果可能)上强制执行,而不是在代码级别上强制执行。 其次,是否需要Permissions.Application和Applications.Id之间的链接?我之所以使用它,是因为Roles_Applications中可能没有任何行(例如,当您刚刚添加了新应用程序时),因此无法确定哪些权限属于哪个应用程序。它也是查阅权限所属于的应用程序的单一参考点。我想这是对的,但它在数据库设计中也有影响。尝试将ON_DELETE或ON_UPDATE设置为级联时,会出现MSSQL错误。 有什么建议,或者这是应该怎么做的?也欢迎任何其他有关命名约定的建议(例如作为评论)。 谢谢, 卢克 编辑:更改标题,希望使其更清晰。前一个比较全面,但可能太复杂了。

2
在SSIS 2012中,将程序包标记为“入口点”程序包的目的是什么
在Visual Studio设计器中,您可以右键单击SSIS包,并将其指定为“入口点”包” 进行搜索时,我在MSDN上找到了该页面,该页面指出: 值1表示该程序包旨在直接启动。值为0表示该软件包将由具有Execute Package任务的另一个软件包启动。预设值是1。 启用和禁用此标志后,我已经能够直接执行包。 启用或禁用此标志的目的是什么?仅仅是记录您自己的SSIS软件包的意图,还是启用或禁用SQL Server / SSIS时其行为有所不同?


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.