数据库在添加数据文件时报错:ORA-01119,ORA-17520,ORA-00600错误,根据报错无法判断故障点,而且生产库无法进行其他测试,比较稳妥的办法是新建一个磁盘组,将现有的数据迁移到新的磁盘组上。
操作系统:solaris 11
数据库版本:11.2.0.4
数据库架构:rac
数据存储格式:asm
1.备份数据库和控制文件
#su - oracle
$rman target /
RMAN>backup full database format '/backdb/full2018.bak';
RMAN>backup current controlfile format '/backdb/ctrlbak.ctl';
2.存储划分磁盘给服务器,共划分4个500g 的磁盘,并分别在两个节点上修改磁盘的属性,操作如下:
chown -R grid:asmadmin /dev/rdsk/c0t600B342E749A659D6C27D56DFD0000DAd0s6
chown -R grid:asmadmin /dev/rdsk/c0t600B342723B68C4D0579DDA8BD0000DAd0s6
chown -R grid:asmadmin /dev/rdsk/c0t600B342946F4D73DF125D36CED0000DAd0s6
chown -R grid:asmadmin /dev/rdsk/c0t600B34251924A80D46C1DAC5AD0000DAd0s6
chmod -R 660 /dev/rdsk/c0t600B342E749A659D6C27D56DFD0000DAd0s6
chmod -R 660 /dev/rdsk/c0t600B342723B68C4D0579DDA8BD0000DAd0s6
chmod -R 660 /dev/rdsk/c0t600B342946F4D73DF125D36CED0000DAd0s6
chmod -R 660 /dev/rdsk/c0t600B34251924A80D46C1DAC5AD0000DAd0s6
#su - grid
$asmca
查看磁盘组状态正常:
$crsctl stat res -t
4.修改CONTROLFILE在参数文件中记录的位置
#su - oracle
$sqlplus / as sysdba
SQL>alter system set control_files='+NEWDATA/control01.ctl' scope=spfile;
5.备份、恢复控制文件
#su - oracle
$rman target /
$backup current controlfile format '/export/controlfile.ctl';
省略输出结果。。。。。。
关闭数据库并启动到nomount状态
>shutdown immediate
>startup nomount
恢复控制文件
#su - oracle
$rman target /
RMAN>restore controlfile from '/export/controlfile.ctl';
省略输出结果。。。。。。
数据库启动到mount状态
$sqlplus / as sysdba
>alter database mount
6.迁移数据文件到 NEWDATA
#su - oracle
$rman target /
>backup as copy database format '+NEWDATA';
省略输出结果。。。。。。
迁移单独的数据文件
RMAN>switch database to copy;
省略输出结果。。。。。。
应用online redo log 使数据文件同步
RMAN> RECOVER database;
打开数据库并重置日志
RMAN>alter database open resetlogs;
7.新建online redo logfile,并删除原来磁盘组上的online redo log
>alter database add logfile thread 1 group 4 ('+NEWDATA/ORCL/ONLINELOG/redo04.log') size 512m;
>alter database drop logfile group 1;
为全部列出。。。。。。
8.新建temp表空间,并删除原临时表空间
>alter tablespace temp add tempfile'+NEWDATA' size 10g;
>select name from v$tempfile;
>alter tablespace temp drop tempfile '原有的临时表空间';
9.创建spfile ,修改参数文件
>create pfile='/backdb/new.pfile' from sefile;
>create spfile='+NEWDATA/ORCL/spfileorcl.ora' from pfile='/backdb/new.pfile';
10.测试添加数据文件
>alter tablespace kkk add datafile '+DATA' size 30g;
11.备份控制文件
>shutdown immediate
>startup no mount
$rman target /
RMAN>restore controlfile to 'NEWDATA/control02.ctl' from '+NEWDATA/controlfile01.ctl';
RMAN>restore controlfile to 'NEWDATA/control03.ctl' from '+NEWDATA/controlfile01.ctl';
12删除原磁盘组
#su - grid
$sqlplus / as sysasm
>alter diskgroup 原磁盘组 dismount;
>drop diskgroup 原磁盘组;
⚠️ 删除前一定要和开发人员确认应用无误后再删除。