ORA-01704
报错信息:ORA-01704: 字符串文字太长
报错原因:oracle clob字段插入超过4000个字符串时会报这个错。
解决办法:把要插入的长字符串分割成多个,使用to_clob函数后拼接起来。
例如:1
insert into t_mail_send(mail_addr, content) values('xxx@abc.com', to_clob('内容1')||to_clob('内容2')||to_clob('内容n'));
ORA-01843
在用PL/SQL Developer 的命令行窗口导入数据时报错:ORA-01843: not a valid month
原因:导入的日期时间字段格式和客户端会话中使用的格式不一样。比如导入的是中文格式,客户端默认的是英文格式。
解决办法:修改nls_date_language参数为中文。
在命令行窗口执行:1
ALTER SESSION SET nls_date_language='SIMPLIFIED CHINESE';
注:该命令只是当前会话有用。
ORA-01688
往Oracle数据库insert或imdmp导入数据时,报错:1
ORA-01688: unable to extend table 表名 partition 表空间名(分区名) by 8192 in tablespace COLLECT_SPACE
报错原因:表空间不足了,在网上搜了一下出现这种表空间不足的问题一般有两种情况:一种是表空间的自动扩展功能没有打开;另一种确实是表空间确实不够用了,已经达到了扩展的极限。所以我们解决问题就应该先去查看Oracle表空间大小,然后看一下Oracle表空间的自动扩展功能是否打开;若确实是表空间不够用了就需要扩展表空间。
解决办法:
如果是表空间文件达到最大值了,则需要增加一个数据文件:1
alter tablespace 表空间名称 add datafile '全路径的数据文件名称' size 8M autoextend on
ORA-16000
错误日志如下:1
2
3
4
5### Cause: java.sql.SQLException: ORA-04045: errors during recompilation/revalidation of PAYADMHD.PPDT_VIEW
ORA-16000: database open for read-only access
bad SQL grammar []; nested exception is java.sql.SQLException: ORA-04045: errors during recompilation/revalidation of PAYADMHD.PPDT_VIEW
ORA-16000: database open for read-only access
报错原因:看日志的字面意思是只读权限的问题,但实际上并不是登陆的帐号权限不够。而是因为表字段有修改,和该表有关的视图需要重新编译。
解决方案:在主库上重新执行视图编译的sql。
ORA-14450
当修改某个表的字段长度时,报错:1
2
3ORA-14450: attempt to access a transactional temp table already in use
-- 翻译过来是:试图访问已经在使用的事务处理临时表
报错原因:修改的表,还在被某个session占用,即该表正在某个会话中进行事务操作,还没有commit。
解决方案:
最简单的方式是等待会话的事务提交。
另一种方式是直接kill掉那些访问了事务处理临时表的会话。具体操作过程如下:
找到TEMP_TB的object_id:
1
SELECT * FROM DBA_OBJECTS WHERE OBJECT_NAME='TEMP_TB'; -- 假定object_id为12345
通过上一步得到的object_id获取所有session,并直接生成kill语句:
1
2
3SELECT 'ALTER SYSTEM KILL SESSION '''||SID||','||SERIAL#||''';'
FROM V$SESSION
WHERE SID IN(SELECT SID FROM V$ENQUEUE_LOCK T WHERE T.TYPE='TO' AND ID1='12345'); -- 12345 为上一步获取的 object_id执行第三部生成的SQL语句:
1
2--执行生成后的SQL语句解除死锁
alter system kill session '*******';