网站首页 > 技术文章 正文
概述
NID 实用程序是在Oracle 10g中引入的。DBNEWID 是一个数据库实用程序,位于 $ORACLE_HOME/bin 目录中,可以更改操作数据库的内部数据库标识符 (DBID) 和数据库名称 (DBNAME)。在引入 DBNEWID 实用程序之前,我们曾经手动创建数据库的副本,并通过重新创建控制文件为其赋予新的数据库名称 (DBNAME)。但是,更改实例的内部数据库标识符 (DBID) 是不可能的。
DBID 是数据库的内部唯一标识符。由于恢复管理器 (RMAN)通过 DBID 区分数据库,因此您无法在同一个 RMAN 存储库中同时注册种子数据库和手动复制的数据库。DBNEWID 实用程序解决了这个问题。
NID 实用程序允许我们更改
- 只有数据库的 DBID
- 只有数据库的 DBNAME
- 数据库的 DBNAME 和 DBID
更改数据库的 DBID 是一个严肃的过程。当数据库的 DBID 更改时,该数据库的所有先前备份和存档日志将变得不可用。更改 DBID 后,必须使用 RESETLOGS 选项打开数据库,该选项会重新创建联机重做日志并将其序列重置为 1。因此,更改 DBID 后应立即备份整个数据库。
在不更改 DBID 的情况下更改 DBNAME 不需要您使用 RESETLOGS 选项打开,因此数据库备份和存档日志不会失效。但是,更改 DBNAME 确实会产生影响。您必须在数据库名称更改后更改 DB_NAME 初始化参数以反映新名称。此外,您可能需要重新创建 Oracle密码文件. 如果您恢复控制文件的旧备份(在名称更改之前),那么您应该使用数据库名称更改之前的初始化参数文件和密码文件。
NID 实用程序的参数(Oracle 10g 和Oracle 11g 中的参数相同):
$ nid help=y
Keyword | Description |
TARGET | Username/Password |
DBNAME | New database name |
LOGFILE | Output log |
REVERT | Revert failed change (YES/NO)? |
SETNAME | Set name only (YES/NO)? |
APPEND | Append to output log (YES/NO)? |
HELP | Displays help messages (YES/NO)? |
- 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
一、更改 DBNAME & DBID
1、查询数据库的信息
SQL> select dbid, name from v$database;
DBID NAME
---------- ---------
1744662402 SFMv
2、 备份数据库
备份脚本示例:
[localhost]$cat /oracle/ods_backup/bak0.sh
#!/bin/bash
export ORACLE_HOME=/oracle/ods/12201
export ORACLE_SID=orcl
export DATE=`date +%F`
export BACK_DIR='/oracle/ods_backup'
mkdir -p $BACK_DIR/$DATE
/oracle/ods/12201/bin/rman log=$BACK_DIR/$DATE/rman_backup_$DATE.log target / <<EOF
run{
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 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';
CROSSCHECK BACKUP;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED BACKUP;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
DELETE NOPROMPT OBSOLETE;
RELEASE channel disk1;
RELEASE channel disk2;
RELEASE channel disk3;
}
EOF
export EXPIRE_DATE=`date +%F -d '+7 day ago'`
rm -rf $BACK_DIR/$EXPIRE_DATE
exit
3、在干净关闭后挂载数据库
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP MOUNT
4、调用 DBNEWID (NID) 实用程序
调用 DBNEWID (NID) 实用程序,使用具有 SYSDBA 权限的用户从命令行指定 DBNAME。
$ nid TARGET=sys/password DBNAME=new_name LOGFILE =change_dbname.log
DBNEWID 实用程序在尝试对文件进行 I/O 之前在数据文件和控制文件的标头中执行验证。如果验证成功,则 DBNEWID 会提示您确认操作(除非您指定日志文件,在这种情况下它不会提示),更改所有数据文件中的 DBID,然后退出。数据库处于挂载状态,但尚不可用。
5、更新pfile文件并创建密码文件(如有必要)
此实用程序不会更改 pfile 中的数据库名称,因此请手动更改 pfile 中的数据库名称 (DB_NAME) 并创建密码文件(如有必要)。
- 挂载数据库SQL> STARTUP MOUNT
- 以 RESETLOGS 模式打开数据库,恢复正常使用SQL> ALTER DATABASE OPEN RESETLOGS;
SQL> select dbid, name from v$database;
DBID NAME
---------- ---------
1748860243 SFM_DEV
6、进行新的数据库备份
由于您已重置联机重做日志,因此旧的备份和归档日志在当前的数据库中不再可用。
二、Changing only DBNAME
在命令行上调用该实用程序;您必须同时指定 DBNAME 和 SETNAME 参数。
$ nid TARGET=SYS/password DBNAME=newname SETNAME=YES
DBNEWID 在尝试对文件进行 I/O 之前在控制文件(不是数据文件)的头中执行验证。如果验证成功,则 DBNEWID 会提示确认,更改控制文件中的数据库名称,然后退出。DBNEWID 成功完成后,数据库仍处于挂载状态但尚不可用。
如果操作成功,更新init文件后启动数据库。
如果操作失败,要恢复更改,请再次运行 DBNEWID 实用程序,指定 REVERT 关键字。
$ nid TARGET=SYS/password REVERT=YES LOGFILE= backout.log
三、Changing only DBID
在命令行上调用该实用程序;不要指定 DBNAME。
$ nid TARGET=SYS/password
如果操作成功,挂载数据库并用resetlogs打开。如果操作失败,要恢复更改,请再次运行 DBNEWID 实用程序,指定 REVERT 关键字。
$ nid TARGET=SYS/password REVERT=YES LOGFILE=backout.log
四、小结
觉得有帮助的朋友,欢迎收藏、点赞和转发!
猜你喜欢
- 2024-10-14 oralce用户的介绍 ora-01917:user or role
- 2024-10-14 查询所有用户的表,ORACLE下有三个视图
- 2024-10-14 Linux新手入门系列:linux下Oracle定时备份
- 2024-10-14 Oracle 设置RMAN备用用户 oracle rman全库备份
- 2024-10-14 oracle死锁介绍 oracle 死锁原因
- 2024-10-14 MySQL和Oracle相关 mysql和oracle的sql语句一样吗
- 2024-10-14 oracle账户被锁定怎么解锁 oracle账户已被锁定什么意思
- 2024-10-14 Python操作数据库(Oracle) python操作数据库的步骤
- 2024-10-14 Oracle数据库使用攻略 oracle数据库使用教程
- 2024-10-14 Oracle学习笔记三:PL/SQL developer工具安装
你 发表评论:
欢迎- 05-10如何优化数据库和前端之间的交互?
- 05-10前端代码优化小秘籍(前端优化24条建议)
- 05-10VS Code当中的15个神仙插件,值得收藏
- 05-10如何自己开发一个Google浏览器插件?
- 05-10前端流行框架Vue3教程:14. 组件传递Props效验
- 05-10吃了一年的SU,最好用的插件都在这了
- 05-10前端必看!这款神器让网站界面告别千篇一律
- 05-10程序员请收好:10个非常有用的 Visual Studio Code 插件
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)