我可以更改Oracle数据库的SID吗?


18

服务器是Oracle Database 11g企业版11.1.0.7.0版-64位

有没有简单快捷的方法来更改服务器上测试数据库的SID?

删除和重新创建数据库是我的一个选择。但我正在寻找需要更少时间的东西。

在客户端tnsnames.ora中分配名称的另一个选项容易出错,因为它们不是集中管理的。

与在SQL Server上删除和创建数据库的时间相比,创建新的Oracle数据库所需的时间过长。进一步在SQL Server上,您可以重命名SQL Server实例。[通常,您重命名运行SQL-Server的服务器,并且在重命名服务器之前也会遇到一些问题]。


您提到可以删除并重新创建数据库。您可以访问生产数据库及其备份吗?您可以使用RMAN和重复命令来重新创建数据库并同时更改SID。
Sumnibot 2011年

不,我作为DBA负责开发和测试一些Oracle数据库。
bernd_k 2011年

2
在SQL Server中使用数据库时,通常在Oracle中使用架构(= user)。在这两个世界中,相同的名称并不意味着相同的事情
a_horse_with_no_name

Answers:


13

由于9i可以使用dbnewid实用程序(nid)来更改数据库名称(如果需要,还可以更改DBID)。如果仅更改数据库名称,则不需要resetlogs:

  • 1个处于装载模式的启动数据库

    shutdown immediate
    startup mount
    
  • 2运行nid更改数据库名称:

    nid target=sys/syspassword@dbtns dbname=newname setname=YES
  • 3在挂载模式下关闭并启动数据库:

    shutdown immediate
    startup mount
    
  • 4更改db_namespfile(或在pfile中编辑文件):

    alter system set db_name=newname scope=spfile;
  • 5重新创建密码文件:

    orapwd file=orapwnewname password=syspassword
  • 6启动数据库

    startup
  • 7个帖子重命名步骤:

    change SID in listener.ora
    correct tnsnames.ora
    remove old trace directories
    change /etc/oratab (UNIX) or rename windows service using oradim
    

1
我以此方式在Windows Server上重命名了4个oracle数据库。在搜索dbnewid实用程序时,我找到了oracle-base.com/articles/9i/DBNEWID.php,它提供了一些附加说明。
bernd_k 2011年

1
当问题是:如何重命名数据库时,这是一个很好的答案。问题是:如何更改SID。
ik_zelf 2012年

17

您需要重新创建控制文件

职位由Kaunain艾哈迈德介绍了必要的步骤:

  1. 这样做:更改数据库备份控制文件以进行跟踪;
  2. 从background-dump-destination跟踪文件中提取“ create controlfile”命令。
  3. 关闭数据库。
  4. 更改init.ora中的DB-Name并更改init.ora
  5. 在/ etc / oratab或/ var / opt / oracle / oratab中更改SID
  6. 在您的环境中更改SID并获取它
  7. 将数据库启动到安装状态启动安装
  8. 用位置2的语句重新创建控制文件。
  9. 做一个更改数据库,将global_name重命名为10。相应地更改TNS配置$ ORACLE_HOME / network / admin / *。ora查找SID和GLOBAL_NAME

线程中还引用了其他工具。

这是AskTom 的帖子,其中详细介绍了该过程。虽然是10克,但仍然可以使用。


5
对于Windows用户,值得注意的是,您还需要使用“ oradim”实用程序来设置新服务。
REW

9

是的,您可以,而且也很容易。

在Oracle中,ORACLE_SID只是Oracle实例的名称,与DBNAME无关。可以使用具有任何有效名称的实例为名称为PROD的数据库提供服务。SID与DBNAME之间没有直接连接。使用参数进行此连接。

参数文件被标识为init $ {ORACLE_SID} .ora或spfile $ {ORACLE_SID} .ora在参数文件中是参数db_name。这是在Oracle实例和数据库之间建立连接的地方。

因此,您无需重新创建控制文件,也无需使用nid,只需在设置ORACLE_SID后确保参数文件具有正确的名称,关闭旧的Oracle实例并启动新的Oracle实例即可。到新的Oracle实例名称。可以使用$ {ORACLE_SID}作为其名称的一部分来找到参数文件和密码文件。

仅在必须更改DBNAME时才需要重新创建控制文件。克隆操作后需要nid,在克隆操作中,您需要更改DBID以防止可能损害源数据库备份的事故。


+1,但我仍然不确定是否也要更改DB_NAME。
bernd_k 2011年

如果您愿意:可以,其他答案正确地说明了如何执行此操作。您出于什么原因会这样做?db_name非常物理。知道db_name对于dba是有益的,但是对于大多数其他人来说则无关紧要。在通常的合并方法中,您有一个可提供许多服务的数据库。服务-应用程序-无需关心它在哪个数据库中运行。
ik_zelf 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.