前段时间,我将测试环境的数据导入到开发数据库后,发现开发环境数据库的数据量太大(千万级别),应用在开发环境(因开发数据库的性能远比不上测试数据库的性能)太慢甚至出现有些功能没法正常使用的问题,于是又急需将开发数据库中的数据删除至百万以下级别。
可问题来了:千万级别数据量的表用delete肯定不合适,因为数据量太大,于是想到truncate。但在truncate过程中发生了ORA-02266错误,这个是我要重点小结的。
先说我的整个思路:
1.建表结构和原来一模一样的表,将想要的数据备份在此表中,语法如下所示:
create table temp_tableName as select * from tableName where code like 'XXX%'; insert into temp_tableName select * from tableName where code like 'YYY%' or code like 'ZZZ%' or code like 'TTT%';
2.truncate清除数据
由于表之间存在主外链关联关系,所以必须先将有外链关联的主键对应的表先truncate掉
3.恢复数据
insert into tableName select * from temp_tableName where condition = 'KKK';
truncate过程中发生ORA-02266错误:
truncate table tableName;
报如下错误:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
解决办法:
1.失效主键
alter table tableName disable primary key cascade;
2.truncate表数据
truncate table tableName;
3.恢复主键
alter table tableName enable primary key;
相关推荐
ORA-01654处理表空间不足问题 Oracle 数据库中,表空间不足是非常常见的问题,主要体现在两个方面:一是原表空间大小不够,二是表空间自动扩展功能未开启。今天我们就来详细讨论如何解决ORA-01654处理表空间不足...
在Oracle数据库管理中,"ORA-00990: 权限缺失或无效"是一个常见的错误代码,它表示用户尝试执行的操作没有足够的权限。这个错误通常发生在试图访问、修改或者管理数据库对象(如表、视图、索引等)时。在本篇文章中...
1,对其它用户下的表执行trundate ...SQL> create table Z_TRUNCATE_T(ID number); Table created. SQL> insert into Z_TRUNCATE_T select 1 from dual; 1 row created. SQL> commit; Commit complete. SQL> select
例如,`TRUNCATE TABLE table_name WHERE condition`(实际语法不允许,但可以先`DELETE`后`TRUNCATE`)。此外,`DELETE`命令可以用来删除满足特定条件的数据行。 4. **查看表空间使用情况**: 表空间是Oracle存储...
当DBA或其他用户具有足够的权限时,可能会因为输入错误等原因执行`DROP TABLE`或`TRUNCATE TABLE`命令,导致重要的数据表被意外删除或清空。例如,用户原本打算删除名为`A`的表(`DROP TABLE A CASCADE CONSTRAINTS;`...
1. 错误提示ORA-02292表明违反了外键约束。在本例中,尝试将department_id从60更改为300,但60号部门下有员工,这违反了HR.EMP_DEPT_FK这个外键约束,因为员工与部门之间存在关联,不能随意更改部门编号。答案是C。 ...
不小心Truncate表的事情也是有的, 其中大部份时因为工具连错了库, 从儿跑错了角本. 遇到这种事情而没有备份时怎么办呢? 首先要停止数据库, 将这个表所在的表空间的文件拷贝出来, 因为Oracle在Truncate只时将相应...
例如,为了避免ORA-01555错误(快照过旧),可以指定使用的回滚段大小: ```sql SET TRANSACTION USE ROLLBACK SEGMENT roll_abc; DELETE FROM table_name WHERE condition; COMMIT; ``` 这里,`roll_abc`指定了...
在执行大事务时,可能会出现 ORA-01555 错误,解决方法是指定一个足够大的回滚段。例如: SET TRANSACTION USE ROLLBACK SEGMENT roll_abc; DELETE FROM table_name WHERE ...; COMMIT; 7. 数据库重建应注意的问题...
其中`roll_abc`是指定的回滚段名称,这样可以在删除操作和提交之间使用特定的回滚段,从而避免ORA-01555错误的发生。 #### 7. 数据导入时的注意事项 - 在使用`IMP`命令导入数据时,可能会出现数据表结构不一致...
这会引发 `ORA-00001: 违反唯一约束条件` 错误,因为新的 `EMPNO` 值已经存在于表中。 接下来是数据的删除操作。`DELETE` 语句用于从表中移除特定的行。例如,删除 `ENAME` 为 `'ATG'` 的记录,可以这样写: ```...
ORA-01555 错误的应对方法?具体的出错信息是 snapshot too old within rollback seg,通常可以通过增大 rollback seg 来解决问题。当然也需要察看一下具体造成错误的 SQL 文本。 ORACLE_BASE 和 ORACLE_HOME ...
#### 十四、解决ORA-01555错误 **19. 解决ORA-01555错误** - **ORA-01555**:表示“快照太旧”错误。 - 解决方案包括增大`ROLLBACK SEGMENT`大小,同时审查导致错误的具体SQL语句。 #### 十五、$ORACLE_HOME与$...
segment 的区别、检查表结构、错误日志查看、truncate 和 delete 命令的差异、索引的理由、STAR SCHEMA 中的表、相关约束、归档和非归档模式、备份控制文件、数据库正常启动状态、视图、explain plan、buffer cache ...
当执行大量数据修改操作时,如批量删除,可能会遇到ORA-01555错误,这是由于事务快照过小导致的。通过设置事务使用特定的回滚段,可以避免此类问题: ```sql SET TRANSACTION USER ROLLBACKSEGMENT roll_abc; ...
在执行 Connect By 语句时,如果出现循环关系,系统将抛出 ORA-01436 错误。可以使用 NOCYCLE 语句来避免循环关系。 查询命令:select CONNECT_BY_ISCYCLE, dirindex, fatherindex, RPAD(' ',2*(LEVEL-1)) || ...
ORA-01555错误通常意味着回滚段中的快照过旧。解决方法通常是通过增加回滚段的大小来处理。同时需要检查造成错误的具体SQL文本。 19. $ORACLE_HOME与$ORACLE_BASE的区别 $ORACLE_BASE是Oracle软件的根目录,而$...
- **ORA-01555**:出现“Snapshot too old”错误,通常可以通过增大Rollback Segment的大小来解决。 - **检查SQL语句**:同时检查导致此错误的具体SQL语句,优化查询或事务管理策略。 #### 二十、$ORACLE_HOME与$...
ORA-01555错误通常发生在尝试访问过期的快照数据时。解决方法包括: - 扩大回滚段大小。 - 调整事务保留策略,确保数据的一致性。 #### 20. Oracle 安装目录 - **$ORACLE_HOME**:指定Oracle产品的安装目录。 - *...
- `ORA-01555`错误通常是由于快照过旧导致的,解决方法包括增加回滚段的大小、优化SQL语句等。 ### 18. ORACLE_HOME 和 ORACLE_BASE - `ORACLE_BASE`是指Oracle产品的根目录,通常包含多个版本的Oracle产品。 - `...