如何在 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 函数不起作用