如何在 UNIX 批处理作业中将备份作为来自 oracle select 语句的插入查询?

Posted

技术标签:

【中文标题】如何在 UNIX 批处理作业中将备份作为来自 oracle select 语句的插入查询?【英文标题】:How to take backup as insert queries from oracle select statement inside UNIX batch job? 【发布时间】:2020-03-10 10:11:34 【问题描述】:

我编写了一个 UNIX 批处理作业,它使用一些“where”条件更新表。在更新这些记录之前,我需要对使用“where 条件”返回的记录进行备份(插入语句)并将其存储在“.dat”文件中。你能帮忙吗???

【问题讨论】:

这似乎是一种非常复杂的备份方式。您如何建议使用insert 回滚update?如果您不信任您的批处理作业take a proper backup。 可以使用spool命令导出数据docs.oracle.com/database/121/SQPUG/ch_twelve043.htm#SQPUG126 APC,在更新之前使用与选择查询相同的条件并希望从中获取插入脚本 您如何设想使用“插入”脚本?您已经说明了您“想要”做什么——您对某些业务问题的首选技术解决方案,但您没有说明您拒绝不同方法的原因。如果您只是想要一种将表恢复到“更新前”状态的方法,我只需创建一个备份表 - 'create mytable_bkup as select * from mytable', 【参考方案1】:

创建表备份的最直接方法是使用 create table 语句,该语句使用更新语句的 where 条件。例如,我们以更新语句为例:

UPDATE sometable
SET field1 = 'value'
WHERE company = 'Oracle'

此更新将更新公司名称为 Oracle 的每一行的 field1 列。您可以通过发出以下命令来创建sometable 的备份:

CREATE TABLE sometable_backup AS (SELECT * FROM sometable WHERE company = 'Oracle');

这将创建一个名为sometable_backup 的表,其中将包含与更新的 where 子句匹配的所有行。

然后,您可以使用 Data Pump 或其他实用程序来创建该特定表的导出 .dat 文件。您可以使用该 .dat 文件导入其他数据库。

【讨论】:

非常感谢您的回复。但我想知道是否有任何可能的方法通过 UNIX 批处理作业获取插入脚本???? 是的,你可以。但是,为什么需要将这些插入语句存储为 .dat 文件?这就是为什么有很多cmets问你为什么要那样做。您可以轻松地使用 SQL Developer 之类的程序使用查询中的提示生成插入(请参阅dba.stackexchange.com/questions/173540/…),或者您可以运行 select 并将数据集从 SQL Developer 导出为插入(请参阅***.com/a/26159765/979604),但是.dat 文件部分令人困惑 - 通常插入脚本是 .sql 文件。

以上是关于如何在 UNIX 批处理作业中将备份作为来自 oracle select 语句的插入查询?的主要内容,如果未能解决你的问题,请参考以下文章

在 msxsl 中将节点作为参数传递:来自 XSLT for-each 的脚本 javascript 函数不起作用

如何在 Spring 数据流服务器中将包含 10 个 Spring 批处理作业的应用程序拆分为 10 个任务?

在批处理作业中创建文件名作为时间戳

SGE作业调度系统的简单理解

在批处理脚本中将变量字符串作为命令运行[关闭]

使用 Spring Boot 服务作为批处理作业中的依赖项的空指针异常