oracle数据库之DBNAME和DBID

一、查看DBID

(1)使用rman查看

$ rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on Fri Jun 12 03:20:19 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DBTEST (DBID=1275017193)

RMAN>

(2)使用sqlplus查看

SQL> select dbid,name,open_mode from v$database;   #查看数据库的dbid

   DBID           NAME           OPEN_MODE
-----------     -------        ---------------
1553428630        SHP            READ WRITE

(3)dump文件查看

#dump日志文件
SQL> alter system dump logfile ‘/u01/app/oracle/oradata/dbtest/redo01.log‘;

#dump数据文件
SQL> alter system dump datafile ‘/u01/app/oracle/oradata/dbtest/users01.dbf‘ block min 1 block max 4;

#dump归档日志
SQL> alter system dump  logfile ‘/home/oracle/arch/1_11_882154347.dbf‘;

然后查看dump文件的内容
查看oracle 数据库的DBID

二、使用NID修改DBNAME和DBID

nid详解

我们知道,在数据库内部,数据库的DBNAME和DBID是数据库标识符,其中,DBID更是数据库的唯一标识符,如果要重新调整数据库的名字,一般是要重建控制文件,为数据库赋予新的名称 (DBNAME);
但是,更改实例的内部数据库标识符 (DBID) 是不可能的,这样对于恢复管理器 (RMAN)来说,由于是通过 DBID来区分数据库的,因此无法在同一个RMAN存储库中同时注册种子数据库和重建之后的数据库。
对此,Oracle专门提供的数据库名字修改工具NID(DBNEWID),解决了这个问题。
NID(DBNEWID)实用程序是在Oracle 10g中引入的,是一个数据库实用程序,位于 $ORACLE_HOME/bin 目录中,可以更改操作数据库的内部数据库标识符 (DBID) 和数据库名称 (DBNAME)。

NID用途:
只修改数据库的DBID(无法指定值修改);
只修改数据库的DBNAME;
同时修改数据库的DBNAME和DBID(无法指定值修改);

注意:

  1. 如果仅调整DBNAME,调整之后,数据库是不需要使用RESETLOGS选项就可以正常打开,数据库备份和存档日志都不会失效。调整DBNAME的影响是: 需要调整初始化参数文件中的db_name参数;需要重新创建 Oracle密码文件.
  2. 如果仅调整数据库的DBID,由于更改数据库的DBID是一个全局的操作,一旦数据库的DBID发生改变,对应该数据库的所有备份和存档日志将不再可用,所以在更改数据库DBID之后,必须使用RESETLOGS选项打开数据库,那么数据库会将联机重做日志的序列重置为1,因此,建议在调整数据库的DBID之后应立即对整个数据库进行备份。

NID 实用程序的参数:

[oracle@dkf ~]$ nid -help

DBNEWID: Release 19.0.0.0.0 - Production on Thu Dec 22 17:45:01 2022

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  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

[oracle@dkfdg ~]$ 

翻译如下:
DBNEWID:发布11.2.0.4.0-2023年3月20日星期一16:46:15制作

版权所有(c)19822011,Oracle和/或其附属公司。保留所有权利。

关键字       描述                 (默认)
----------------------------------------------------
TARGET    用户名/密码	              ()
DBNAME    新数据库名称              ()
LOGFILE   输出日志                 ()
REVERT    还原失败更改               否
SETNAME   仅设置新数据库名称          否
APPEND    附加到输出日志             否
HELP      显示这些消息			   否

  • TARGET输入用户名和密码,注意,该用户必须具有sysdba的权限。譬如target=sys/oracle,当然,如果我们是在操作系统本地操作的话,可用反斜杠连接,即target=/

  • REVERT指明一个失败的DBID操作是否需要回退。默认是NO。注意,如果数据库的DBID修改成功,该操作无法回退。该回退操作只针对失败的DBID修改操作。

  • DBNAME指定新的数据库名。

  • SETNAME默认是NO,则该数据库将同时修改DBID和DBNAME。如果指定为YES,则该数据库将只修改DBNAME

  • LOGFILE日志文件,记录操作信息,默认是覆盖上个日志文件。如果APPEND设为YES的话,则这次操作信息将被追加到上个日志文件中。APPEND默认是NO。

  • HELP用来提示DBNEWID的语法规则。默认为NO

在19c数据库上使用nid修改数据库DBID和DBNAME参数:

建议调整之前对数据库进行全量备份
建议在调整DBNAE和DBID前对数据库进行全备,全备备份脚本示例:

[oracle@dkf ~]$cat /oracle/ods_backup/bak0.sh 
#!/bin/bash 
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export ORACLE_SID=dkf006 
export DATE=`date +%F` 
export BACK_DIR='/u01/app/rmanbak' 
mkdir -p $BACK_DIR/$DATE 
//u01/app/oracle/product/19.3.0/dbhome_1/bin/rman log=$BACK_DIR/$DATE/rman_backup_$DATE.log target / <<EOF 
run{ 
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS; 
    CONFIGURE CONTROLFILE AUTOBACKUP ON; 
    CONFIGURE CONTROLFILE autobackup format for device type disk to '$BACK_DIR/$DATE/CONTROLFILE.%F'; 
    ALLOCATE CHANNEL disk1 DEVICE TYPE DISK FORMAT '$BACK_DIR/$DATE/full_%d_%T_%s.bak'; 
    ALLOCATE CHANNEL disk2 DEVICE TYPE DISK FORMAT '$BACK_DIR/$DATE/full_%d_%T_%s.bak'; 
    ALLOCATE CHANNEL disk3 DEVICE TYPE DISK FORMAT '$BACK_DIR/$DATE/full_%d_%T_%s.bak'; 
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; 
    BACKUP  DATABASE SKIP INACCESSIBLE FILESPERSET 10 PLUS ARCHIVELOG FILESPERSET 20 DELETE ALL INPUT; 
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; 
    RELEASE channel disk1; 
    RELEASE channel disk2; 
    RELEASE channel disk3; 
} 
EOF 
exit 

1、只调整数据库的DBID

1、查询数据库的信息

SQL> select dbid, name from v$database; 
DBID        NAME 
---------- --------- 
2651711443 dkf006 

2、正常关闭数据库,并将数据库启动到mount状态

SQL> SHUTDOWN IMMEDIATE 
SQL> STARTUP MOUNT 

3、直接调用NID工具,连接数据库,不需要指定DBNAME

[oracle@dkf ~]$ nid target=sys/oracle

DBNEWID: Release 19.0.0.0.0 - Production on Thu Dec 22 17:29:24 2022

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Connected to database DKF006 (DBID=2651711443)

Connected to server version 19.3.0

Control Files in database:
    +DATA/DKF006/CONTROLFILE/current.261.1101088595

Change database ID of database DKF006? (Y/[N]) => Y

Proceeding with operation
Changing database ID from 2651711443 to 2674719348
    Control File +DATA/DKF006/CONTROLFILE/current.261.1101088595 - modified
    Datafile +DATA/DKF006/DATAFILE/system.257.110108848 - dbid changed
    Datafile +DATA/DKF006/DATAFILE/sysaux.258.110108852 - dbid changed
    Datafile +DATA/DKF006/DATAFILE/undotbs1.259.110108853 - dbid changed
    Datafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.266.110108879 - dbid changed
    Datafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.267.110108879 - dbid changed
    Datafile +DATA/DKF006/DATAFILE/users.260.110108853 - dbid changed
    Datafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.268.110108879 - dbid changed
    Datafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/system.272.110108943 - dbid changed
    Datafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/sysaux.273.110108943 - dbid changed
    Datafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/undotbs1.271.110108943 - dbid changed
    Datafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/users.275.110108945 - dbid changed
    Datafile +DATA/DKF006/DATAFILE/test.280.110739837 - dbid changed
    Datafile +DATA/DKF006/TEMPFILE/temp.265.110108860 - dbid changed
    Datafile +DATA/DKF006/DBCED86261CB7148E0550A002762E1A4/TEMPFILE/temp.269.110108882 - dbid changed
    Datafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/TEMPFILE/temp.274.110108943 - dbid changed
    Control File +DATA/DKF006/CONTROLFILE/current.261.1101088595 - dbid changed
    Instance shut down

Database ID for database DKF006 changed to 2674719348.
All previous backups and archived redo logs for this database are unusable.
Database has been shutdown, open database with RESETLOGS option.
Succesfully changed database ID.
DBNEWID - Completed succesfully.

4、 操作成功,打开数据库,会提示数据库需要用resetlogs打开:

SQL> startup
ORACLE instance started.

Total System Global Area 1241510080 bytes
Fixed Size                  9134272 bytes
Variable Size             402653184 bytes
Database Buffers          822083584 bytes
Redo Buffers                7639040 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

SQL> 

5、使用resetlogs打开数据库:

SQL> alter database open RESETLOGS;

Database altered.

SQL> 

2、只调整数据库的DBNAME

1、查询数据库的信息

SQL> select dbid, name from v$database; 
DBID      NAME 
---------- --------- 
2651711443 dkf006 

2、正常关闭数据库,并将数据库启动到mount状态

SQL> SHUTDOWN IMMEDIATE 
SQL> STARTUP MOUNT 

3、使用 DBNEWID (NID) 工具更改数据库的DBNAME

[oracle@dkf ~]$ nid TARGET=sys/oracle DBNAME=dkf007 SETNAME=YES 

DBNEWID: Release 19.0.0.0.0 - Production on Thu Dec 22 18:16:10 2022

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Connected to database DKF006 (DBID=2674719348)

Connected to server version 19.3.0

Control Files in database:
    +DATA/DKF006/CONTROLFILE/current.261.1101088595

Change database name of database DKF006 to DKF007? (Y/[N]) => Y

Proceeding with operation
Changing database name from DKF006 to DKF007
    Control File +DATA/DKF006/CONTROLFILE/current.261.1101088595 - modified
    Datafile +DATA/DKF006/DATAFILE/system.257.110108848 - wrote new name
    Datafile +DATA/DKF006/DATAFILE/sysaux.258.110108852 - wrote new name
    Datafile +DATA/DKF006/DATAFILE/undotbs1.259.110108853 - wrote new name
    Datafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.266.110108879 - wrote new name
    Datafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.267.110108879 - wrote new name
    Datafile +DATA/DKF006/DATAFILE/users.260.110108853 - wrote new name
    Datafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.268.110108879 - wrote new name
    Datafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/system.272.110108943 - wrote new name
    Datafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/sysaux.273.110108943 - wrote new name
    Datafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/undotbs1.271.110108943 - wrote new name
    Datafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/users.275.110108945 - wrote new name
    Datafile +DATA/DKF006/DATAFILE/test.280.110739837 - wrote new name
    Datafile +DATA/DKF006/TEMPFILE/temp.265.110108860 - wrote new name
    Datafile +DATA/DKF006/DBCED86261CB7148E0550A002762E1A4/TEMPFILE/temp.269.110108882 - wrote new name
    Datafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/TEMPFILE/temp.274.110108943 - wrote new name
    Control File +DATA/DKF006/CONTROLFILE/current.261.1101088595 - wrote new name
    Instance shut down

Database name changed to DKF007.
Modify parameter file and generate a new password file before restarting.
Succesfully changed database name.
DBNEWID - Completed succesfully.

DBNEWID 在尝试对文件进行 I/O 之前在控制文件(不是数据文件)的头中执行验证。如果验证成功,则 DBNEWID 会提示确认,更改控制文件中的数据库名称,然后退出,DBNEWID 成功完成后,数据库会自动进行关闭。

4、更新pfile文件并创建密码文件(如有必要)
此实用程序不会更改 pfile 中的数据库名称,因此请手动更改 pfile 中的数据库名称 (DB_NAME) 并创建密码文件(如有必要)。

如果操作失败,要恢复更改,请再次运行 DBNEWID 实用程序,指定 REVERT 关键字。

[oracle@dkfdg ~]$ nid TARGET=sys/oracle  REVERT=YES LOGFILE=rollback.log 

3、同时更改数据库的DBNAME和DBID

1、查询数据库的信息

SQL> select dbid, name from v$database; 
DBID      NAME 
---------- --------- 
2651711443 dkf006 

2、正常关闭数据库,并将数据库启动到mount状态

SQL> SHUTDOWN IMMEDIATE 
SQL> STARTUP MOUNT 

3、使用 DBNEWID (NID) 工具更改数据库的DBNAME和DBID
注意:DBNEWID 实用程序在尝试对文件进行 I/O 之前在数据文件和控制文件的标头中执行验证。如果验证成功,则 DBNEWID 会提示确认操作(除非您指定日志文件,在这种情况下它不会提示),更改所有数据文件中的 DBID,数据库会进行关闭,然后退出。

$ nid TARGET=sys/password DBNAME=dkf007 LOGFILE =change_dbname.log 

4、更新spfile文件并创建密码文件(如有必要)
此实用程序不会更改 spfile 中的数据库名称,因此请手动更改 spfile 中的数据库名称 (DB_NAME) 并创建密码文件(如有必要)。

三、Oracle 设置指定DBID

在一些特殊的情况下,我们可能需要修改数据库的DBID,有时候可能仅仅是修改控制文件的。
从Oracle10g开始,Oracle在DBMS_BACKUP_RESTORE包中增加了几个PROCEDURE用来完成这个工作。

查询源数据库的DBID

用rman登陆数据库或者select dbid from v$database;。

源DBID=392820279。

登陆到目标数据库,查看DBID

[oracle@MICHAEL ~]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Tue Apr 14 00:27:31 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

connected to target database: MICHAEL (DBID=393099115)

RMAN>

或:

[oracle@MICHAEL ~]$ sqlplus  /  as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Apr 14 00:33:28 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> select dbid from v$database;

DBID

----------

393099115

使用DBMS_BACKUP_RESTORE设置DBID

如果你遇到数据库DBMS_BACKUP_RESTORE不存在的情况:

SQL> DESC DBMS_BACKUP_RESTORE
ERROR:
ORA-04043: 对象 DBMS_BACKUP_RESTORE 不存在 

可以通过运行 $ORACLE_HOME/rdbms/admin/dbmsbkrs.sql 来创建!

相关参数设置:

SQL> exec dbms_backup_restore.nidbegin(‘michael’,‘MICHAEL’,‘392820279’,393099115,0,0,10)

Param 1:目标数据库的实例名,即dbname对应的VALUE。

Param 2:为更改后的实例名,必须大写。

Param 3:为更改后的DBID。

Param 4:为原来的DBID。

1、连接数据库

[oracle@MICHAEL ~]$ sqlplus "/ as sysdba"

2、修改DBID

SQL> show parameter db_name

NAME        TYPE        VALUE
-------- ----------- ------------
db_name    string      michael

SQL> exec dbms_backup_restore.nidbegin('michael','MICHAEL','392820279', '393099115',0,0,10)
PL/SQL procedure successfully completed.

此时查看发现DBID还是原来的,并未修改。

SQL> select dbid from v$database;

DBID
----------
393099115

接下来执行下面步骤来使修改生效:

SQL> variable a number;
SQL> variable b number;
SQL> variable c number;

SQL> exec dbms_backup_restore.nidprocessdf(0,0,:a,:b,:c);
PL/SQL procedure successfully completed.

SQL> print :a

A
----------
0


SQL> print :b

B
----------
1


SQL> print :c

C
----------
1


SQL> exec dbms_backup_restore.nidprocesscf(:a,:b);
PL/SQL procedure successfully completed.

SQL> print :a

A
----------
1


SQL> print :b

B
----------
1


SQL> exec dbms_backup_restore.nidend;
PL/SQL procedure successfully completed.


3、验证修改结果

SQL> select dbid from v$database;

DBID
----------
392820279
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux系统中重启Oracle数据库,可以使用以下命令: 1. 使用sqlplus登录到数据库: ``` sqlplus / as sysdba ``` 2. 关闭数据库: ``` shutdown immediate; ``` 3. 重新启动数据库: ``` startup; ``` 也可以使用srvctl 命令重启数据库 ``` srvctl stop database -d <dbname> srvctl start database -d <dbname> ``` 需要注意的是,在重启数据库之前,应该先确保数据库处于正确的状态,并且应该有足够的时间来完成重启过程。 ### 回答2: 在Linux系统中重启Oracle数据库可以通过以下步骤实现: 1. 以root用户登录Linux系统,并打开终端。 2. 使用oracle用户登录到数据库服务器,一般为oracle用户。 3. 进入Oracle的安装目录,例如:cd /u01/app/oracle/product/11.2.0/db_1/ (根据实际安装路径进行修改) 4. 执行以下命令进入数据库控制台:./sqlplus / as sysdba 5. 输入正确的用户名和密码以登录数据库。 6. 在SQL*Plus提示符下执行以下命令来关闭数据库SQL> shutdown immediate; 这会使用“immediate”模式关闭数据库。需要注意的是,如果有未提交的事务,数据库无法立即关闭,将会执行一些回滚操作。 7. 等待数据库完全关闭后,使用以下命令重启数据库SQL> startup; 这将会启动数据库,并同时打开实例和监听器。 8. 检查数据库的状态是否为“open”: SQL> select status from v$instance; 如果返回结果为“open”,则表示数据库已成功重启。 重启Oracle数据库可能需要一些时间,具体取决于数据库的大小和系统性能。重启期间需要确保数据库在正常关闭之前没有正在执行的重要任务。如果数据库无法正常关闭,则可以尝试使用“abort”模式关闭数据库,但这可能导致数据库的一些数据丢失。因此,在重启之前,最好确保所有提交的事务都已成功,避免数据丢失的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值