zoukankan      html  css  js  c++  java
  • [原]在Linux中通过本地复制的方式创建多一个Oracle数据库

          在 Oracle 的世界里,一个实例只能打开一个数据库,如果我想在本机中同时运行两个数据库,那就要开启两个实例了,而不同的实例的标识就是SID。

          关闭现有数据库,设定好一个新的 SID 后,通过复制参数文件为 spfile<New SID>.ora 作为新实例的参数文件,将控制文件、数据文件和重做日志复制一份到相应的目录,此时新的数据库就有一个雏形了;将数据库启动 nomout 阶段修改spfile中的新数据库的 controlfile 的位置就可以将数据库启动到 mount 阶段,在 mount 阶段将数据文件和重做日志的文件修改到新路径后就可以打开数据库了。

          整个过程都很顺利,但是此时再试图打开原来的数据库就会报错了:

    ORA-01102: cannot mount database in EXCLUSIVE mode

           而 alert 文件中出现如下信息:

    Sat Oct  9 11:14:18 2010
    ALTER DATABASE   MOUNT
    Sat Oct  9 11:14:18 2010
    sculkget: failed to lock /u01/app/oracle/dbs/lkORA8I exclusive
    sculkget: lock held by PID: 11621
    Sat Oct  9 11:14:18 2010
    ORA-09968: Message 9968 not found; No message file for product=RDBMS, facility=ORA
    Linux-x86_64 Error: 11: Resource temporarily unavailable
    Additional information: 11621
    Sat Oct  9 11:14:18 2010
    ORA-1102 signalled during: ALTER DATABASE   MOUNT...

           旧的数据库的 SID 和 DB_NAME 均是 ORA8I,failed to lock /u01/app/oracle/dbs/lkORA8I exclusive 应该就是问题所在了,在参数文件中的db_name好改,但是db_name还存在于控制文件和数据文件中,这些文件怎么改呢? 这个就要借助nid程序了。

          首先将新数据库启动到 mount 阶段,假设新的数据库的实例是oratmp,数据库名也是oratmp。

    [oracle@l004020 ~]$ export $ORACLE_SID=oratmp
    [oracle@l004020 ~]$ nid target=sys/sys_password dbname=oratmp
    
    DBNEWID: Release 10.2.0.2.0 - Production on Sat Oct 9 11:37:47 2010
    
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    
    Connected to database ORA8I (DBID=152116074)
    
    Connected to server version 10.2.0
    
    Control Files in database:
        /u02/oradata/oratmp/control01.ctl
        /u02/oradata/oratmp/control02.ctl
        /u02/oradata/oratmp/control03.ctl
    
    Change database ID and database name ORA8I to ORATMP? (Y/[N]) => y
    
    Proceeding with operation
    Changing database ID from 152116074 to 3320092043
    Changing database name from ORA8I to ORATMP
        Control File /u02/oradata/oratmp/control01.ctl - modified
        Control File /u02/oradata/oratmp/control02.ctl - modified
        Control File /u02/oradata/oratmp/control03.ctl - modified
        Datafile /u02/oradata/oratmp/system01.dbf - dbid changed, wrote new name
        Datafile /u02/oradata/oratmp/undotbs01.dbf - dbid changed, wrote new name
        Datafile /u02/oradata/oratmp/sysaux01.dbf - dbid changed, wrote new name
        Datafile /u02/oradata/oratmp/users01.dbf - dbid changed, wrote new name
        Datafile /u02/oradata/ora8i/temp01.dbf - dbid changed, wrote new name
        Control File /u02/oradata/oratmp/control01.ctl - dbid changed, wrote new name
        Control File /u02/oradata/oratmp/control02.ctl - dbid changed, wrote new name
        Control File /u02/oradata/oratmp/control03.ctl - dbid changed, wrote new name
        Instance shut down
    
    Database name changed to ORATMP.
    Modify parameter file and generate a new password file before restarting.
    Database ID for database ORATMP changed to 3320092043.
    All previous backups and archived redo logs for this database are unusable.
    Database has been shutdown, open database with RESETLOGS option.
    Succesfully changed database name and ID.
    DBNEWID - Completed succesfully.
    
    [oracle@l004020 ~]$ sqlplus / as sysdba
    SQL> shutdown immediate;  
    ORA-01507: database not mounted
    
    
    ORACLE instance shut down.
    SQL> startup mount ; 
    ORACLE instance started.
    
    Total System Global Area  167772160 bytes
    Fixed Size                  2069648 bytes
    Variable Size             104860528 bytes
    Database Buffers           50331648 bytes
    Redo Buffers               10510336 bytes
    ORA-01103: database name 'ORATMP' in control file is not 'ORA8I'
    SQL> alter system set db_name='oratmp' scope=spfile; 
    
    System altered.
    
    SQL> shutdown immediate;  
    ORA-01507: database not mounted
    
    
    ORACLE instance shut down.
    SQL> startup mount ;      
    ORACLE instance started.
    
    Total System Global Area  167772160 bytes
    Fixed Size                  2069648 bytes
    Variable Size             104860528 bytes
    Database Buffers           50331648 bytes
    Redo Buffers               10510336 bytes
    Database mounted.
    SQL> alter database open ; 
    alter database open
    *
    ERROR at line 1:
    ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
    
    SQL> alter database open resetlogs ;  
    
    Database altered.
    
    #再看看hc<db_name>文件。
    [oracle@l004020 dbs]$ ls -lth hc*
    -rw-rw---- 1 oracle dba 1.6K 10-09 11:49 hc_oratmp.dat
    -rw-rw---- 1 oracle dba 1.6K 10-09 11:34 hc_ora8i.dat

           简单来说就是如下几步:

           1。startup mount ;

           2。nid target=sys/sys_password dbname=oratmp

           3。alter system set db_name=<new dbname> ;

           4。shutdown

           5。startup mount ; 

           6。alter database open resetlogs。

  • 相关阅读:
    Xen虚拟机的创建和启动
    Linux Shell编程基础
    虚拟化的概念
    Android XML解析
    Android数据存储之文件存储
    Android GPRS开关软件(APN开关)
    数据中心
    debian下dos2unix的安装
    linux Shell重定向
    GPRS开关软件一些问题的解决方法
  • 原文地址:https://www.cnblogs.com/killkill/p/1856224.html
Copyright © 2011-2022 走看看