下载好数据库升级包,想去Oracle官网下载的,提示没有授权
只能在csdn找付费的了,9块1个,下载了前2个。
注意,总共有7个包,如果Oracle是安装在linux服务器,且无图形界面管理的
只需要第一,第二个包即可(即使博主说必须下载7个,其实也是2个就可以了)
unzip p13390677_112040_Linux-x86-64_1of7.zip
unzip p13390677_112040_Linux-x86-64_2of7.zip
unzip 命令解压后,如下图
直接cd database ,执行下面的命令安装数据库:
./runInstaller -silent -debug -force -ignorePrereq DECLINE_SECURITY_UPDATES=true oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/home/oracle/11.2.0.4/oraInventory ORACLE_HOME=/data/oracle/product/11.2.0.4 ORACLE_BASE=/data/oracle/new/ oracle.install.db.InstallEdition=EE oracle.install.db.DBA_GROUP=dba oracle.install.db.OPER_GROUP=oracle
这里ORACLE_HOME设置为:/data/oracle/product/11.2.0.4,原来的目录为/data/oracle/product/11.2.0.1
软件升级之后
同步旧库的oradata文件过来(根据实际情况拷贝数据文件),dbs里面的ora文件同步过来
rsync -avl /data/oracle/product/11.2.0.4/oradata/* /data/oracle/product/11.2.0.1/oradata/
rsync -avl /data/oracle/product/11.2.0.4/dbs/* /data/oracle/product/11.2.0.1/dbs/
如果11.2.0.4里面没有oradata目录,新建一个即可
重启一下进程,然后启动数据库:
lsnrctl stop
lsnrctl start
启动数据库
sqlplus / as sysdba
startup upgrade;
看看数据库是否能正常启动,可以正常启动后
去源库查看undo参数:show parameter undo;
如果我们的库和源库这个参数不一致,恢复后启动会报错,找不到undo文件的
启动数据库到MOUNT; 这个状态设置undo相关参数
shutdown abort;
startup mount;
CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE '/data/oracle/product/11.2.0.4/db_1/oradata/UNDOTBS1.DBF' SIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED;
alter system set undo_tablespace='UNDOTBS1';
alter system set db_recovery_file_dest_size=12G;
COMMIT;
alter database open;
create pfile='/data/oracle/pfile_0630.ora' from spfile;
shutdown abort;
我们这里当前库是UNDOTBS01,源库是UNDOTBS1,所以要把当前库的设置一下,根源库一样才行
这里顺便设置了db_recovery_file_dest_size,show parameter db_recovery_file查看这个的值,原来是2G,太小了,第一次做的时候报错是这个内存不足,所以这里给设置成了12G,免除后患
保存一个ora文件后,关闭数据库。
保存的.ora文件,里面的值必须改为升级后的数据库版本,compatible=‘11.2.0.4.0’(必须改,否则恢复后会提示control文件版本不兼容)
下面开始恢复数据库:
rman target /
startup nomount pfile=/data/oracle/pfile_0630.ora;
restore controlfile from '/data/oracle/tdata_2024-05-30/c-24543xxxxxxx';
alter database mount;
用我们保存后修改过的.ora文件启动,启动数据库到nomount模式
恢复控制文件
启动数据库到mount模式
如果上面的操作都没报错,继续RMAN操作:
catalog start with '/data/oracle/tdata_2024-05-30/';
run{
allocate channel c1 device type disk;
set newname for database to '/data/oracle/product/11.2.0.4/db_1/oradata/%b';
restore database;
switch datafile all;
switch tempfile all;
release channel c1;
}
/data/oracle/tdata_2024-05-30/是我们从源库拷贝过来的rman备份文件
包括了控制文件、数据文件、归档日志这些
/data/oracle/product/11.2.0.4/db_1/oradata/%b
这里是我们要恢复的数据保存的目标路径,
%b 指定的文件名从目录路径中剥离,只获取数据文件名称.
执行run命令后,可以用这个语句SQL查看进度
SELECT
(select sysdate from dual) as systime,
SID,SERIAL#,CONTEXT,SOFAR,TOTALWORK,ROUND(SOFAR / TOTALWORK * 100, 2) "%_COMPLETE"FROM gV$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%' AND OPNAME NOT LIKE '%aggregate%' ANDTOTALWORK != 0 AND SOFAR <> TOTALWORKorder by 7 desc;
上面的命令跑完之后,恢复数据库
recover database;
这里会有一个报错,可以这样处理,也有说不处理也没关系的
(最后验证的时候,指定到某个时间点的话,有些表的数据行数跟源库不一致,根这个报错有关系吗?还没确定是业务导致的还是这个报错导致的)
然后用resetlogs参数打开数据库
alter database open resetlogs;
恢复完成。