克隆db_name相同的数据库

本文介绍如何在同一台主机上克隆相同db_name的Oracle数据库,并详细解释了修改控制文件信息、创建克隆数据库控制文件的过程。

我们在一台主机上可以克隆出两个db_name相同的数据库,而将两个数据库同时启动起来。

我们要做的是将原有的数据库文件复制一份,由于文件的位置改变了,重点是要修改控制文件里的信息。

首先,我们打开已经存在的数据库,将获得控制文件创建的脚本文件:

SQL> alter database backup controlfile to trace as 'ctlbak';

如果转储整个控制文件,使用

SQL> alter database backup controlfile to ‘ctlfile.bak’;

 

获得的控制文件的创建脚本在$ORACLE_HOME/dbs目录下找到,打开这个文件我们可以看到创建控制文件的SQL语句,这个脚本文件我们要在创建克隆数据库的控制文件时候使用。

关闭原有的数据库。

 

$ORACLE_HOME/dbs目录下创建克隆数据库的密码文件和参数文件。

bash-3.00$ orapwd file=orapwzxnm password=netnumen entries=5

bash-3.00$ cp spfileuep4x.ora spfilezxnm.ora

 

启动克隆数据库到nomount状态:

bash-3.00$ export ORACLE_SID=zxnm

bash-3.00$ sqlplus "/ as sysdba"

 

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 9 12:06:51 2009

 

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

 

Connected to an idle instance.

 

SQL> startup nomount;

ORACLE instance started.

 

Total System Global Area 2550136832 bytes

Fixed Size                  1980808 bytes

Variable Size             536872568 bytes

Database Buffers         1996488704 bytes

Redo Buffers               14794752 bytes

 

我们查看一下再参数文件里记录的控制文件和位置的信息,然后改成克隆数据库的控制文件的位置。

SQL> show parameter control_file

 

NAME                                 TYPE

------------------------------------ ----------------------

VALUE

------------------------------

control_file_record_keep_time        integer

7

control_files                        string

/export/home/oracle/oradata/ue

p4x/control01.ctl, /export/hom

e/oracle/oradata/uep4x/control

02.ctl, /export/home/oracle/or

adata/uep4x/control03.ctl

 

SQL> alter system set control_files='/export/home/oracle/oradata/zxnm/control01.ctl' scope=spfile;

 

System altered.

 

下面我们要修改克隆数据库的db_unique_name(在9i中是lock­_name_space)。

SQL> alter system set db_unique_name=zxnm scope=spfile;

 

System altered.

 

关闭数据库,重新打开数据库,再查看一下控制文件的信息。

SQL> show parameter control_file

 

NAME                                 TYPE

------------------------------------ ----------------------

VALUE

------------------------------

control_file_record_keep_time        integer

7

control_files                        string

/export/home/oracle/oradata/zx

nm/control01.ctl

 

我们看到,控制文件的位置已经更改过了。然后,我们根据刚才创建控制文件的脚本新建一个控制文件。

SQL> CREATE CONTROLFILE REUSE DATABASE "UEP4X" NORESETLOGS  NOARCHIVELOG    MAXLOGFILES 16   

MAXLOGMEMBERS 3   

MAXDATAFILES 100   

MAXINSTANCES 8   

MAXLOGHISTORY 292

LOGFILE 

GROUP 1 '/export/home/oracle/oradata/zxnm/redo01.log'  SIZE 50M, 

GROUP 2 '/export/home/oracle/oradata/zxnm/redo02.log'  SIZE 50M, 

GROUP 3 '/export/home/oracle/oradata/zxnm/redo03.log'  SIZE 50M

DATAFILE 

'/export/home/oracle/oradata/zxnm/system01.dbf',  '/export/home/oracle/oradata/zxnm/undotbs01.dbf',  '/export/home/oracle/oradata/zxnm/sysaux01.dbf',  '/export/home/oracle/oradata/zxnm/users01.dbf',

'/export/home/oracle/oradata/zxnm/example01.dbf',  '/export/home/oracle/oradata/zxnm/uep.dbf',  '/export/home/oracle/oradata/zxnm/UEP_CAF_FM.dbf',  '/export/home/oracle/oradata/zxnm/UEP_PM.dbf',

'/export/home/oracle/oradata/zxnm/n3common.dbf',  '/export/home/oracle/oradata/zxnm/IP_CM.dbf',  '/export/home/oracle/oradata/zxnm/IP_PM.dbf',  '/export/home/oracle/oradata/zxnm/IP_PM_INDEX.dbf'

CHARACTER SET ZHS16GBK;

 

Control file created.

我们可以看出,控制文件主要记录了日志文件和数据文件的信息。

 

然后就可以打开ORACLE_SIDzxnmuep4x的数据库了。

### 如何通过 SQL 命令 `alter pluggable database DB_** open;` 打开 Oracle 可插拔数据库Oracle 数据库中,可插拔数据库(Pluggable Database, PDB)是容器数据库(Container Database, CDB)的一部分。要打开某个特定的 PDB,可以使用以下 SQL 命令: #### 使用 `ALTER PLUGGABLE DATABASE` 命令 执行以下命令来打开指定的 PDB: ```sql ALTER PLUGGABLE DATABASE DB_** OPEN; ``` 此命令会尝试将名为 `DB_**` 的 PDB 设置为开放状态[^1]。 #### 验证 PDB 状态 在执行上述命令之前或之后,可以通过查询视图 `V$PDBS` 来验证 PDB 的当前状态: ```sql SELECT NAME, OPEN_MODE FROM V$PDBS WHERE NAME = 'DB_**'; ``` 如果返回的结果显示 `OPEN_MODE` 列为 `READ WRITE` 或 `MOUNTED`,则表示该 PDB 已经被成功挂载并处于写入模式[^4]。 #### 注意事项 - 如果目标 PDB 当前未挂载,则需要先将其挂载再开启: ```sql ALTER PLUGGABLE DATABASE DB_** MOUNT; ALTER PLUGGABLE DATABASE DB_** OPEN; ``` - 用户需具备足够的权限才能执行这些操作。通常情况下,管理员账户(如 SYS 或 SYSTEM)拥有此类权限[^2]。 - 若遇到兼容性问题,在克隆或者重新插入一个新的 PDB 文件时可能需要用到检查工具函数 `DBMS_PDB.CHECK_PLUG_COMPATIBILITY()` 进行预检[^3]。 #### 示例脚本 下面是一个完整的示例流程用于启动一个叫作 `DB_TEST` 的 PDB: ```sql -- 查询当前 PDB 状态 SELECT NAME, OPEN_MODE FROM V$PDBS WHERE NAME = 'DB_TEST'; -- 尝试打开 PDB (假如它已经被 mount) ALTER PLUGGABLE DATABASE DB_TEST OPEN; -- 再次确认其状态是否变为 READ WRITE SELECT NAME, OPEN_MODE FROM V$PDBS WHERE NAME = 'DB_TEST'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值