当前位置:  数据库>oracle

基于用户管理的同机数据库克隆

    来源: 互联网  发布时间:2017-05-24

    本文导语: Oracle 同机数据库复制或克隆经常用于提供测试或开发环境。对于生成的克隆数据库有多种方式,如使用冷备方式进行数据库克隆(需要使用nid修改db_name),热备方式克隆数据库,rman方式克隆数据库等等。由于是同机克隆,因此目...

Oracle 同机数据库复制或克隆经常用于提供测试或开发环境。对于生成的克隆数据库有多种方式,如使用冷备方式进行数据库克隆(需要使用nid修改db_name),热备方式克隆数据库,rman方式克隆数据库等等。由于是同机克隆,因此目标数据库与原数据库必须位于不同的目录,其次,使用不用的数据库名称(db_name)。本文主要列出使用基于用户管理的热备方式来进行数据库克隆的步骤并给出演示。

1、热备克隆步骤
a、创建目标数据库目录
b、创建目标数据库密码文件(orapwd)
c、创建目标数据库参数文件(pfile/spfile)
d、备份原数据库并复制备份文件到目标数据库
e、启动目标数据库到nomount状态并创建控制文件
f、恢复目标数据库(recover)
g、打开目标数据库(open with resetlogs)
h、校验数据库及添加临时数据文件

2、演示热备克隆数据库

-->演示环境
SQL> ho cat /etc/issue
Enterprise Linux Enterprise Linux Server release 5.5 (Carthage)
Kernel r on an m

SQL> select * from v$version where rownum select name,log_mode,open_mode from v$database;

NAME                        LOG_MODE    OPEN_MODE
--------------------------- ------------ --------------------
SYBO3                      ARCHIVELOG  READ WRITE

--原数据库名  : sybo3
--目标数据库名: sybo4
--原数据库目录:/u01/database/sybo3
--目标数据库目录:/u01/database/sybo4


--a、创建目标数据库目录
[oracle@linux3 database]$ more sybo4.sh
#!/bin/sh

mkdir -p /u01/database
mkdir -p /u01/database/sybo4/adump
mkdir -p /u01/database/sybo4/controlf
mkdir -p /u01/database/sybo4/flash_recovery_area
mkdir -p /u01/database/sybo4/oradata
mkdir -p /u01/database/sybo4/redo
mkdir -p /u01/database/sybo4/dpdump
mkdir -p /u01/database/sybo4/pfile
mkdir -p /u01/database/sybo4/db_broker
[oracle@linux3 database]$ ./sybo4.sh


--b、创建目标数据库密码文件
$ orapwd file=$ORACLE_HOME/dbs/orapwsybo4 password=oracle entries=10


--c、创建目标数据库参数文件
--从原数据库生成目标数据库的初始化参数文件
SQL> create pfile='/u01/oracle/db_1/dbs/initsybo4.ora' from spfile;

--修改目标数据库参数文件
$ sed -i 's/sybo3/sybo4/g' $ORACLE_HOME/dbs/initsybo4.ora
$ grep sybo3 $ORACLE_HOME/dbs/initsybo4.ora    -->校验是否还存在sybo3相关字符

--最终的目标数据库参数文件
$ more $ORACLE_HOME/dbs/initsybo4.ora
sybo4.__db_cache_size=117440512
sybo4.__java_pool_size=4194304
sybo4.__large_pool_size=4194304
sybo4.__oracle_base='/u01/oracle'#ORACLE_BASE set from environment
sybo4.__pga_aggregate_target=150994944
sybo4.__sga_target=226492416
sybo4.__shared_io_pool_size=0
sybo4.__shared_pool_size=92274688
sybo4.__streams_pool_size=0
*.audit_file_dest='/u01/database/sybo4/adump/'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/database/sybo4/controlf/control01.ctl','/u01/database/sybo4/controlf/control02.ctl'
*.db_block_size=8192
*.db_domain='orasrv.com'
*.db_name='sybo4'
*.db_recovery_file_dest='/u01/database/sybo4/flash_recovery_area/'
*.db_recovery_file_dest_size=4039114752
*.dg_broker_config_file1='/u01/database/sybo4/db_broker/dr1sybo4.dat'
*.dg_broker_config_file2='/u01/database/sybo4/db_broker/dr2sybo4.dat'
*.dg_broker_start=FALSE
*.diagnostic_dest='/u01/database/sybo4'
*.log_archive_dest_1=''
*.memory_target=374341632
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'


--d、备份原数据库并复制备份文件到目标数据库
--创建一个临时表t用户验证克隆是否成功
SQL> create table t(name varchar2(10),action varchar2(20));

SQL> insert into t select 'Robinson','Transfer DB' from dual;

SQL> commit;

SQL> alter system archive log current;

--准备目标数据库创建控制文件脚本,此trace file位于参数user_dump_dest目录下
SQL> alter database backup controlfile to trace resetlogs;

--备份原数据库,如果数据库文件较多,使用热备脚本来完成
SQL> alter database begin backup;

--复制数据库文件到目标数据库目录
SQL> host cp /u01/database/sybo3/oradata/* /u01/database/sybo4/oradata

SQL> alter database end backup;


--e、启动目标数据库到nomount状态并创建控制文件
$ export ORACLE_SID=sybo4
$ sqlplus / as sysdba
SQL> startup nomount pfile=/u01/oracle/db_1/dbs/initsybo4.ora;
ORACLE instance started.

SQL> get sybo4ctl.sql
  1  CREATE CONTROLFILE SET DATABASE "sybo4" RESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 '/u01/database/sybo4/redo/redo01.log'  SIZE 50M BLOCKSIZE 512,
  9    GROUP 2 '/u01/database/sybo4/redo/redo02.log'  SIZE 50M BLOCKSIZE 512,
 10    GROUP 3 '/u01/database/sybo4/redo/redo03.log'  SIZE 50M BLOCKSIZE 512
 11  DATAFILE
 12    '/u01/database/sybo4/oradata/system01.dbf',
 13    '/u01/database/sybo4/oradata/sysaux01.dbf',
 14    '/u01/database/sybo4/oradata/undotbs01.dbf',
 15    '/u01/database/sybo4/oradata/users01.dbf',
 16    '/u01/database/sybo4/oradata/example01.dbf'
 17  CHARACTER SET AL32UTF8
 18* ;
SQL> @sybo4ctl.sql

Control file created.

SQL> alter database mount;      -->注意创建控制文件之后,数据库已经被mount,如下我们收到了错误提示
alter database mount
*
ERROR at line 1:
ORA-01100: database already mounted

--上面我们修改了控制文件脚本,使用了set database以及resetlogs方式来创建数据库


--f、恢复目标数据库
SQL> set logsource '/u01/database/sybo3/flash_recovery_area/SYBO3/archivelog/2013_07_24';
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 847086 generated at 07/24/2013 14:42:06 needed for thread 1
ORA-00289: suggestion :
/u01/database/sybo3/flash_recovery_area/SYBO3/archivelog/2013_07_24/o1_mf_1_7_8216
17241.dbf
ORA-00280: change 847086 for thread 1 is in sequence #7

Specify log: {=suggested | filename | AUTO | CANCEL}
/u01/database/sybo3/redo/redo01.log
Log applied.
Media recovery complete.


--g、打开目标数据库
SQL> alter database open resetlogs;

Database altered.


--h、校验数据库及添加临时数据文件
SQL> select * from t;

NAME      ACTION
---------- --------------------
Robinson  Transfer DB

SQL> select name from v$datafile;

NAME
------------------------------------------------------------
/u01/database/sybo4/oradata/system01.dbf
/u01/database/sybo4/oradata/sysaux01.dbf
/u01/database/sybo4/oradata/undotbs01.dbf
/u01/database/sybo4/oradata/users01.dbf
/u01/database/sybo4/oradata/example01.dbf

SQL> col member format a60
SQL> select member from v$logfile;

MEMBER
------------------------------------------------------------
/u01/database/sybo4/redo/redo03.log
/u01/database/sybo4/redo/redo02.log
/u01/database/sybo4/redo/redo01.log

SQL> select name from v$controlfile;

NAME
------------------------------------------------------------
/u01/database/sybo4/controlf/control01.ctl
/u01/database/sybo4/controlf/control02.ctl

--Author : Robinson
--Blog  : http://www.linuxidc.com

SQL> select * from v$tempfile;

no rows selected

SQL> select property_name,property_value from database_properties where property_name like '%DEFAULT%';

PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ ------------------------------------------------------------
DEFAULT_TEMP_TABLESPACE        TEMP
DEFAULT_PERMANENT_TABLESPACE  USERS
DEFAULT_EDITION                ORA$BASE
DEFAULT_TBS_TYPE              SMALLFILE

SQL> select tablespace_name from dba_tablespaces where tablespace_name='TEMP';

TABLESPACE_NAME
------------------------------
TEMP

SQL> alter tablespace temp add tempfile '/u01/database/sybo4/oradata/tempfile.dbf' size 50m autoextend on;

--建立服务器参数文件,之后建议一致性关闭数据库,备份数据库,添加数据库到/etc/oratab,配置监听器等
SQL> create spfile from pfile;

3、小结

a、对于基于用户管理热备数据库的克隆有点类似于创建一个新的数据库,因为我们需要准备创建整个数据库所需的全部过程

b、注意理解Oracle数据库启动步骤(nomount,mount,open)及每一步骤所需要的相关文件与在不同阶段所完成的动作,见

c、注意理解几类不同文件的作用,即:,,以及最终打开的数据库文件

d、对于数据库热备复制到目标数据库目录后等同于还原操作,也就是相当于 rman 的 restore 操作

e、数据库恢复操作使用了using backup controlfile方式,因为控制文件与数据文件不一致。可参考,理解 using backup controlfile 见

f、由于归档日志位于原数据库归档位置,因此在恢复期间使用了set logsource子句用于指定归档日志所在的位置

g、创建控制文件时,由于是一个新的db,因此必须使用resetlog方式,否则收到ORA-01223: RESETLOGS must be specified to set a new database name


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 将MS SQL SERVER数据库运行在普通用户(独立用户)状态下的设置方法终结篇
  • sql数据库修改数据库用户
  • sql server 2005删除用户时“数据库主体在该数据库中拥有架构,无法删除”错误的解决办法
  • sql数据库多用户模式修改方法
  • linux能够通过执行脚本添加oracle数据库的用户吗
  • php iis7站长之家
  • 如何将用户注册的信息写入数据库
  • mysql数据库添加用户及分配权限具体实现
  • navicat 8 创建数据库与创建用户分配权限图文方法
  • RedHat linux9.0自带Mysql数据库的用户名和密码是什么?
  • 在tomcat 中使用jdbcrealm是否一定要在数据库中建立用户表和 角色表
  • 单用户数据库管理系统 mSQL
  • 如何开一个10M的MYSQL数据库给用户?
  • 我是root,请问我如何设置用户aaa的权限,使它也可以创建属于自己的数据库文。。
  • sql server中数据库用户映射到登录名的方法
  • 如何恢复数据库的账号 登录名/用户名等
  • SQLServer 数据库变成单个用户后无法访问问题的解决方法
  • 查询数据库中所有用户表或表个数的sql语句
  • mysql下普通用户备份数据库时无lock tables权限的解决方法
  • MSSQL 删除数据库里某个用户所有表里的数据
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 概念混乱,请专人解释:实际用户ID,有效用户ID,设置用户ID
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • proftp中,如何让FTP的用户是非Linux用户,只是FTP用户?
  • UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍
  • windows 系统是否是多用户操作系统,如何理解“多用户操作系统”的“多用户”?
  • CentOS安装Telnet,以root用户登陆Telnet以及CentOS的各种终端解释
  • 我装的是RED HAT LINUX 8.0,我在root用户中把root用户删除了,怎办也进不了root用户
  • 怎样让普通用户拥有超级用户的权限,是把普通用户的组设为root组吗?具体怎么做,急死了
  • 我一个服务器同时接受到很多个用户的认证请求(得到用户名和密码),然后把用户名密码发给认证服务器。因为是远程认证,所
  • 我装了中软Linux3.1,启动时要求输入用户名和口令,但安装时并没有提示指定用户名,所以现在输入用户名老是错误,不能进入系统,请问该怎


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,