数据库格式如何拷贝到一个新的具有相同的登录密码数据库
适用于:
RDBMS数据库系统的企业管理器——版本:8.1.7.4 to 11.1.0.7.0
Oracle数据库企业版——Version: 7.3.4.0 to 10.2.0.1
Oracle数据库企业版——Version: 7.3.4.0 to 11.1.0.6
Oracle数据库企业版——Version: 10.1.0.2 to 11.1.0.6
Oracle数据库企业版——Version: 10.1.0.2 to 11.1.0.6
Oracle数据库个人版——Version: 7.3.4.0 to 10.2.0.1
Oracle数据库个人版——Version: 7.3.4.0 to 11.1.0.6
Oracle数据库个人版——Version: 10.1.0.2 to 11.1.0.6
Oracle数据库个人版——Version: 10.1.0.2 to 11.1.0.6
Oracle数据库个人版——Version: 7.3.4.0 to 10.2.0.1
Oracle数据库个人版——Version: 7.3.4.0 to 11.1.0.6
Oracle数据库标准版——Version: 10.1.0.2 to 11.1.0.6
Oracle数据库标准版——Version: 10.1.0.2 to 11.1.0.6
这篇文档的信息适用于任何平台
目的
如何从一个数据库复制数据库用户到另一个新的数据库和密码登录和授予保持角色,特权
解决方案:
1. Oracle 10g及以上:使用数据泵
在Oracle 10中你可以使用进口/出口数据泵这两个实用工具
例如:
第一步:在源数据库中,运行模式水平泵出口数据,连接一个拥有 EXP-FULL_DATABASE角色的用户:% expdp system/manager DIRECTORY=my_dir DUMPFILE=exp_scott.dmp \
LOGFILE=exp_scott.log SCHEMAS=scott
第二步:在目标数据库中运行模式水平进口泵——找到同样能在目标数据库中创建用户的数据库
% impdp system/manager DIRECTORY=my_dir DUMPFILE=exp_scott.dmp \
LOGFILE=imp_scott.log SCHEMAS=scott
或者你也可以为所有的声明创建一个日志文件,例如:
impdp system/manager directory=my_dir dumpfile=exp_scott.dmp logfile=imp_scott.log schemas=scott sqlfile=imp_user.sql
2. 在Oracle9i及以上版本使用:查询的数据字典在源数据库得到所需的信息用户的pre-create目标数据库
2.1 在源数据库中获得CREATE USER的声明。例如:
SET long 200000000
SELECT dbms_metadata.get_ddl('USER','SCOTT') FROM dual;
2.2在运行其他源数据库查询来确定哪些特权,授权、角色、表被授予给用户的配额。例如:
SET lines 120 pages 100
SELECT * FROM dba_sys_privs WHERE grantee='SCOTT';
SELECT * FROM dba_role_privs WHERE grantee='SCOTT';
SELECT * FROM dba_tab_privs WHERE grantee='SCOTT';
SELECT * FROM dba_ts_quotas WHERE username='SCOTT';
2.3.创建一个脚本文件,其中包含CREATE USER, CREATE ROLE的声明,声明的授权以及ALTER USER的声明,为表空间配额。
2.4. Pre-create为该用户的表空间与SQL *加上目标数据库,注意,原创建表的语句可以达到DBMS_METADATA.GET_DDL源数据库,例如:
SET long 200000000
SELECT dbms_metadata.get_ddl('TABLESPACE','USERS') FROM dual;
2.5.运行2.3中的脚本在目标数据库中创建用户
2.6. 运行一个用户级出口。例如:
exp system/manager file=exp_scott.dmp log=exp_scott.log owner=scott
2.7. 导入出口的垃圾文件到目标数据库中:例如:
imp system/manager file=exp_scott.dmp log=imp_scott.log fromuser=scott touser=scott
3.Oracle7或以上版本
提取所需的报表输出一个完整垃圾文件数据库。例如:
3.1 运行一个完整的数据库出口,如:
exp system/manager file=exp_f.dmp log=exp_f.log full=y
3.2 创建一个没的导入任何数据的日志文件,如:
imp system/manager file=exp_f.dmp log=imp_show.log full=y show=y
3.3编辑文件file imp_show.log并且提取所有的需要re-creating的用户(create user, create role, alter user, grant)。修改声明让他们成为有效的SQL语句(去除double-quotes开始时的线和这一排的最后一线,连接如果他们被删除的
3.4Pre-create为该用户的tablespaces与SQL *加上目标数据库
3.5 运行3.3步中的脚本为目标数据库创建用户
3.6 将用户数据导入到目标库中。例如:
imp system/manager file=exp_full.dmp log=imp_scott.log fromuser=scott touser=scott
4.如果所有的用户都要复制到目标数据库中:用一个完整的数据库出口,从源头上,还有一个完整的数据库的数据库到目标数据库。
4.1 运行一个完整的数据库输出。例如:
exp system/manager file=exp_f.dmp log=exp_f.log full=y
expdp system/manager directory=my_dir dumpfile=expdp_f.dmp logfile=expdp_f.log full=y
4.2 Pre-create与SQL的tablespaces *在目标加上数据库,如果他们有一个不同的目录结构在目标服务器上如果在目标目录结构相同的来源,确保该目录结构在地方(进口不会创造目录,当创建tablespaces) 注意,原创建表空间可以获得dbms_metadata声明。get_ddl(见例步骤2.4上述)。
4.3. 将数据导入到目标数据库中:
imp system/manager file=exp_f.dmp log=imp_f.log full=y
or in Oracle10g:
impdp system/manager directory=my_dir dumpfile=expdp_f.dmp logfile=impdp_f.log full=y