Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有事务日志的情况下运行oracle proc?_Oracle - Fatal编程技术网

如何在没有事务日志的情况下运行oracle proc?

如何在没有事务日志的情况下运行oracle proc?,oracle,Oracle,在Oracle中,当我们有一个删除大量数据的过程时,我猜它会更新“事务日志”。当我们提交时,日志被清除 但是如果有大量的删除操作,日志将变满。有没有办法在不记录日志的情况下运行进程?您试图解决的问题是什么?我猜您关心的是性能,但您说问题是日志将变满,这可能表明您在过程中遇到了一些错误 表中有多少部分数据被删除 如果要从表中删除所有数据,可以改为执行截断 是将从表中删除所有数据的DDL语句。由于它是DDL,无法回滚,因此生成的重做和撤消非常少Oracle有单独的重做和撤消功能,而SQL Serve

在Oracle中,当我们有一个删除大量数据的过程时,我猜它会更新“事务日志”。当我们提交时,日志被清除


但是如果有大量的删除操作,日志将变满。有没有办法在不记录日志的情况下运行进程?

您试图解决的问题是什么?我猜您关心的是性能,但您说问题是日志将变满,这可能表明您在过程中遇到了一些错误

表中有多少部分数据被删除

如果要从表中删除所有数据,可以改为执行截断

是将从表中删除所有数据的DDL语句。由于它是DDL,无法回滚,因此生成的重做和撤消非常少Oracle有单独的重做和撤消功能,而SQL Server将两者放在同一事务日志中

如果要从表中删除大部分数据,则删除

INSERT /*+ APPEND */ INTO staging_table( column_list )
  SELECT column_list
    FROM table_name
   WHERE <<criteria for the data to save>>

TRUNCATE TABLE table_name;

INSERT /*+ APPEND */ INTO table_name( column_list )
  SELECT column_list
    FROM staging_table
删除旧表并将临时表重命名为旧表名可能更有效,但这可能需要重新创建许多约束和索引


如果您经常做一些事情,比如归档较旧的数据,另一种可能是按某个日期列对表进行分区,并定期删除最旧的分区。这也是非常有效的,但它确实需要分区选项,这是企业版许可证之上的一个额外成本选项。

您试图解决的问题是什么?我猜您关心的是性能,但您说问题是日志将变满,这可能表明您在过程中遇到了一些错误

表中有多少部分数据被删除

如果要从表中删除所有数据,可以改为执行截断

是将从表中删除所有数据的DDL语句。由于它是DDL,无法回滚,因此生成的重做和撤消非常少Oracle有单独的重做和撤消功能,而SQL Server将两者放在同一事务日志中

如果要从表中删除大部分数据,则删除

INSERT /*+ APPEND */ INTO staging_table( column_list )
  SELECT column_list
    FROM table_name
   WHERE <<criteria for the data to save>>

TRUNCATE TABLE table_name;

INSERT /*+ APPEND */ INTO table_name( column_list )
  SELECT column_list
    FROM staging_table
删除旧表并将临时表重命名为旧表名可能更有效,但这可能需要重新创建许多约束和索引


如果您经常做一些事情,比如归档较旧的数据,另一种可能是按某个日期列对表进行分区,并定期删除最旧的分区。这也是非常有效的,但它确实需要分区选项,这是enterprise edition许可证之上的一个额外成本选项。

事务日志在oracle中称为重做日志。如果更改不会写入重做日志,您将无法恢复。某些操作(如数据加载或索引生成)可以标记为不可恢复

日志将变满的说法是错误的。重做日志使用一个文件环。一旦最后一个被填满,它就会再次开始写第一个。如果启用了存档,则在覆盖文件之前会将文件复制到存档目标。可能的情况是,重做日志的切换必须等待归档完成,或者归档目标中没有空间。因此,正确的解决方案是正确调整重做日志的大小。这包括重做日志组的数量


以前使用truncate的解决方案不起作用,因为涉及多个表。

事务日志在oracle中称为重做日志。如果更改不会写入重做日志,您将无法恢复。某些操作(如数据加载或索引生成)可以标记为不可恢复

日志将变满的说法是错误的。重做日志使用一个文件环。一旦最后一个被填满,它就会再次开始写第一个。如果启用了存档,则在覆盖文件之前会将文件复制到存档目标。可能的情况是,重做日志的切换必须等待归档完成,或者归档目标中没有空间。因此,正确的解决方案是正确调整重做日志的大小。这包括重做日志组的数量


以前使用truncate的解决方案不起作用,因为涉及多个表。

是从一个表中删除所有数据,还是从一组特定的数据中删除?它是影响单个表还是多个表?如果有多个表,表之间是否存在依赖关系?是。它从多个具有相互依赖关系的表中选择数据,并删除与删除条件匹配的数据。它是从一个表或一组特定的数据中删除所有数据?它是影响单个表还是多个表?如果有许多表,表之间是否存在依赖关系?是..选择它 从具有相互依赖性的多个表中删除数据,并删除与删除条件匹配的数据