关于两个简单问题的分析(r9笔记第10天)
工作中碰到问题当然是见怪不怪了,而处理这些问题也是我们的价值所在。
今天处理了几个看起来比较有意思的小问题,当然究其原因,要不是不规范,要不就是基本功不够扎实。
问题1:奇怪的ORA-00600报错,常规的原因
对于ORA-00600的错误,其实自己也碰到过很多次了,绝大多数的情况下,这个错误还是能够反映出来一些不规范的现象。
比如今天得到了一个DDL语句,执行的时候有卡顿,然后直接抛出了ORA-00600的错误。
SQL> CREATE USER "KA_SYS" IDENTIFIED BY VALUES 'S:C4EA100810C8DE6923BCF6F2E2E
C8C0FA1BCE0CCB11EA7A6E8234845C424;5FEFDBD83ED3C188'
DEFAULT TABLESPACE "MIN_DATA"
TEMPORARY TABLESPACE "TEMP";
CREATE USER "KA_SYS" IDENTIFIED BY VALUES 'S:C4EA100810C8DE6923BCF6F2E2E
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kzsviver:4], [], [], [], [], [],
[], [], [], [], [], []
对于这个错误,自己顿时来了兴趣,不过自己一看,问题其实还是常规的问题,密码怎么串成两行了。这种情况下Oracle应该不知道该怎么处理了。
而进一步来分析,为什么DDL中的密码会串行,还是在生成语句的时候不够规范,我们完全可以格式化一下。
问题2:Switchover中跨存储的兼容问题
在之前分析Switchover的时候,有一个地方简单提了一句,就是备库的临时数据文件是可选的,在备库中如果不存在会尝试重建,如果因为配置原因,没有路径映射,则临时文件无法创建,这个也是一个潜在的问题。
今天在检查一个备库的时候,在open状态
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
但是查看数据库日志,却发现了下面的一段错误日志:
alert
File 1003 not verified due to error ORA-01157
Errors in file /U01/app/oracle/diag/rdbms/statdb29/statdb2/trace/statdb2_dbw0_57554.trc:
ORA-01186: file 1004 failed verification tests
ORA-01157: cannot identify/lock data file 1004 - see DBWR trace file
ORA-01110: data file 1004: '+DATA'
File 1004 not verified due to error ORA-01157
Errors in file /U01/app/oracle/diag/rdbms/statdb29/statdb2/trace/statdb2_dbw0_57554.trc:
ORA-01186: file 1005 failed verification tests
ORA-01157: cannot identify/lock data file 1005 - see DBWR trace file
ORA-01110: data file 1005: '+DATA'
可以根据错误信息得出,创建文件的时候,无法识别磁盘组而创建失败。根据更清晰的信息发现是在创建临时数据文件时抛错。
SQL> select file#,ts#,status,name from v$tempfile
FILE# TS# STATUS NAME
---------- ---------- ------- ------------------------------
1 3 ONLINE +DATA
2 3 ONLINE +DATA
3 3 ONLINE +DATA
4 3 ONLINE +DATA
查看数据字典发现临时文件指向了ASM磁盘组DATA,但是这个备库是文件系统,所以查询dba_temp_files会失败,因为文件压根不存在。
SQL> select file_name,bytes from dba_temp_files;
select file_name,bytes from dba_temp_files
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 1003 - see DBWR trace file
ORA-01110: data file 1003: '+DATA'
当然要在备库删除临时数据文件,下面的几种失败方式供参考:
SQL> drop tablespace temp including contents and datafiles;
drop tablespace temp including contents and datafiles
*
ERROR at line 1:
ORA-16000: database open for read-only access
SQL> drop tablespace temp;
drop tablespace temp
*
ERROR at line 1:
ORA-16000: database open for read-only access
重新创建一个临时表空间来。
SQL> create temporary tablespace TEMP2 TEMPFILE '/U01/app/oracle/oradata/statdb29/temp01.dbf' SIZE 30G;
create temporary tablespace TEMP2 TEMPFILE '/U01/app/oracle/oradata/statdb29/temp01.dbf' SIZE 30G
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-16000: database open for read-only access
当然重启到mount尝试肯定是不对的。为什么,姿势不对,正确的姿势为:
SQL> alter tablespace temp drop tempfile 3;
Tablespace altered.
继续删除其它的临时数据文件,直到最后一个会报错。
SQL> alter tablespace temp drop tempfile 7;
alter tablespace temp drop tempfile 7
*
ERROR at line 1:
ORA-03261: the tablespace TEMP has only one file
我们可以添加一个,继续删除错误的信息。
SQL> select file#,ts#,status,name from v$tempfile;
FILE# TS# STATUS NAME
---------- ---------- ------- ------------------------------
7 3 ONLINE +DATA
SQL> alter tablespace temp add tempfile '/U01/app/oracle/oradata/statdb29/temp01.dbf' size 30G;
Tablespace altered.
SQL> alter tablespace temp drop tempfile 7;
Tablespace altered.
如果仔细分析一下alert日志就会发现,其实前台虽然现实命令执行成功,但是后台的检查却抛出了ORA错误,当然我们需要了解这个分析的过程。
alter tablespace temp drop tempfile 5
Errors in file /U01/app/oracle/diag/rdbms/statdb29/statdb2/trace/statdb2_ora_58092.trc:
ORA-01122: database file 1005 failed verification check
ORA-01110: data file 1005: '+DATA'
ORA-01565: error in identifying file '+DATA'
ORA-17503: ksfdopn:2 Failed to open file +DATA
ORA-15045: ASM file name '+DATA' is not in reference form
Errors in file /U01/app/oracle/diag/rdbms/statdb29/statdb2/trace/statdb2_ora_58092.trc:
ORA-01258: unable to delete temporary file +DATA
Completed: alter tablespace temp drop tempfile 5
Wed May 25 18:15:11 2016
明白了这些,很多问题其实还是开始所说的,不够规范,基本功不够扎实。
- 微信更新为小程序引入游戏功能,朋友圈又刷屏了
- WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于WS-MEX的实现](提供模拟程序)
- Linux同步机制(二) - 条件变量,信号量,文件锁,栅栏
- WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模拟程序)
- zookeeper集群搭建
- WCF技术剖析之二十七: 如何将一个服务发布成WSDL[编程篇]
- 浅谈反馈式按钮的设计与实现
- 对比手游和PC游戏的发展,小程序会成为手游开发的热点?
- 雷军旗下金山云再获融资2.2亿美元
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[WS标准篇]
- zookeeper配置详解
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]
- zookeeper命令行(zkCli.sh&zkServer.sh)使用及四字命令
- [WCF的Binding模型]之三:信道监听器(Channel Listener)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Rust FFI 编程 - Rust导出共享库04
- 使用结构化的标头字段改善HTTP
- c语言直接读写ini配置文件
- Rust FFI 编程 - Rust导出共享库03
- 【crossbeam系列】2 crossbeam-epoch:基于epoch的无锁“垃圾收集”
- java调用JNI总结
- 【Rust日报】2020-07-30 fixed_vec减少Rust数组冗余边界检查
- 我的小工具,用C和python实现远程读卡器,远程读写消费卡片
- c语言实现TCP的socket通信
- 多文件目录Makefile的写法
- 一个有趣的例子带你入门canvas
- GitLab 12 跨版本 13 升级
- 【Rust日报】2020-07-28 SO:在命令行下浏览StackOverflow
- 【翻译】200行代码讲透RUST FUTURES (6)
- MPU6050姿态解算方式1-DMP