标签: truncate

截断单个分区后,其主键的索引变得不可用,并且对该分区的所有插入/更新都失败

我有一个分区表:SAMPLE_PARTITIONED_TBL基于PERIOD_ID数字字段(数据集:201001...201212.. 等等)有 60 个分区(没有子分区)。该表有几个本地索引,但由于某种原因,问题出在 PK 索引上。我在另一个模式中有相同的 DDL,它在那里工作正常。不确定 tio 寻找什么来解决这个问题。

我正在使用 Informatica(ETL 工具)将数据加载到该表中。在加载之前,我们会截断分区表:

SQL> ALTER TABLE owner_name.SAMPLE_PARTITIONED_TBL 
   2 TRUNCATE PARTITION SMPL_201001 DROP STORAGE;
Run Code Online (Sandbox Code Playgroud)

当加载开始时,我收到以下错误:

Message: Database errors occurred: 
ORA-01502: index 'owner_name.SAMPLE_PARTITIONED_TBL_PK' or 
partition of such index is in unusable state
Run Code Online (Sandbox Code Playgroud)

查看索引的状态...

SQL> select STATUS from all_indexes
  2  where INDEX_NAME like 'SAMPLE_PARTITIONED_TBL_PK';

STATUS
--------
UNUSABLE
Run Code Online (Sandbox Code Playgroud)

现在在执行SQL> ALTER INDEX owner_name.SAMPLE_PARTITIONED_TBL_PK REBUILD;本地分区索引返回STATUS=VALID状态后,加载可以继续没有问题。


更新:

根据下面@Mat 的观察,我正在检查 PK 索引是否在本地分区:

SQL> select * from all_indexes where table_name = 'SAMPLE_PARTITIONED_TBL'; …
Run Code Online (Sandbox Code Playgroud)

index oracle-11g partitioning alter-table truncate

5
推荐指数
1
解决办法
2万
查看次数

“TRUNCATE 不运行 ON DELETE 触发器” true 或 false

我正在搜索为什么 TRUNCATE 被放置在 DDL 而不是 DML 中的主题,我在这里找到了以下答案 Why is truncate DDL?

我这个答案我发现了一个句子如下

“TRUNCATE 不运行 ON DELETE 触发器这一事实也使其与正常的 DML 操作区分开来”

这与MYSQL 参考手册相冲突,其中说

“如果 FOREIGN KEY 约束指定 DELETE CASCADE,则子(引用)表中的行将被删除,并且截断的表将变为空。”

我正处于一种迷茫的状态。请详细说明这个问题。

谢谢

mysql trigger truncate ddl mysql-5.0

5
推荐指数
1
解决办法
3950
查看次数

使用 DELETE 或 TRUNCATE 释放磁盘空间?

一个多星期前,我删除了 postgresql 表中的所有行(不是通过truncate,而是使用delete from ...)。Select count (*)显示表行现在为 0。

当我现在运行查询来查询磁盘空间时,我仍然看到该表占用了空间。具体来说,所有索引仍然存在并且正在占用空间。如何摆脱它们并释放磁盘空间?其次,当我摆脱了所有行时,为什么它们仍然留在首位?


以下是表格的详细说明,以防万一:

                                      Table "public.links_photoobjectsubscription"
     Column     |           Type           |                                 Modifiers                                  
----------------+--------------------------+----------------------------------------------------------------------------
 id             | integer                  | not null default nextval('links_photoobjectsubscription_id_seq'::regclass)
 viewer_id      | integer                  | not null
 updated_at     | timestamp with time zone | not null
 seen           | boolean                  | not null
 type_of_object | character varying(15)    | not null
 which_photo_id | integer                  | 
 which_link_id  | integer                  | 
 which_group_id | integer                  | 
 which_salat_id | integer                  | 
Indexes:
    "links_photoobjectsubscription_pkey" …
Run Code Online (Sandbox Code Playgroud)

postgresql delete truncate

5
推荐指数
1
解决办法
1万
查看次数

可以在 SQL Server 上重载 TRUNCATE TABLE 吗?

我知道这可能看起来像一个奇怪的问题......

我有一个第三方数据库和服务,我想通过在DML触发器对其进行监视INSERTUPDATE并且DELETE每个表的。

但是,唉,我在TRUNCATE TABLE被调用时遇到了问题,因为它没有激活DELETE触发器。

我正在寻找一种“重载”的方法TRUNCATE TABLE,例如:

DELETE FROM X; --remove all rows
TRUNCATE TABLE X; --truncate the empty table
Run Code Online (Sandbox Code Playgroud)

或者在截断之前激活一些 DDL 触发器,这样我就可以检查哪些行将被截断。

如果还有其他建议,我会很高兴。

这样的事情可能吗?

编辑

我不想禁用truncate我只想监视数据。

它是第 3 方数据库,并且被我无法控制的服务使用,因此我无法阻止truncate.

我只是想监视更改,目前无法跟踪由truncate命令引起的记录删除。

谢谢!

sql-server truncate

5
推荐指数
1
解决办法
1166
查看次数

Postgres中Drop表和Truncate表的速度差异

我目前有一个程序,通过创建临时表、填充表,然后将该数据合并到主表中来插入数据库。然后放下桌子并重新做一遍。我想知道如果我只是截断而不是删除和创建,速度差异是多少。

postgresql benchmark truncate drop-table

5
推荐指数
2
解决办法
9947
查看次数

截断表锁定系统视图

我们有一个Truncate Table在 Snapshot 事务中运行的 proc 。这似乎导致了一个LOCK_M_S阻塞 sys 视图的锁sys.partitions

有没有方便的解决方法?我喜欢不使用 truncate 发生的多余日志的效率,但不想锁定我的sys.partitions.

我很高兴应要求发布代码,但我很确定这是Truncate在 Snapshot 事务中的某种行为。我只是不知道。

sql-server truncate snapshot-isolation sql-server-2014

5
推荐指数
1
解决办法
277
查看次数

哪些因素会阻止和延迟 TRUNCATE 命令?

我有一个相当大的表,可能有 50M 行,我不得不截断它。通常 truncate 非常快,但在这种情况下需要几个小时才能完成。有哪些因素会导致truncate命令无法正常运行?

sql-server truncate

4
推荐指数
1
解决办法
1111
查看次数

当子表为空时截断 Oracle 中的父表

假设我有一个parent由子表引用的父表child。该表parent已填充但未填充child。试图截断parent结果

 ORA-02449: unique/primary keys in table referenced by foreign keys  
Run Code Online (Sandbox Code Playgroud)

有没有办法向child空的 DBMS 提示,以便不需要禁用外键约束?

oracle referential-integrity truncate

4
推荐指数
2
解决办法
2万
查看次数

交易日志很大!但是选择了简单的恢复模式!

我想知道:我们的 MS SQL Server 2012 上有一个数据库。恢复模式是“简单”的。

数据库本身大约有 2.7GB 大。我配置了 Trn-Log 的最大大小 (3GB)。

现在我用“重新组织索引任务”-->“更新统计”制定了一个维护计划。

奇怪的是,当我运行维护计划时,“简单”模式下的数据库日志会随着 3GB 的归档而增长,并且出现错误...

为什么即使在简单模式下也使用 Trn-Log?为什么 3 GB 似乎还不够?

sql-server truncate transaction-log

4
推荐指数
1
解决办法
2630
查看次数

哪个命令删除和释放空间

我正在阅读这98-364 exam本书,但有一个问题我无法完全回答:

“您将使用什么命令从 Contact 表中删除所有没有美国国家/地区的记录,同时释放这些记录使用的空间?”

如果“没有美国的国家”不在那里,那么它只是“截断命令”,因为它会清除该表中的所有数据,并释放空间。据我所知,删除命令不会释放空间,而且我找不到在针对特定记录的同时删除和释放空间的命令。

这本书在这里有错别字吗?或者有没有人知道的命令?

注意:它是“什么命令...”,而不是命令

编辑:(斯图尔特)这里有很多有用的答案,在我看来,这本书有些含糊不清。在“你会使用哪个命令”之外,如果考试中出现这种情况,“预期”答案是什么?我假设他们正在寻找“带有 where 子句的删除命令”。仅仅因为他们到目前为止,书中只建议了三种方法(删除/截断/删除)。

sql-server delete truncate

4
推荐指数
1
解决办法
771
查看次数