我最近与一位同事进行了讨论,他正在推动从生产查询中删除 order by 子句,因为order by 列与主键相同。
经过长时间的讨论,我试图解释他不能保证基于主键的排序,最后的结论是他不会推动更改 MSSQL 查询。
但他仍打算更改 DB2 查询。
我无法立即找到反驳 DB2 按主键排序查询的文章,目前我想知道它是否确实如此。
所以我的问题是,如果没有 order by 子句,DB2 如何对查询进行排序?它使用主键吗?
在并行系统中,如果没有 order by 子句,如何保证数据按顺序正确输出?
有人可以告诉下面明显的查询有什么问题:
db2 => select next value for schema_name.sequence_name;
Run Code Online (Sandbox Code Playgroud)
结果我得到:
SQL0104N An unexpected token "END-OF-STATEMENT" was found following
"schema_name.sequence_name". Expected tokens may include: "<table_expr>".
SQLSTATE=42601
Run Code Online (Sandbox Code Playgroud) 我在stackoverflow上发布了相同的内容(请告诉我是否必须删除一个)。
我正在处理 DB2 数据库,据我所知,不支持正则表达式(没有其他库)。
因此,我无法实现类似于本文“将正则表达式匹配的强大功能引入 SQL ”中所解释的内容
你知道我是否可以用 SQL 语句“模拟”这样的正则表达式吗?
^a[aofdmep]{1}[az]{1}[a-z0-9]{4}[sidbfkfpo]{1}
编辑
在上述假设中,我发现WHERE Like 谓词对我来说是可以接受的:
WHERE USER_NAME 不喜欢“a___”
但这是不安全的,并且不涵盖我没有可以匹配的固定字符的其他情况。
我们的 DB2 身份验证与活动目录集成,因此允许的密码由其策略控制。我们有一些用户无法通过命令编辑器或控制中心的查询屏幕连接到数据库。错误如下:
SQL0104N 意外标记“!” 被发现在“”之后。 预期的令牌可能包括:“新”。 SQLSTATE:42601 sqlcode:-104
只要在连接语句中不包含密码,它们就可以通过命令行处理器进行连接。
问题是影响密码中包含一些特殊字符的所有用户。我们让他们尝试在命令编辑器中发出没有密码的 connect 语句,但它不起作用。
数据库的确切版本是 DB2/AIX64 9.5.4
有没有办法让他们使用这个工具而不是让他们更改密码?
谢谢
我总是将 MySQL 或 PostgreSQL 用于我的项目,例如 Web/桌面应用程序。我有几次数据丢失,多亏了旧备份,我总是能正常运行。
但是对于机场最近的一个项目,我必须使用一些永远不会丢失数据的东西,至少在电路通电之前不会丢失数据库。
所以我认为 DB2 应该最适合这种风险较小的任务?任何想法或提示。
提前致谢。
在 DB2 for MySQL(或 PostgreSQL)中是否有等价物:
DROP TABLE IF EXISTS sometable;
我相信我了解受防护和不受防护的存储过程背后的原因。
在数据库(在我们的例子中是 DB2)的“外部”运行,以防止在出现指针等问题时数据库引擎可能损坏。
Unfenced 在数据库“内部”运行,这意味着性能更好。
根据我的研究,SQL PL 总是基本上不受限制,因为它是 SQL,因此不能像编程语言那样访问内存。
C/C++ 和 Java 过程可以在受保护或不受保护的情况下运行。但是由于它们可能会访问内存,因此应该考虑将它们围起来运行,除非可以确定代码的质量不会崩溃并且需要性能。
首先,我对上述内容的理解是否正确?
其次,从所有存储过程(甚至定义为 SQL PL 的存储过程)开始,通常是最佳实践吗?
存储过程的任何其他最佳实践,尤其是与防护和/或安全相关的?
编辑:进一步的研究表明 SQL PL 过程不能运行栅栏。由于它们不包含任何可能损害数据库引擎的代码,例如指针或文件 I/O,DB2 知道它们是安全的并在引擎内部运行它们(即,不受保护)。话虽如此,我仍在寻找有关所有其他存储过程的最佳实践。
我一直在尝试比较 SQL Server Express、Oracle XE 和 DB2 Express-C 的特性,但发现很难将所有差异集中到一个地方。尤其是当前的差异,因为这是一个不断变化的战场。任何人手头都有这些信息或知道跟踪此信息的人?尽我所知:
除了这些明显的措施,我还缺少什么?我知道我也可以使用开源,而且 MySQL 和 PostgreSQL 都是可行的解决方案,但为了争论,让我们将其限制为这 3 个选项。在我看来,DB2 是明显的赢家。
可以在此处找到有关此主题的另一篇文章。
我尝试使用以下命令备份 IBM DB2 (LUW) 数据库:
./db2 backup database DBEMP to /home/user1/db2bkup
Run Code Online (Sandbox Code Playgroud)
但我收到了这条消息:
SQL1035N 数据库当前正在使用中。SQLSTATE=57019
然后我尝试了这个:
./db2 backup database DBEMP online to /home/user1/db2bkup
Run Code Online (Sandbox Code Playgroud)
我收到了这条消息:
SQL2413N 不允许联机备份,因为数据库不可恢复或备份暂挂条件生效。
这是什么意思?有没有其他方法可以在线备份数据库?我无法停止数据库,因为它正在被使用。
我将在大约 5 周后开始一份新工作,并希望花一些私人时间来真正掌握尽可能多的 DB2 特性,因为它是新公司使用的 DB。
我是否需要对 DB 进行本地家庭安装,以便我可以使用它并尝试一些东西,或者是否有在线某个地方可以连接到公共沙箱 DB 以练习/测试/播放它?
如果需要安装,我会点击这个链接:https : //stackoverflow.com/questions/3289433/where-to-start-learning-db2-programming
谢谢,斯蒂芬
db2 ×10
oracle ×2
backup ×1
mysql ×1
order-by ×1
postgresql ×1
sequence ×1
sql-server ×1
tools ×1