复制产品数据库时在参数文件中修改了数据库名,startup时会出现ORA-01103错误。

SQL> startup mount
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                  1247876 bytes
Variable Size              71304572 bytes
Database Buffers           88080384 bytes
Redo Buffers                7139328 bytes
ORA-01103: database name 'ORCL' in control file is not 'TESTDB'

这表示测试数据库中的参数DB_NAME跟控制文件中的不一致。解决办法是:
1. 修改DB_NAME。
2. 重建控制文件。

先备份产品数据库的控制文件:

SQL > alter database backup controlfile to trace;

Database altered.

SQL> select c.value || '\' || d.instance_name || '_ora_' || a.spid || '.trc' trace
2  from v$process a,v$session b, v$parameter c, v$instance d
3  where a.addr = b.paddr
4    and b.audsid = userenv('sessionid')
5    and c.name = 'user_dump_dest'
6  /

TRACE
-----------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ADMIN\ORCL\UDUMP\orcl_ora_4012.trc

orcl_ora_4012.trc文件中包含创建控制文件的SQL语句。打开它,修改相关参数:
1. REUSE DATABASE “ORCL” 改为 SET DATABASE “TESTDB”
2. NORESETLOGS 改为 RESETLOGS
3. 修改相关的路径名

SQL> STARTUP NOMOUNT
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                  1247876 bytes
Variable Size              71304572 bytes
Database Buffers           88080384 bytes
Redo Buffers                7139328 bytes

SQL> CREATE CONTROLFILE SET DATABASE "TESTDB" RESETLOGS FORCE LOGGING ARCHIVELOG
2      MAXLOGFILES 16
3      MAXLOGMEMBERS 3
4      MAXDATAFILES 100
5      MAXINSTANCES 8
6      MAXLOGHISTORY 292
7  LOGFILE
8    GROUP 1 'D:\ZEENO\ORADATA\TESTDB\REDO01.LOG'  SIZE 50M,
9    GROUP 2 'D:\ZEENO\ORADATA\TESTDB\REDO02.LOG'  SIZE 50M,
10    GROUP 3 'D:\ZEENO\ORADATA\TESTDB\REDO03.LOG'  SIZE 50M
11  DATAFILE
12    'D:\ZEENO\ORADATA\TESTDB\SYSTEM01.DBF',
13    'D:\ZEENO\ORADATA\TESTDB\UNDOTBS01.DBF',
14    'D:\ZEENO\ORADATA\TESTDB\SYSAUX01.DBF',
15    'D:\ZEENO\ORADATA\TESTDB\USERS.DBF'
16  CHARACTER SET ZHS16GBK
17  ;

Control file created.

SQL> ALTER DATABASE OPEN RESETLOGS;

Database altered.