Oracle 12c升级检查问题分析(r10笔记第69天)

今天计划把一个测试环境升级到12c,为了练练手,先在备库上来做。数据库版本是11.2.0.3.0,计划升级到12.1.0.2.0。

为了不影响原有的测试主库,我在备库上做了Failover,两个命令下去就立刻生效了。

SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY

SQL>alter database recover managed standby database finish force;
Database altered.

SQL>alter database commit to switchover to primary;
Database altered.

然后使用克隆安装12c的数据库软件,使用下面的命令即可安装。

$ORACLE_HOME/clone/bin/perl clone.pl ORACLE_BASE=$ORACLE_BASE ORACLE_HOME=$ORACLE_HOME  ORACLE_HOME_NAME=OraDb12c_home1

查看数据库已经部署了最新的补丁

$ opatch lsinventory
...
Patch  23054246     : applied on Mon Oct 17 17:01:16 CST 2016
Unique Patch ID:  20464632
Patch description:  "Database Patch Set Update : 12.1.0.2.160719 (23054246)"
   Created on 5 Jul 2016, 07:07:59 hrs PST8PDT

看了下官方文档,发现对于12c的升级和升级11g差别不大,手工升级的步骤很多脚本都是一样的,思路完全可以复用。

升级前的检查需要跑一个脚本/preupgrd.sql

本来想速战速决,没想到检查的时候竟然抛出了一个错误。

DECLARE
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 1003 - see DBWR trace file
ORA-01110: data file 1003: '+DATA'
ORA-06512: at "SYS.DBMS_PREUP", line 2380
ORA-06512: at "SYS.DBMS_PREUP", line 981
ORA-06512: at "SYS.DBMS_PREUP", line 5471
ORA-06512: at line 73  

这个错误看得我有些懵,因为我这个备库是没有使用ASM的,怎么会抛出和ASM相关的错误呢。

查看参数文件里面,倒是有一行这样的内容

*.db_file_name_convert='+DATA/sgstatdb3/datafile','/U01/app/oracle/oradata/statdb2','+ARCH','/U01/app/oracle/oradata/statdb2','/U01/....

可见原来的主库是使用了ASM,但是在备库端压根没有用到,怎么会抛出这个错误呢。

查看alert日志,发现这个错误还挺特别。

Mon Oct 31 22:27:02 2016
WARNING: ASM communication error: op 36 state 0x40 (15077)
ERROR: slave communication error with ASM
Mon Oct 31 22:28:56 2016
WARNING: ASM communication error: op 36 state 0x40 (15077)
ERROR: slave communication error with ASM
Mon Oct 31 22:30:00 2016
Thread 1 advanced to log sequence 3 (LGWR switch)

从错误日志可以看出,是在和ASM实例通信的时候出问题了。这个环境压根没有用ASM,肯定出问题了。

看错误是文件1003,查看v$datafile,文件号最大才是800多,怎么会冒出一个1003的文件呢。继续查看alert日志,发现1001也有问题,看来有问题的还不止一个文件,但是数据库Open没有任何问题。

Dictionary check beginning
Mon Oct 31 22:05:05 2016
Errors in file /U01/app/oracle/diag/rdbms/sstatdb2/statdb2/trace/statdb2_dbw0_27706.trc:
ORA-01186: file 1001 failed verification tests
ORA-01157: cannot identify/lock data file 1001 - see DBWR trace file
ORA-01110: data file 1001: '+DATA'
File 1001 not verified due to error ORA-01157

脑袋里盘算着,一边翻找日志,发现数据库启动的时候抛出了下面的错误。

Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Cannot re-create tempfile +DATA, the same name file exists
Cannot re-create tempfile +DATA, the same name file exists
Cannot re-create tempfile +DATA, the same name file exists

如此一来,问题就很明显了,临时表空间的文件映射存在问题,导致没有创建成功,而临时文件有无不会影响数据库的启动,所以这个问题就这样暂时搁置下来了。

进一步验证,可以看到存着多个临时文件

SQL> SELECT FILE#,NAME FROM V$TEMPFILE
     FILE# NAME
---------- ------------------------------
         3 +DATA
         4 +DATA
         1 +DATA
         2 +DATA
         5 +DATA
         6 +DATA
         7 +DATA

同时使用dba_temp_files会直接抛出之前的错误。

SQL> select file_name from dba_temp_files;
select file_name 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> create temporary tablespace temp1 tempfile '/U01/app/oracle/oradata/statdb2/temp01.dbf' size 100M;
Tablespace created.

SQL> alter database default temporary tablespace temp1;
Database altered.

SQL> drop tablespace temp including contents and datafiles;
Tablespace dropped.

后台会继续检查+DATA这个不存在的虚拟存储,然后最终从数据字典层面统一这些信息。

再次做升级前的检查,就没有任何问题了。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2016-10-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

MySQL数据库“十宗罪”(十大经典错误案例)

Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行)

1502
来自专栏猿人谷

Oracle RAC基本维护指令

所有实例和服务的状态 $ srvctl status database -d orcl Instance orcl1 is running on node l...

2197
来自专栏数据和云

数据恢复:隐含参数_minimum_giga_scn被废弃后如何调SCN

崔华,网名 dbsnake Oracle ACE Director,ACOUG 核心专家 在很多数据恢复的场景中,我们可能需要调节SCN,但是一个重要的隐含参数...

29610
来自专栏码匠的流水账

nginx lua重置请求参数及常量备忘

2391
来自专栏散尽浮华

mysqldump数据导出问题和客户端授权后连接失败问题

1,使用mysqldump时报错(1064),这个是因为mysqldump版本太低与当前数据库版本不一致导致的。 mysqldump: Couldn't exe...

2439
来自专栏c#开发者

数据中心使用dtu远程连接oracel 9i数据库问题

数据中心使用dtu远程连接oracel 9i数据库问题 发表人:lurrance | 发表时间: 2005年二月20日, 12:13 经过从网上找来的资料以及看...

37311
来自专栏乐沙弥的世界

rman 还原归档日志(restore archivelog)

     听说过还原(restore)数据库,表空间及数据库文件,使用归档日志恢复(recover)数据库,表空间,数据库文件。咦,还有还原归档日志这一说法呢?...

1554
来自专栏乐沙弥的世界

Oracle 冷备份

首先在运行的库中得到数据库运行的所有的物理文件位置,然后在计划内关闭数据库(shutdown)

1102
来自专栏FreeBuf

新手指南:DVWA-1.9全级别教程之SQL Injection

目前,最新的DVWA已经更新到1.9版本(点击原文查看链接),而网上的教程大多停留在旧版本,且没有针对DVWA high级别的教程,因此萌发了一个撰写新手教程的...

4868
来自专栏Jerry的SAP技术分享

Kubernetes里的ConfigMap的用途

顾名思义,ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。

1821

扫码关注云+社区

领取腾讯云代金券