完整修改oracle数据库的sid

本文详细介绍了如何将Oracle数据库的SID从egmas更改为pams的过程。包括创建PFILE、修改重要文件名、新建ADUMP目录、修改参数文件、复制数据文件、创建控制文件等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=small]目的:将oracle数据库的SID由原来的egmas改名为pams,所有涉及sid的部分都会修改过来。

备注:下面的例子是在ASM自动存储管理下实现的,同样也适用于文件系统。

1、创建pfile
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA_DG/egmas/spfileegmas.ora

SQL> create pfile='/tmp/pfileegmas.ora' from spfile;
File created.
shutdown immediate

# vi /etc/oratab
pams:/dba/oracle/product/11.2.0.3.0:N # line added by Agent

cnsz03pl0032:egmas > pwd
/dba/oracle/product/11.2.0.3.0/dbs

2、修改一些重要文件名
cnsz03pl0032:egmas > ls -l *egmas*
-rw-rw---- 1 oracle asmadmin 1544 Nov 29 14:31 hc_egmas.dat
-rw-r----- 1 oracle oinstall 40 Nov 21 16:31 initegmas.ora
-rw-r----- 1 oracle oinstall 1536 Nov 21 16:31 orapwegmas
-rw-r----- 1 oracle oinstall 9748480 Nov 21 20:04 snapcf_egmas.f
cnsz03pl0032:egmas > mv hc_egmas.dat hc_pams.dat
cnsz03pl0032:egmas > mv orapwegmas orapwpams
cnsz03pl0032:egmas > cp initegmas.ora initpams.ora

3、新建pams的adump目录
cnsz03pl0032:pams > cd $ORACLE_BASE/admin
cnsz03pl0032:pams > ll
total 84
drwxr-xr-x 3 oracle oinstall 4096 Sep 23 18:13 bamsst
drwxr-x--- 5 oracle oinstall 4096 Jul 13 02:30 bmpst
drwxr-x--- 5 oracle oinstall 4096 Jul 8 23:32 bspdbst
drwxr-x--- 5 oracle oinstall 4096 Jul 8 22:11 cmspst
drwxr-x--- 8 oracle oinstall 4096 Nov 1 16:40 ecsst
drwxr-x--- 5 oracle oinstall 4096 Nov 21 16:27 egmas
drwxr-x--- 5 oracle oinstall 4096 Jul 8 22:19 hncmspst
drwxr-xr-x 5 oracle oinstall 4096 Aug 9 09:37 hnsssst
drwxr-x--- 8 oracle oinstall 4096 Nov 21 14:26 iams
drwxr-x--- 5 oracle oinstall 4096 Jul 13 02:45 iiscst
drwxr-xr-x 8 oracle oinstall 4096 Oct 21 16:04 lscmst
drwxr-x--- 8 oracle oinstall 4096 Aug 30 17:50 omptest
drwxr-xr-x 8 oracle oinstall 4096 Oct 21 15:20 pamsst
drwxr-x--- 5 oracle oinstall 4096 Nov 13 14:36 rstdbst
drwxr-xr-x 3 oracle oinstall 4096 Jul 3 23:25 sfecpdb
drwxr-x--- 8 oracle oinstall 4096 Jul 9 07:32 sfgpsst
drwxr-x--- 5 oracle oinstall 4096 Oct 12 14:14 sfmpst
drwxr-xr-x 7 oracle oinstall 4096 Sep 24 14:22 sfossst
drwxr-x--- 5 oracle oinstall 4096 Jul 6 21:40 wbepinterfacest
drwxr-x--- 5 oracle oinstall 4096 Jul 4 23:53 wbepst
drwxr-x--- 5 oracle oinstall 4096 Jul 2 04:12 wqsdbst
cnsz03pl0032:pams > mkdir pams
cnsz03pl0032:pams > cd pams
cnsz03pl0032:pams > mkdir adump

4、修改参数文件
---重点修改db_unique_name为新的sid,但此时千万不要修改db_name,其他的也都该成新的sid即可。
cnsz03pl0032:pams > vi /tmp/pfileegmas.ora
pams.__db_cache_size=3439329280
pams.__java_pool_size=16777216
pams.__large_pool_size=16777216
pams.__oracle_base='/dba/oracle'#ORACLE_BASE set from environment
pams.__pga_aggregate_target=7063207936
pams.__sga_target=4294967296
pams.__shared_io_pool_size=0
pams.__shared_pool_size=788529152
pams.__streams_pool_size=0
*.archive_lag_target=900
*.audit_file_dest='/dba/oracle/admin/egmas/adump'
*.audit_sys_operations=TRUE
*.audit_trail='DB_EXTENDED'
*.compatible='11.2.0.0.0'
*.control_files='+DATA_DG/pams/controlfile/current.612.832798423'#Restore Controlfile
*.db_block_size=8192
*.db_cache_size=5368709120
*.db_create_file_dest='+DATA_DG'
*.db_domain=''
*.db_files=2000
*.db_keep_cache_size=1073741824
*.db_name='egmas' ---注意这里千万不要修改
*.db_unique_name='pams' --这里指定新的sid
*.db_recovery_file_dest='+FRA_DG'
*.db_recovery_file_dest_size=21474836480
*.db_unique_name='pams'
*.diagnostic_dest='/dba/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=pamsXDB)'
*.java_pool_size=83886080
*.large_pool_size=314572800
*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST'
*.log_archive_format='arch_%t_%s_%r.arc'
*.log_archive_max_processes=5
*.memory_target=0
*.open_cursors=300
*.pga_aggregate_target=2147483648
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_limit=FALSE
*.resource_manager_plan=''
*.sessions=1105
*.sga_max_size=0
*.sga_target=0
*.shared_pool_size=1073741824
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'

5、以新的db_unique_name 启动数据库到mount状态
SQL> startup mount pfile='/tmp/pfileegmas.ora';
ORACLE instance started.

Total System Global Area 7933816832 bytes
Fixed Size 2243872 bytes
Variable Size 1476395744 bytes
Database Buffers 6442450944 bytes
Redo Buffers 12726272 bytes
Database mounted.

6、此时我们新建日志组的话就会自动创建到+data_dg/pams下面
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
+DATA_DG/egmas/onlinelog/group_4.594.832094113
+DATA_DG/egmas/onlinelog/group_5.595.832094149
+DATA_DG/egmas/onlinelog/group_6.596.832094161
+DATA_DG/egmas/onlinelog/group_7.597.832094171
+DATA_DG/egmas/onlinelog/group_8.598.832094179
+DATA_DG/egmas/onlinelog/group_9.599.832094189
6 rows selected.

SQL> alter database add logfile group 10 '+DATA_DG' size 100m;
SQL> alter database add logfile group 11 '+DATA_DG' size 100m;
SQL> alter database add logfile group 12 '+DATA_DG' size 100m;
随便先建几组,后面改就可以了。

[grid@cnsz03pl0032 ~]$ asmcmd
ASMCMD> cd DATA_DG
ASMCMD> cd PAMS
ASMCMD> cd ONLINELOG
ASMCMD> ls
group_10.606.832793705
group_11.594.832793715
group_12.613.832793723

就可以看到了,使用命令SQL> select member from v$logfile; 也可以查到,之前的我们并不用删除。

7、复制数据文件。
RMAN> copy datafile '+DATA_DG/EGMAS/DATAFILE/AUD_DATA.591.832094553' to '+DATA_DG';
copy datafile '+DATA_DG/EGMAS/DATAFILE/

ASMCMD> ls
AUD_DATA.615.832794687
AUD_INDEX.607.832794761
DBADATA.608.832794821
SYSAUX.609.832794857
SYSTEM.610.832794891
UNDOTBS1.611.832794927
USERS.614.832794595
一样的操作,拷贝过来,虽然会报错,control有关,不用理会,数据文件可以拷贝过来了。

8、数据文件和日志文件都有了,下面是控制文件:
SQL> alter database backup controlfile to trace; 这里的会话千万不要退出
Database altered.

SQL> select * from v$diag_info;
INST_ID NAME
---------- ----------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
1 Diag Enabled
TRUE

1 ADR Base
/dba/oracle

1 ADR Home
/dba/oracle/diag/rdbms/egmas/pams


INST_ID NAME
---------- ----------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
1 Diag Trace
/dba/oracle/diag/rdbms/egmas/pams/trace

1 Diag Alert
/dba/oracle/diag/rdbms/egmas/pams/alert

1 Diag Incident
/dba/oracle/diag/rdbms/egmas/pams/incident


INST_ID NAME
---------- ----------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
1 Diag Cdump
/dba/oracle/diag/rdbms/egmas/pams/cdump

1 Health Monitor
/dba/oracle/diag/rdbms/egmas/pams/hm

1 Default Trace File
/dba/oracle/diag/rdbms/egmas/pams/trace/pams_ora_29398.trc


INST_ID NAME

查看这个trace文件的中间内容:
more /dba/oracle/diag/rdbms/egmas/pams/trace/pams_ora_29398.trc

把创建控制文件的部分抠出来:
vi /tmp/controlpams.sql
CREATE CONTROLFILE REUSE DATABASE "EGMAS" NORESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 4 '+DATA_DG/egmas/onlinelog/group_4.594.832094113' SIZE 500M BLOCKSIZE 512,
GROUP 5 '+DATA_DG/egmas/onlinelog/group_5.595.832094149' SIZE 500M BLOCKSIZE 512,
GROUP 6 '+DATA_DG/egmas/onlinelog/group_6.596.832094161' SIZE 500M BLOCKSIZE 512,
GROUP 7 '+DATA_DG/egmas/onlinelog/group_7.597.832094171' SIZE 500M BLOCKSIZE 512,
GROUP 8 '+DATA_DG/egmas/onlinelog/group_8.598.832094179' SIZE 500M BLOCKSIZE 512,
GROUP 9 '+DATA_DG/egmas/onlinelog/group_9.599.832094189' SIZE 500M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'+DATA_DG/egmas/datafile/system.584.832091273',
'+DATA_DG/egmas/datafile/sysaux.585.832091273',
'+DATA_DG/egmas/datafile/undotbs1.586.832091273',
'+DATA_DG/egmas/datafile/users.587.832091273',
'+DATA_DG/egmas/datafile/aud_data.591.832094553',
'+DATA_DG/egmas/datafile/aud_index.590.832094565',
'+DATA_DG/egmas/datafile/dbadata.589.832094675'
CHARACTER SET AL32UTF8
;

将其中的内容修改,指向你自己建的目录:
CREATE CONTROLFILE REUSE DATABASE "PAMS" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 4 '+DATA_DG/pams/onlinelog/group_4.594.832094113' SIZE 500M BLOCKSIZE 512,
GROUP 5 '+DATA_DG/pams/onlinelog/group_5.595.832094149' SIZE 500M BLOCKSIZE 512,
GROUP 6 '+DATA_DG/pams/onlinelog/group_6.596.832094161' SIZE 500M BLOCKSIZE 512,
GROUP 7 '+DATA_DG/pams/onlinelog/group_7.597.832094171' SIZE 500M BLOCKSIZE 512,
GROUP 8 '+DATA_DG/pams/onlinelog/group_8.598.832094179' SIZE 500M BLOCKSIZE 512,
GROUP 9 '+DATA_DG/pams/onlinelog/group_9.599.832094189' SIZE 500M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'+DATA_DG/pams/datafile/system.584.832091273',
'+DATA_DG/pams/datafile/sysaux.585.832091273',
'+DATA_DG/pams/datafile/undotbs1.586.832091273',
'+DATA_DG/pams/datafile/users.587.832091273',
'+DATA_DG/pams/datafile/aud_data.591.832094553',
'+DATA_DG/pams/datafile/aud_index.590.832094565',
'+DATA_DG/pams/datafile/dbadata.589.832094675'
CHARACTER SET AL32UTF8
;

SQL>@/tmp/controlpams.sql --生成新的控制文件

SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
+DATA_DG/egmas/controlfile/current.588.832091379

但是,当我们执行这个命令的时候,发现,控制文件虽然新建成功,但是,却在原来的路径。如下:

RMAN> restore controlfile from '+DATA_DG/egmas/controlfile/current.588.832091379';

Starting restore at 2013-11-29 20:38:40
using channel ORA_DISK_1

channel ORA_DISK_1: copied control file copy
output file name=+DATA_DG/egmas/controlfile/current.588.832091379 --新的控制文件
Finished restore at 2013-11-29 20:38:41


那么我就需要指定路径!!但是control_files这个参数只能在spfile中修改,那么我们就新建spfile,然后以spfile启动。
SQL> create spfile='/tmp/spfilepams.ora' from pfile='/tmp/pfileegmas.ora';
File created.

SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.

SQL> startup nomount;
ORACLE instance started.
Total System Global Area 7933816832 bytes
Fixed Size 2243872 bytes
Variable Size 1476395744 bytes
Database Buffers 6442450944 bytes
Redo Buffers 12726272 bytes

SQL> show parameter spfile

NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
spfile string
/dba/oracle/product/11.2.0.3.0
/dbs/spfilepams.ora
SQL> alter system set control_files='+DATA_DG/pams/controlfile/current.588.832091379' scope=spfile sid='*';
System altered.

SQL> commit;
Commit complete.

RMAN> restore controlfile from '+DATA_DG/egmas/controlfile/current.588.832091379';

Starting restore at 2013-11-29 20:53:42
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=2 device type=DISK

channel ORA_DISK_1: copied control file copy
output file name=+DATA_DG/pams/controlfile/current.612.832798423
Finished restore at 2013-11-29 20:53:44
这样我们就终于搞定了三大文件。

SQL> alter database mount;
Database altered.

SQL> alter database open;
Database altered.

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
+DATA_DG/pams/controlfile/current.612.832798423

SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
+DATA_DG/pams/datafile/dbadata.608.832794821
+DATA_DG/pams/datafile/aud_index.607.832794761
+DATA_DG/pams/datafile/aud_data.615.832794687
+DATA_DG/pams/datafile/users.614.832794595
+DATA_DG/pams/datafile/undotbs1.611.832794927
+DATA_DG/pams/datafile/sysaux.609.832794857
+DATA_DG/pams/datafile/system.610.832794891

7 rows selected.

SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
+DATA_DG/pams/onlinelog/group_12.613.832793723
+DATA_DG/pams/onlinelog/group_11.594.832793715
+DATA_DG/pams/onlinelog/group_10.606.832793705

4、将spfile移到DATA_DG中去
SQL> show parameter spfile;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /dba/oracle/product/11.2.0.3.0
/dbs/spfilepams.ora
SQL> create pfile='/tmp/pfilepams.ora' from spfile;
File created.
SQL> create spfile='+DATA_DG' from pfile='/tmp/pfilepams.ora';
File created.
SQL>

注意:要移走之前的spfile,并且修改initpams.ora的指向
cnsz03pl0032:pams > mv spfilepams.ora bak_spfilepams.ora
cnsz03pl0032:pams > cat initlscmst.ora
SPFILE='+DATA_DG/lscmst/spfilelscmst.ora'
cnsz03pl0032:pams > vi initpams.ora
SPFILE='+DATA_DG/PAMS/PARAMETERFILE/spfile.605.832798927'

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 7933816832 bytes
Fixed Size 2243872 bytes
Variable Size 1476395744 bytes
Database Buffers 6442450944 bytes
Redo Buffers 12726272 bytes
Database mounted.
Database opened.
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA_DG/pams/parameterfile/sp
file.605.832798927
SQL> show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
db_name string pams
db_unique_name string pams
global_names boolean FALSE
instance_name string pams
lock_name_space string
log_file_name_convert string
processor_group_name string
service_names string pams
SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
+DATA_DG/pams/onlinelog/group_12.613.832793723
+DATA_DG/pams/onlinelog/group_11.594.832793715
+DATA_DG/pams/onlinelog/group_10.606.832793705

SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
+DATA_DG/pams/datafile/dbadata.608.832794821
+DATA_DG/pams/datafile/aud_index.607.832794761
+DATA_DG/pams/datafile/aud_data.615.832794687
+DATA_DG/pams/datafile/users.614.832794595
+DATA_DG/pams/datafile/undotbs1.611.832794927
+DATA_DG/pams/datafile/sysaux.609.832794857
+DATA_DG/pams/datafile/system.610.832794891

7 rows selected.

SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string +DATA_DG/egmas/controlfile/cur
rent.588.832091379
control_management_pack_access string DIAGNOSTIC+TUNING

到这里终于大功告成!!!!


[/size]
<think>嗯,用户这次问的是修改Oracle数据库SID的具体步骤和注意事项。从历史对话看,用户已经查阅过一些参考资料,但需要更系统化的指导。用户可能是个DBA或者系统管理员,正在面临数据库迁移或整合的需求。ta特意提到"修改"而不是"新建",说明是现存系统改造,这种场景下风险意识很重要。用户没提环境版本,但根据引用内容判断可能是较老版本(提到ORA81),可能需要特别提醒部分命令在新版本的差异。需要重点解决几个核心问题:首先是修改本身的技术步骤要完整,从环境变量到系统文件;其次是风险控制,特别是对正在运行的系统和备份的要求;最后是避坑指南,因为OracleSID修改涉及多个组件联动,容易遗漏监听器或密码文件。注意到引用[3]明确标注"不建议修改",这个警告必须前置,但用户既然坚持要操作,就要给足替代方案建议(比如dbca迁移)。另外用户引用的方法有些矛盾(Windows和Linux混在一起),需要区分操作系统环境。技术要点要拆解清楚:操作系统级的环境变量修改相对简单,但oratab、listener.ora这些配置文件分散在不同路径,新手容易漏改。特别要注意cluster环境不能直接操作这点必须强调,很多生产库是RAC环境。最后考虑补充两个实用技巧:如何验证修改是否彻底成功(比如检查v$instance)、以及修改后发现问题的回退方案。用户真正怕的不是操作复杂,而是改完后数据库起不来。</think> 以下是修改Oracle数据库SID的**完整步骤及关键注意事项**,适用于Linux环境(Windows需调整路径): ### 修改步骤 1. **停机备份**(强制) 立即停止所有关联应用,执行完整数据库备份(包括控制文件、数据文件、归档日志)[^3]。 2. **关闭数据库实例** ```bash sqlplus / as sysdba > shutdown immediate; > exit ``` 3. **修改环境变量** 编辑Oracle用户的环境配置文件(如 `.bash_profile`): ```bash vi /home/oracle/.bash_profile ``` 修改: ```bash export ORACLE_SID=新SID名称 # 例如从ORCL改为NEWSID ``` 生效配置: ```bash source /home/oracle/.bash_profile ``` 4. **修改实例配置文件** 重命名 `spfile` 和 `pfile`: ```bash cd $ORACLE_HOME/dbs mv spfile旧SID.ora spfile新SID.ora mv init旧SID.ora init新SID.ora ``` 5. **更新监听器配置** 修改 `listener.ora`: ```bash vi $ORACLE_HOME/network/admin/listener.ora ``` 替换所有旧SID为`新SID`(特别是`SID_NAME`和`GLOBAL_DBNAME`)[^3]。 6. **调整 oratab 文件** ```bash vi /etc/oratab ``` 修改实例行为 `新SID:$ORACLE_HOME:Y` 7. **重启数据库与服务** ```bash sqlplus / as sysdba > startup > exit lsnrctl reload # 重载监听配置 ``` 8. **验证修改** ```sql SELECT instance_name FROM v$instance; -- 应显示新SID ``` --- ### ⚠️ 关键注意事项 1. **风险提示** - **不支持在线修改**:必须完全停机操作[^3] - **RAC环境禁止使用此方法**:需通过DBCA工具迁移 - **备份优先**:无备份直接操作可能导致数据不可恢复 2. **配置同步要求** - 所有脚本、作业计划(crontab)中的SID需同步更新 - 应用连接串(如JDBC URL)需修改为新SID 3. **替代方案建议** 若数据库允许停机较长时间,优先使用 **DBCA克隆数据库**: ```bash dbca -silent -createDuplicateDB -gdbName 新DB名 -sidSID -primaryDBConnectionString 原连接串 ``` 安全性更高,避免手动操作遗漏。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值