数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

oracle 更改数据库名的方法


发布日期:2023年04月12日
 
oracle 更改数据库名的方法
如何修改数据库名(db_name)及实例名(Instance_name or Service_name)

Nid是Oracle从iR开始提供的工具可以用来更改数据库名称而无需通过之前重建控制文件等繁琐方式

nid是自带的工具在oracle_home/bin目录中以下方法假设登陆到数据库本机做

目的在本例中假设原来的数据库名为orcl要改成dborcl原实例名(service_nameinstance_name)orcl要改成dborcl

步骤概述

检查当前的参数情况

shutdown数据库然后mount数据库

运行nid命令

更改参数文件pfileora(db_nameinstance_name)

检测更改情况

如果是windows平台要修改服务

修改监听服务

C:\Documents and Settings\Administrator>sqlplus /as sysdba

SQL*Plus: Release Production on 星期四 ::

Copyright (c) Oracle All rights reserved

连接到:

Oracle Database g Enterprise Edition Release Production

With the Partitioning OLAP and Data Mining options

SQL> select * from v$version;

BANNER

Oracle Database g Enterprise Edition Release Prod

PL/SQL Release Production

CORE Production

TNS for bit Windows: Version Production

NLSRTL Version Production

查看更改前的相应名称

SQL> show parameter name

NAME TYPE VALUE

db_file_name_convert string

db_name string orcl

db_unique_name string orcl

global_names boolean FALSE

instance_name string orcl

lock_name_space string

log_file_name_convert string

service_names string orcl

先shutdown数据库

SQL> shutdown immediate

数据库已经关闭

已经卸载数据库

ORACLE 例程已经关闭

nid需要在mount状态下才能做因为要更改控制文件的信息

SQL> startup mount

ORACLE 例程已经启动

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

数据库装载完毕

nid是操作系统的命令所以要用host

SQL> host nid help

DBNEWID: Release Production on Fri Oct ::

Copyright (c) Oracle All rights reserved

Keyword Description (Default)

TARGET Username/Password (NONE)

DBNAME New database name (NONE)

LOGFILE Output Log (NONE)

REVERT Revert failed change NO

SETNAME Set a new database name only NO

APPEND Append to output log NO

HELP Displays these messages NO

以上是nid命令的语法

运行nid命令

SQL> host nid target=sys/aibo dbname=dborcl

DBNEWID: Release Production on 星期四 ::

Copyright (c) Oracle All rights reserved

已连接数据库 ORCL (DBID=)

已连接服务器版本

数据库中的控制文件数:

D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL

D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL

D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL

是否将数据库 ID 和数据库名 ORCL 更改为 DBORCL? (Y/[N]) => y

操作继续进行

将数据库 ID 从 更改为

将数据库名从 ORCL 更改为 DBORCL

控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL 已修改

控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL 已修改

控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL 已修改

数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\SYSTEMDBF dbid 已更改

已写入新名称

数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\UNDOTBSDBF dbid 已更改

已写入新名称

数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\SYSAUXDBF dbid 已更改

已写入新名称

数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\USERSDBF dbid 已更改

写入新名称

数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\EXAMPLEDBF dbid 已更改

已写入新名称

数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\TEMPDBF dbid 已更改

写入新名称

控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL dbid 已更改

已写入新名称

控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL dbid 已更改

已写入新名称

控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL dbid 已更改

已写入新名称

实例关闭

数据库名已更改为 DBORCL

修改参数文件并在重新启动前生成新的口令文件

数据库 DBORCL 的数据库 ID 已更改为

此数据库的所有以前的备份和归档重做日志均不可用

数据库无法识别恢复区中以前的备份和归档日志

数据库已关闭 用 RESETLOGS 选项打开数据库

已成功更改数据库名和 ID

DBNEWID 已成功完成

shutdown数据库

SQL> shutdown immediate

ORA: ORACLE not available

ORA: shared memory realm does not exist

SQL> startup nomount

ORACLE 例程已经启动

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

SQL> create pfile=D:\oracle\product\\pfileora from spfile;

文件已创建

SQL> shutdown immediate;

ORA: ??????

修改初始化参数文件spfile文件(initora/spfile)

###########################################

instance_name=eyglen

#instance_name=eyglev

###########################################

db_domain=

db_name=eyglen

# db_name=eyglev

###########################################

以修改后的参数启动数据库

SQL> startup pfile=D:\oracle\product\\pfileora

ORACLE 例程已经启动

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

数据库装载完毕

ORA: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> create spfile from pfile=D:\oracle\product\\pfileora

;

文件已创建

SQL> shutdown immediate

ORA: 数据库未打开

已经卸载数据库

ORACLE 例程已经关闭

SQL> startup

ORACLE 例程已经启动

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

数据库装载完毕

ORA: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> alter database open noresetlogs

;

alter database open noresetlogs

*

行出现错误:

ORA: 要打开数据库则必须使用 RESETLOGS 选项

SQL> alter database open resetlogs

;

数据库已更改

现在数据库已经启动了啊那就检查下吧看看是否已经修改了

SQL> select open_mode from v$database;

OPEN_MODE

READ WRITE

SQL> show parameter name

NAME TYPE VALUE

db_file_name_convert string

db_name string dborcl

db_unique_name string dborcl

global_names boolean FALSE

instance_name string dborcl

lock_name_space string

log_file_name_convert string

service_names string dborcl

SQL>

SQL> select instance_name from v$instance;

INSTANCE_NAME

orcl

发现v$instance里的没有修改过来这是因为在windows平台继续如下操作

********如果是windows平台v$instance里的instanc_name没有变 继续如下操作

passwd文件通常放在oracle_home/database目录下文件命名形式为PWDsidorasid为实例名(Service_name)

如当前的数据库名及service_name为orcl则passwd文件为PWDorclora

C:\Documents and Settings\Administrator>orapwd file=D:\oracle\product\\db_

\database\PWDdborclora password=aibo entries=

要注意一下此时虽然数据库名已经改成dborcl了但instance_name还是orcl所以passwd文件必须跟以前一样否则会出错

删除以前的实例orcl

C:\Documents and Settings\Administrator>oradim delete sid orcl

实例已删除

创建新的实例名 dborcl

C:\Documents and Settings\Administrator>oradim new sid dborcl intpwd aibo st

artmode a pfile D:\oracle\product\\pfileora

OPW: 存在相同名称的文件 请删除或重命名

实例已创建

C:\Documents and Settings\Administrator>set oracle_sid=dborcl

C:\Documents and Settings\Administrator>sqlplus /as sysdba

SQL*Plus: Release Production on 星期四 ::

Copyright (c) Oracle All rights reserved

连接到:

Oracle Database g Enterprise Edition Release Production

With the Partitioning OLAP and Data Mining options

SQL> quit

从 Oracle Database g Enterprise Edition Release Production

With the Partitioning OLAP and Data Mining options 断开

检查服务名

C:\Documents and Settings\Administrator>lsnrctl reload

LSNRCTL for bit Windows: Version Production on :

:

Copyright (c) Oracle All rights reserved

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=)))

命令执行成功

C:\Documents and Settings\Administrator>sqlplus /as sysdba

SQL*Plus: Release Production on 星期四 ::

Copyright (c) Oracle All rights reserved

连接到:

Oracle Database g Enterprise Edition Release Production

With the Partitioning OLAP and Data Mining options

SQL> select open_mode from v$database;

OPEN_MODE

READ WRITE

SQL> select instance_name from v$instance;

INSTANCE_NAME

dborcl

SQL> show parameter name;

NAME TYPE VALUE

db_file_name_convert string

db_name string dborcl

db_unique_name string dborcl

global_names boolean FALSE

instance_name string dborcl

lock_name_space string

log_file_name_convert string

service_names string dborcl

SQL> quit

从 Oracle Database g Enterprise Edition Release Production

With the Partitioning OLAP and Data Mining options 断开

检查service是否被更改

C:\Documents and Settings\Administrator>tnsping dborcl

TNS Ping Utility for bit Windows: Version Production on

::

Copyright (c) Oracle All rights reserved

已使用的参数文件:

D:\oracle\product\\db_\network\admin\sqlnetora

已使用 EZCONNECT 适配器来解析别名

Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=dborclgdgglocal

))(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=)))

^C

测试不通过说明dborcl配置有问题

修改tnsnamesora文件添加如下内容

×××××××××××××××××××××××××××××××××××××××××××××××××××××

DBORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = ))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = dborcl)

)

)

×××××××××××××××××××××××××××××××××××××××××××××××××××××

重启监听

C:\Documents and Settings\Administrator>lsnrctl reload

LSNRCTL for bit Windows: Version Production on :

:

Copyright (c) Oracle All rights reserved

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=)))

命令执行成功

在测试

C:\Documents and Settings\Administrator>tnsping dborcl

TNS Ping Utility for bit Windows: Version Production on

::

Copyright (c) Oracle All rights reserved

已使用的参数文件:

D:\oracle\product\\db_\network\admin\sqlnetora

已使用 TNSNAMES 适配器来解析别名

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =

)(PORT = )) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dborcl)

))

OK ( 毫秒)

到此所有的 数据库名(db_name)及实例名(Instance_name or Service_name) 都已经更改               

上一篇:大数据面临的挑战

下一篇:在OracleE数据库的字段上建立索引的方法