Oracle 修改 db_name
有的时候恢复Oracle数据到另一个环境中之后,需要修改相关的实例名、服务名、数据库名等,方便区分不同的环境。 以下操作的前提是数据已经恢复到新的环境,在新的环境中修改db_name。
仅修改server_name
如果仅修改server_name可以直接登录数据库之后操作;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sqlplus sys/sys as sysdba
SQL> show parameter service_name
SQL> alter system set service_names='orcl' scope=both;
-- 修改listener.ora 文件中的服务名:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\Oracle10g)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = E:\Oracle10g)
(SID_NAME = ORCL) ##修改server name
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = onest)(PORT = 1521))
)
)
修改db_name
假设已经恢复数据,并且启动了实例,至少处于mount状态,否则无法备份控制文件。此时先不要修改参数文件或者ORACLE_SID信息,不然重启之后会提示错误
备份控制文件
1
2
SQL> alter database backup controlfile to trace as '/tmp/control.ctl';
修改备份的控制文件,备份的控制文件中有两条创建控制文件的提示。根据需求操作, Set #1. NORESETLOGS case 和 Set #2. RESETLOGS case 两个方法 因为恢复的数据时候我已经restlogs恢复了,所以此时我只需要重建控制文件即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
## 如果需要移动数据文件/表空间目录,可以一并在控制文件重建语句中修改了,
vim /tmp/control.ctl
-- 如果不需要修改其他参数的话可以直接从spfile启动,不需要单独指定pfile nomount
-- STARTUP NOMOUNT
--CREATE CONTROLFILE REUSE 修改为 CREATE CONTROLFILE SET
CREATE CONTROLFILE SET DATABASE "db_name" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 584
LOGFILE
GROUP 1 '/home/u01/app/oracle/oradata/ORACLE_SID/redo01.log' SIZE 500M BLOCKSIZE 512,
GROUP 2 '/home/u01/app/oracle/oradata/ORACLE_SID/redo02.log' SIZE 500M BLOCKSIZE 512,
GROUP 3 '/home/u01/app/oracle/oradata/ORACLE_SID/redo03.log' SIZE 500M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/home/u01/app/oracle/oradata/ORACLE_SID/system01.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/sysaux01.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/undotbs01.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/users01.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/htxt01.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename01.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspace01.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspace02.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspace03.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspace04.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspace05.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename02.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename03.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename04.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/undotbs02.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/undotbs03.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/sysaux02dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename05.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename06.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename07.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename08.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename09.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename10.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename11.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename12.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename13.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename14.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspace15.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename15.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename16.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename17.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspace06.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspace07.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspace08.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename18.dbf ', -- 需要注意有可能前期运维人员创建数据文件的时候并不规范,或者复制粘贴的时候多了几个空格,不要手抖删了空格
-- 。。。。
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename44.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename45.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename46.dbf',
'/home/u01/app/oracle/oradata/ORACLE_SID/tabspacename47.dbf'
CHARACTER SET AL32UTF8
;
-- RECOVER DATABASE USING BACKUP CONTROLFILE;
修改pfile
如果需要修改其他参数的话可以此时一并修改了,例如server_name 、 db_name等
1
create pfile='/tmp/pfile.ora' from spfile;
修改pfile
1
2
3
4
5
6
vim /tmp/pfile.ora
## 多个控制文件使用逗号隔开
*.control_files='ctl1','ctl2'
*.server_name=''
*.db_name=''
# *.instance_name='' # 实例名不需要修改,和ORACLE_SID的值是一一对应的
停止/启动数据库至
如果需要修改instance_name,需要在启动之前修改ORACLE_SID, export ORACLE_SID='XXX'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
shutdown IMMEDIATE
-- 如果需要移动数据文件目录/表空间路径,此时停库之后可以移动到新目录,如果需要修改 instance_name,此时可以退出 sqlplus 修改 ORACLE_SID 之后在重新连接 sqlplus
-- $ORACLE_HOME/dbs/init$ORACL_SID.ora 使用上文重新修改之后的pfile文件,也可以备份ora文件之后覆盖源ora文件,
startup nomount pfile='initxxx.ora';
@/tmp/contrl.ctl
-- SQL> alter database mount;
SQL> show parameter name
-- 检查文件头
SQL> select file#,status,checkpoint_change# from v$datafile_header;
set num 20
SQL> select distinct checkpoint_change# from v$datafile_header;
-- SQL> alter database open ;
SQL> alter database open resetlogs;
-- 检查日志
show parameter diag
修改监听
如果修改了服务名,记得修改监听文件中的server_name
本文由作者按照
CC BY 4.0
进行授权