一、需求
数据库名为mesorcl,因业务需求,需要更改名为mdborcl。
注意:没事不要更改数据库名,因为要重建控制文件且使用resetlogs方式。
!!!更改之前要做好数据库全备。
二、实现方式(两种方式)
参数文件中的db_name只是数据库名,而不是实例名;实例名为instance_name=oracle_sid。
1、纯手动更改
--更改环境变量
--导出控制文件(resetlogs)
--修改参数文件
--更改文件目录
--重建控制文件(resetlogs)
--打开数据库(resetlogs)
--创建临时文件
--重启数据库
--启动监听
2、半自动方式—借助Oracle工具nid
--关闭数据库,并启动到mount --运行nid命令 --更改数据库参数 --更改环境变量 --创建spfile并重启数据库 --resetlogs打开数据库 --检查数据库 --查看日志记录
三、纯手动流程(mesorcl——>mdborcl)
1、更改环境变量
$vi ~/.bash_profile export ORACLE_UNQNAME=mdborcl export ORACLE_SID=mdborcl; source ~/.bash_profile
2、更改/etc/oratab
mdborcl:/oracle/app/oracle/product/11.2.0/db_1:N
3、导出控制文件
注意:如果要更改db_name,控制文件重建必须使用resetlogs;
SQL> alter database backup controlfile to trace as '/oracle/controlfile.trc' resetlogs;
4、修改参数文件
(1)查看旧的spfile:
strings $ORACLE_HOME/dbs/spfilemesorcl.ora
(2)复制spfile到新的pfile.ora:
vi /oracle/pfile.ora
*.audit_file_dest='/oracle/app/oracle/admin/mdborcl/adump' *.audit_trail='db' *.compatible='11.2.0.4' *.control_files='/oracle/app/oracle/oradata/mdborcl/control01.ctl','/oracle/app/oracle/oradata/mdborcl/control02.ctl'#Restore Controlfile *.db_16k_cache_size=0 *.db_block_size=8192 *.db_domain='' *.db_name='mesorcl' *.db_recovery_file_dest_size=32212254720 *.db_recovery_file_dest='/oracle/archivelog' *.diagnostic_dest='/oracle/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=mesorclXDB)' *.open_cursors=300 *.pga_aggregate_target=1653604352 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=4960813056 *.undo_tablespace='UNDOTBS1'
(3)创建spfile
SQL>create spfile from pfile='/oracle/pfile.ora';
(4)关闭数据库
SQL> shutdown immediate
5、更改文件目录
(因为包含mesorcl路径,如果数据在其他路径,只要包含mesorcl都要更改)
如果数据文件没有在mesorcl路径,则无需更改;其实数据文件路径保持也可以。只是不便于管理而已。
(1)查找所有mesorcl目录
$find /oracle -name mesorcl
/oracle/app/oracle/diag/rdbms/mesorcl /oracle/app/oracle/diag/rdbms/mesorcl/mesorcl /oracle/app/oracle/cfgtoollogs/dbca/mesorcl /oracle/app/oracle/admin/mesorcl /oracle/app/oracle/oradata/mesorcl $find /oracle -name MESORCL /u01/archivelog/MESORCL
(2)修改mesorcl目录为mdborcl
mv /oracle/app/oracle/diag/rdbms/mesorcl/ /oracle/app/oracle/diag/rdbms/mdborcl/ mv /oracle/app/oracle/diag/rdbms/mdborcl/mesorcl /oracle/app/oracle/diag/rdbms/mdborcl/mdborcl mv /oracle/app/oracle/cfgtoollogs/dbca/mesorcl /oracle/app/oracle/cfgtoollogs/dbca/mdborcl mv /oracle/app/oracle/admin/mesorcl /oracle/app/oracle/admin/mdborcl mv /oracle/app/oracle/oradata/mesorcl /oracle/app/oracle/oradata/mdborcl mv /oracle/archivelog/MESORCL /oracle/archivelog/MDBORCL
6、重建控制文件
(1)重建控制文件前,先删除原控制文件
rm -rf /oracle/app/oracle/oradata/mdborcl/control01.ctl rm -rf /oracle/app/oracle/oradata/mdborcl/control02.ctl
(2)修改控制文件并重建
更改后(只把mesorcl更改为mdborcl)
注意:此处创建控制文件的参数不要使用reuse,而是要改为set
STARTUP NOMOUNT CREATE CONTROLFILE SET DATABASE "MDBORCL" RESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/oracle/app/oracle/oradata/mdborcl/redo01.log' SIZE 200M BLOCKSIZE 512, GROUP 2 '/oracle/app/oracle/oradata/mdborcl/redo02.log' SIZE 200M BLOCKSIZE 512, GROUP 3 '/oracle/app/oracle/oradata/mdborcl/redo03.log' SIZE 200M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/oracle/app/oracle/oradata/mdborcl/system01.dbf', '/oracle/app/oracle/oradata/mdborcl/sysaux01.dbf', '/oracle/app/oracle/oradata/mdborcl/undotbs01.dbf', '/oracle/app/oracle/oradata/mdborcl/user01.dbf', '/oracle/app/oracle/oradata/mdborcl/example01.dbf', '/oracle/app/oracle/oradata/mdborcl/test1_1.dbf', '/oracle/app/oracle/oradata/mdborcl/test2_1.dbf', '/oracle/app/oracle/oradata/mdborcl/test_tbsp01.dbf', '/oracle/app/oracle/oradata/mdborcl/test03.dbf', '/oracle/app/oracle/oradata/mdborcl/test04.dbf', '/oracle/app/oracle/oradata/mdborcl/test06.dbf', '/oracle/app/oracle/oradata/mdborcl/test07.dbf', '/oracle/app/oracle/oradata/mdborcl/test05.dbf', '/oracle/app/oracle/oradata/mdborcl/test08.dbf', '/oracle/app/oracle/oradata/mdborcl/test10.dbf', '/oracle/app/oracle/oradata/mdborcl/test082.dbf', '/oracle/app/oracle/oradata/mdborcl/test11_big.dbf' CHARACTER SET AL32UTF8 ;
(3)恢复数据
-- Commands to re-create incarnation table -- Below log names MUST be changed to existing filenames on -- disk. Any one log file from each branch can be used to -- re-create incarnation records. -- ALTER DATABASE REGISTER LOGFILE '/oracle/archivelog/MDBORCL/archivelog/2023_05_05/o1_mf_1_1_%u_.arc'; -- ALTER DATABASE REGISTER LOGFILE '/oracle/archivelog/MDBORCL/archivelog/2023_05_05/o1_mf_1_1_%u_.arc'; -- Recovery is required if any of the datafiles are restored backups, -- or if the last shutdown was not normal or immediate. RECOVER DATABASE USING BACKUP CONTROLFILE;
(4)打开数据库(resetlogs)
-- Database can now be opened zeroing the online logs. ALTER DATABASE OPEN RESETLOGS;
(5)创建临时文件
-- Commands to add tempfiles to temporary tablespaces. -- Online tempfiles have complete space information. -- Other tempfiles may require adjustment. ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/app/oracle/oradata/mdborcl/temp01.dbf' SIZE 13631488 REUSE AUTOEXTEND OFF; -- End of tempfile additions. --
7、关闭数据库并重启测试
shutdown immediate; startup
8、启动监听
lsnrctl start
四、方法2:借助Oracle nid工具(mdborcl——>mesorcl)
1、关闭数据库,并启动到mount
shutdown immediate; startup mount;
2、运行nid命令
dbname=mesorcl为更改的新数据库名
SQL> host nid target=sys/oracle dbname=mesorcl logfile=/oracle/transfer.log ;
3、更改数据库参数
SQL>create pfile='/oracle/pfile.ora' from spfile;
*.db_name='mesorcl'
4、更改环境变量
vi ~/.bash_profile export ORACLE_UNQNAME=mesorcl export ORACLE_SID=mesorcl; source ~/.bash_profile
5、创建spfile并重启数据库
create spfile from pfile='/oracle/pfile.ora';
6、resetlogs打开数据库
startup mount; alter database open resetlogs;
7、检查数据库
(1)数据文件位置没有变化
(理论上也无需更改此处,因为一般数据文件会单独存放到其他位置)
但是数据文件头中的db_name进行了修改,同时dbid也做了更改。
(2)跟踪文件等相关位置进行了更新
/oracle/app/oracle/diag/rdbms
(3)临时文件无需重新创建,已经自行做了修改
8、更改/etc/oratab
mesorcl:/oracle/app/oracle/product/11.2.0/db_1:N
9、查看日志记录
less /oracle/transfer.log