文章

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 进行授权

© TheDarkStarJack. 保留部分权利。

[本站总访问量次] [本站访客数人次] [本文总阅读量次]

本站采用 Jekyll 主题 Chirpy