设为首页 收藏本站
查看: 1061|回复: 0

[经验分享] ORACLE修改数据库名

[复制链接]

尚未签到

发表于 2018-9-14 11:20:04 | 显示全部楼层 |阅读模式
  引题:在实际生产环境下我们可能需要快速的复制现有的数据库,又希望新库与原库不重名,或者我们需要复制生产库用来做研发测试,如果我们采用DBCA的方式,缺点是慢并且还没有数据,就需要从新导数据,费时又麻烦。下面我就详细介绍如何修改数据库名来完成使命,采用2种方法(1.重建控制文件修改数据库名2.使用nid工具修改数据库名)
  一、重建控制文件修改数据库名
  步骤概述
  生成controlfile创建脚本并写入trace文件
  执行查找trace文件语句,获取当前trace文件路径
  停掉数据库
  只复制数据文件、redo日志(不需要复制控制文件哦!)
  生成新的initLEO2.orac纯文本参数文件
  编辑新生成的initLEO2.ora纯文本参数文件
  利用initLEO2.ora纯文本参数文件创建spfileLEO2.ora二进制参数文件、
  数据库启动到nomount状态,加载参数文件
  删除原库控制文件(如果拷贝的时候包括了控制文件的话)
  修改/u01/app/oracle/admin/LEO/udump/leo_ora_25621.trc文件的内容
  目标:我们用原库LEO复制出新库LEO2
  1.生成controlfile创建脚本并写入trace文件

  SYS@LEO>>  2.执行查找trace文件语句,获取当前trace文件路径
  SYS@LEO> select c.value || '/' || d.instance_name || '_ora_' || to_char(a.spid,'fm99999') || '.trc' from v$process a, v$session b, v$parameter c, v$instance d where a.addr = b.paddr and b.audsid = userenv('sessionid') and c.name = 'user_dump_dest';
  Trace文件路径
  C.VALUE||'/'||D.INSTANCE_NAME||'_ORA_'||TO_CHAR(A.SPID,'FM99999')||'.TRC'
  --------------------------------------------------------------------------------
  /u01/app/oracle/admin/LEO/udump/LEO_ora_25621.trc
  3.停掉数据库
  SYS@LEO> shutdown immediate
  Database closed.
  Database dismounted.
  ORACLE instance shut down.
  4.只复制数据文件、redo日志(不需要复制控制文件哦!)
  从原来的/u01/app/oracle/oradata/LEO/disk1复制到
  /u01/app/oracle/oradata/LEO2/disk1
  5.生成新的initLEO2.orac纯文本参数文件
  export ORACLE_SID=LEO
  sqlplus / as sysdba         进入原库执行命令
  SYS@LEO> create pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initLEO2.ora' from spfile;
  6.编辑新生成的initLEO2.ora纯文本参数文件
  vim initLEO2.ora
  需要修改的内容:
  (1)路径
  *.audit_file_dest='/u01/app/oracle/admin/LEO2/adump'
  *.background_dump_dest='/u01/app/oracle/admin/LEO2/bdump'
  *.control_files='/u01/app/oracle/oradata/LEO2/disk1/control01.ctl','/u01/app/oracle/oradata/LEO2/disk2/control02.ctl','/u01/app/oracle/oradata/LEO2/disk3/control03.ctl'
  *.core_dump_dest='/u01/app/oracle/admin/LEO2/cdump'
  *.user_dump_dest='/u01/app/oracle/admin/LEO2/udump'
  (2)数据库名
  *.db_name='LEO2'
  7.利用initLEO2.ora纯文本参数文件创建spfileLEO2.ora二进制参数文件
  export ORACLE_SID=LEO2
  sqlplus / as sysdba
  SYS@LEO2> create spfile from pfile;       创建spfile
  8.数据库启动到nomount状态,加载参数文件
  SYS@LEO2> startup nomount
  ORACLE instance started.
  Total System Global Area 314572800 bytes

  Fixed>
  Variable>  Database Buffers         213909504 bytes
  Redo Buffers                2973696 bytes
  SYS@LEO2> show parameter name
  NAME                                     TYPE       VALUE
  ------------------------------------ ----------- ------------------------------
  db_file_name_convert           string
  db_name                                string        LEO2
  db_unique_name                   string        LEO2
  global_names                        boolean     FALSE
  instance_name                      string        LEO2
  lock_name_space                  string
  log_file_name_convert          string
  service_names                       string        LEO2
  SYS@LEO2> select instance_name from v$instance;
  INSTANCE_NAME
  ----------------
  LEO2
  9.删除原库控制文件(如果拷贝的时候包括了控制文件的话)
  路径:
  /u01/app/oracle/oradata/LEO2/disk1/control01.ctl,
  /u01/app/oracle/oradata/LEO2/disk2/control02.ctl,
  /u01/app/oracle/oradata/LEO2/disk3/control03.ctl
  10.修改/u01/app/oracle/admin/LEO/udump/leo_ora_25621.trc文件的内容
  vim leo_ora_25621.trc
  把内容拷贝到vim test.sql临时文件中修改
  定位--    Set #2. RESETLOGS case 位置
  (1)把CREATE CONTROLFILE REUSE DATABASE "LEO" RESETLOGS NOARCHIVELOG
  修改成
  CREATE CONTROLFILE SET DATABASE "LEO2" RESETLOGS NOARCHIVELOG
  (2)把在线日志文件和数据文件的路径中的“PROD”替换成“LEO2”,修改路径
  例子:/u01/app/oracle/oradata/PROD/disk1/ 替换
  /u01/app/oracle/oradata/LEO2/disk1/
  使用:%s#PROD#LEO2#方法替换所有“PROD”
  最后的完成版并执行此脚本,就完成了控制文件的创建
  CREATE CONTROLFILE SET DATABASE "LEO2" RESETLOGS NOARCHIVELOG
  MAXLOGFILES 30
  MAXLOGMEMBERS 5
  MAXDATAFILES 100
  MAXINSTANCES 1
  MAXLOGHISTORY 292
  LOGFILE
  GROUP 1 (
  '/u01/app/oracle/oradata/LEO2/disk1/redo01.log',
  '/u01/app/oracle/oradata/LEO2/disk2/redo01_2.log'

  )>  GROUP 2 (
  '/u01/app/oracle/oradata/LEO2/disk1/redo02.log',
  '/u01/app/oracle/oradata/LEO2/disk2/redo02_2.log'

  )>  GROUP 3 (
  '/u01/app/oracle/oradata/LEO2/disk1/redo03.log',
  '/u01/app/oracle/oradata/LEO2/disk2/redo03_2.log'

  )>  GROUP 4 (
  '/u01/app/oracle/oradata/LEO2/disk1/redo04_1.log',
  '/u01/app/oracle/oradata/LEO2/disk2/redo04_2.log'

  )>  GROUP 5 (
  '/u01/app/oracle/oradata/LEO2/disk1/redo05_1.log',
  '/u01/app/oracle/oradata/LEO2/disk2/redo05_2.log'

  )>  DATAFILE
  '/u01/app/oracle/oradata/LEO2/disk1/system01.dbf',
  '/u01/app/oracle/oradata/LEO2/disk1/undotbs01.dbf',
  '/u01/app/oracle/oradata/LEO2/disk1/sysaux01.dbf',
  '/u01/app/oracle/oradata/LEO2/disk1/example01.dbf',
  '/u01/app/oracle/oradata/LEO2/disk1/indx01.dbf',
  '/u01/app/oracle/oradata/LEO2/disk1/tools01.dbf',
  '/u01/app/oracle/oradata/LEO2/disk1/user01.dbf',
  '/u01/app/oracle/oradata/LEO2/disk1/oltp01.dbf'
  CHARACTER SET US7ASCII
  ;
  11.把数据库启动到mount状态,在启动到open状态
  注:必须添加resetlogs选项打开数据库,resetlogs所有以前的备份和归档日志均不可用
  注:当我们执行完控制文件创建脚本后,数据库就已经是mount状态了。
  SYS@LEO2> select open_mode,log_mode,name,dbid,db_unique_name from v$database;
  OPEN_MODE LOG_MODE    NAME           DBID    DB_UNIQUE_NAME
  ---------- ------------ --------- ---------- -----------------------------------------------------------------------
  MOUNTED NOARCHIVELOG    LEO2          1558123773 LEO2

  SYS@LEO2>>  SYS@LEO2> select file_name,file_id,tablespace_name,status from dba_data_files;
  FILE_NAME                                                          FILE_ID TABLESPACE_NAME     STATUS
  -------------------------------------------------- ---------- --------
  /u01/app/oracle/oradata/LEO2/disk1/oltp01.dbf         8       OLTP                    AVAILABLE
  /u01/app/oracle/oradata/LEO2/disk1/user01.dbf       7      USERS                  AVAILABLE
  /u01/app/oracle/oradata/LEO2/disk1/tools01.dbf     6       TOOLS                  AVAILABLE
  /u01/app/oracle/oradata/LEO2/disk1/indx01.dbf      5        INDX                    AVAILABLE
  /u01/app/oracle/oradata/LEO2/disk1/example01.dbf 4      EXAMPLE              AVAILABLE
  /u01/app/oracle/oradata/LEO2/disk1/sysaux01.dbf    3      SYSAUX                  AVAILABLE
  /u01/app/oracle/oradata/LEO2/disk1/undotbs01.dbf  2      UNDOTBS             AVAILABLE
  /u01/app/oracle/oradata/LEO2/disk1/system01.dbf    1 SYSTEM              AVAILABLE
  11.新建LEO2密码文件
  orapwd file=orapwLEO2 password=oracle entries=30
  二、使用nid工具修改数据库名
  Nid是oracle软件提供的一个小工具,可以修改数据库名称,位置:$ORACLE_HOME/bin/
  优点:可以不用重建控制文件就修改数据库名
  步骤概述
  验证当前数据库名,实例名,服务名参数
  停掉数据库
  数据库启动到mount状态,nid工具在mount状态下才能用,直接修改控制文件内容
  生成新的initLEO3.orac纯文本参数文件并修改数据库名
  利用initLEO3.ora纯文本参数文件创建spfileLEO3.ora二进制参数文件
  创建转储目录
  启动数据库到open状态
  检查当前数据库名,实例名,服务名参数
  新建LEO3密码文件
  修改listener.ora和tnsnames.ora文件内容
  目标:我们用原库LEO2修改成新库LEO3,还用原来的控制文件、数据文件、在线日志
  1.验证当前数据库名,实例名,服务名参数
  SYS@LEO2> show parameter name
  NAME                                    TYPE       VALUE
  ------------------------------------ ----------- --------------------------------------------
  db_file_name_convert          string
  db_name                              string      LEO2
  db_unique_name                  string      LEO2
  global_names                       boolean    FALSE
  instance_name                     string      LEO2
  lock_name_space                 string
  log_file_name_convert         string
  service_names                      string      LEO2
  SYS@LEO2> select open_mode,log_mode,name,dbid,db_unique_name from v$database;
  OPEN_MODE LOG_MODE         NAME           DBID DB_UNIQUE_NAME
  ---------- ------------ --------- ---------- ----------------------------------------------------------------------
  READ WRITE NOARCHIVELOG   LEO2      1558123773 LEO2
  2.停掉数据库
  SYS@LEO2> shutdown immediate
  Database closed.
  Database dismounted.
  ORACLE instance shut down.
  3.数据库启动到mount状态,nid工具在mount状态下才能用,直接修改控制文件内容
  export ORACLE_SID=LEO2
  sqlplus / as sysdba
  SYS@LEO2> startup mount
  ORACLE instance started.
  Total System Global Area 314572800 bytes

  Fixed>
  Variable>  Database Buffers         213909504 bytes
  Redo Buffers                 2973696 bytes
  Database mounted.
  SYS@LEO2> exit
  nid help=y

  DBNEWID:>  Copyright (c) 1982, 2005, 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 target=sys/oracle dbname=LEO3

  DBNEWID:>  Copyright (c) 1982, 2005, Oracle. All rights reserved.
  Connected to database LEO2 (DBID=1558123773)      --已连接当前数据库名
  Connected to server version 10.2.0                  --已连接服务器版本
  Control Files in database:                          --控制文件路径
  /u01/app/oracle/oradata/LEO2/disk1/control01.ctl
  /u01/app/oracle/oradata/LEO2/disk2/control02.ctl
  /u01/app/oracle/oradata/LEO2/disk3/control03.ctl
  --是否同意修改数据库ID和数据库名

  Change database>  Proceeding with operation

  Changing database>  Changing database name from LEO2 to LEO3                   --修改数据库名
  Control File /u01/app/oracle/oradata/LEO2/disk1/control01.ctl – modified--控制文件已修改
  Control File /u01/app/oracle/oradata/LEO2/disk2/control02.ctl – modified
  Control File /u01/app/oracle/oradata/LEO2/disk3/control03.ctl – modified
  Datafile /u01/app/oracle/oradata/LEO2/disk1/system01.dbf - dbid changed, wrote new name
  Datafile /u01/app/oracle/oradata/LEO2/disk1/undotbs01.dbf - dbid changed, wrote new name
  Datafile /u01/app/oracle/oradata/LEO2/disk1/sysaux01.dbf - dbid changed, wrote new name
  Datafile /u01/app/oracle/oradata/LEO2/disk1/example01.dbf - dbid changed, wrote new name
  Datafile /u01/app/oracle/oradata/LEO2/disk1/indx01.dbf - dbid changed, wrote new name
  Datafile /u01/app/oracle/oradata/LEO2/disk1/tools01.dbf - dbid changed, wrote new name
  Datafile /u01/app/oracle/oradata/LEO2/disk1/user01.dbf - dbid changed, wrote new name
  Datafile /u01/app/oracle/oradata/LEO2/disk1/oltp01.dbf - dbid changed, wrote new name
  Control File /u01/app/oracle/oradata/LEO2/disk1/control01.ctl - dbid changed, wrote new name
  Control File /u01/app/oracle/oradata/LEO2/disk2/control02.ctl - dbid changed, wrote new name
  Control File /u01/app/oracle/oradata/LEO2/disk3/control03.ctl - dbid changed, wrote new name
  Instance shut down        --当前数据库已经关闭
  Database name changed to LEO3. –数据库名已经修改完毕
  Modify parameter file and generate a new password file before restarting.
  --修改参数文件和在重启之前生成新的密码文件

  Database>  --数据库ID已经修改为:1231291551.
  All previous backups and archived redo logs for this database are unusable.
  --以前的备份和归档日志均不可用
  Database has been shutdown, open database with RESETLOGS option.
  --数据库已关闭,必须使用RESETLOGS选项打开数据库

  Succesfully changed database name and>  --已成功修改数据库名和数据库ID
  DBNEWID - Completed succesfully.
  -- DBNEWID成功完成
  4.生成新的initLEO3.orac纯文本参数文件并修改数据库名和路径
  SYS@LEO2> create pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initLEO3.ora' from spfile;
  vim initLEO3.ora
  (1)路径
  *.audit_file_dest='/u01/app/oracle/admin/LEO3/adump'
  *.background_dump_dest='/u01/app/oracle/admin/LEO3/bdump'
  *.control_files='/u01/app/oracle/oradata/LEO3/disk1/control01.ctl','/u01/app/oracle/oradata/LEO2/disk2/control02.ctl','/u01/app/oracle/oradata/LEO3/disk3/control03.ctl'
  *.core_dump_dest='/u01/app/oracle/admin/LEO3/cdump'
  *.user_dump_dest='/u01/app/oracle/admin/LEO3/udump'
  (2)数据库名
  *.db_name='LEO3'
  5.利用initLEO3.ora纯文本参数文件创建spfileLEO3.ora二进制参数文件
  SYS@LEO2> create spfile='/u01/app/oracle/product/10.2.0/db_1/dbs/spfileLEO3.ora' from pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initLEO3.ora';
  6.创建转储目录
  mkdir -p $ORACLE_BASE/admin/LEO3/adump
  mkdir -p $ORACLE_BASE/admin/LEO3/bdump
  mkdir -p $ORACLE_BASE/admin/LEO3/cdump
  mkdir -p $ORACLE_BASE/admin/LEO3/udump
  7.直接启动数据库到open状态
  注:必须添加resetlogs选项打开数据库,resetlogs所有以前的备份和归档日志均不可用
  export ORACLE_SID=LEO3
  sqlplus / as sysdba
  SYS@LEO3> startup
  ORACLE instance started.
  Total System Global Area 314572800 bytes

  Fixed>
  Variable>  Database Buffers         213909504 bytes
  Redo Buffers                2973696 bytes
  Database mounted.
  ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
  必须使用RESETLOGS和NORESETLOGS选项打开数据库

  SYS@LEO3>>  8.检查当前数据库名,实例名,服务名参数
  SYS@LEO3> show parameter name
  NAME                                    TYPE       VALUE
  ------------------------------------ ----------- ----------------------------------------------------
  db_file_name_convert          string
  db_name                               string       LEO3
  db_unique_name                 string       LEO3
  global_names                       boolean     FALSE
  instance_name                     string        LEO3
  lock_name_space                string
  log_file_name_convert         string
  service_names                     string        LEO3
  SYS@LEO3> select open_mode,log_mode,name,dbid,db_unique_name from v$database;
  OPEN_MODE LOG_MODE    NAME           DBID DB_UNIQUE_NAME
  ---------- ------------ --------- ---------- ------------------------------
  READ WRITE NOARCHIVELOG   LEO3        1231291551  LEO3
  SYS@LEO3> select instance_name,status from v$instance;
  INSTANCE_NAME   STATUS
  ---------------- ------------ ------------
  LEO3             OPEN
  9.新建LEO3密码文件
  orapwd file=orapwLEO3 password=oracle entries=30
  10.修改listener.ora和tnsnames.ora文件内容
  cd /u01/app/oracle/product/10.2.0/db_1/network/admin
  修改vim listener.ora
  LISTENER=
  (DESCRIPTION=
  (ADDRESS_LIST=
  (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.10)(PORT=1521))
  (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
  SID_LIST_LISTENER=
  (SID_LIST=
  (SID_DESC=
  (GLOBAL_DBNAME=LEO3)
  (ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
  (SID_NAME=LEO3))
  (SID_DESC=
  (SID_NAME=plsextproc)
  (ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
  (PROGRAM=extproc)))
  修改vim tnsnames.ora
  LEO3=
  (description =
  (address=(protocol=tcp)(host=192.168.1.10)(port=1521))
  (connect_data=
  (server = dedicated)
  (service_name = LEO3)
  )
  )
  重启监听

  lsnrctl>  LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 21-MAY-2012 17:34:29
  Copyright (c) 1991, 2005, Oracle. All rights reserved.
  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=secdb1)(PORT=1521)))
  The command completed successfully
  测试监听
  sqlplus system/oracle@LEO3

  SQL*Plus:>  Copyright (c) 1982, 2005, Oracle. All rights reserved.
  Connected to:

  Oracle Database 10g Enterprise Edition>  With the Partitioning, OLAP and Data Mining options
  SYSTEM@LEO3>
  小结:到此所有的数据库名、实例名、服务名已经都被修改过来了,有了这2种方法我们可以快速的建立起带数据的新数据库。支持我们的研发和测试
  注意:参数文件修改
  控制文件修改
  密码文件修改
  监听文件修改
  数据文件和日志文件根据需要进行创建
  oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-582499-1-1.html 上篇帖子: 通过sql developer连接linux下的oracle数据库 下篇帖子: Oracle VM VirtualBox下各种视图切换
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表