ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 复制用户结构

复制用户结构

原创 Linux操作系统 作者:beyondme 时间:2011-02-23 13:59:07 0 删除 编辑
描述:如何在不同数据库或者同一个数据库内复制用户结构,下面以不同数据库为例,且表空间不同。

1.方法一:使用exp/imp
1.1源库导出结构
$ export ORACLE_SID=testa
$ sqlplus \'/ as sysdba\'
--用户占用的表空间
SQL>select tablespace_name,sum(bytes)/1024/1024 from dba_segments where wner = 'TESTUSER' group by tablespace_name;
TABLESPACE_NAME                SUM(BYTES)/1024/1024
------------------------------ --------------------
TBS_INDEX                                   10560
TBS_DATA                                           2

--用户的对象数量
SQL> select object_type,count(*) from dba_objects where wner='TESTUSER' group by rollup(object_type);
OBJECT_TYPE           COUNT(*)
------------------- ----------
DATABASE LINK                1
INDEX                        6
TABLE                       25
VIEW                         5
                            37
--导出用户结构
$ exp \'/ as sysdba\' wner=testuser rows=n file=testuser.dmp 

1.2将dmp文件ftp到目标数据库主机(可选)

1.3生成表和索引的SQL脚本
$ export ORACLE_SID=testb
--目标库表空间空闲情况
SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_free_space group by tablespace_name;
TABLESPACE_NAME                SUM(BYTES)/1024/1024
------------------------------ --------------------
SYSTEM                                         3.25
TBS_DATA                                 75815.5625
USERS                                        4.5625
SYSAUX                                         7.25
UNDOTBS1                                  1817.5625

--建用户
SQL> create user TESTUSER identified by TESTUSER default tablespace tbs_data temporary tablespace temp;
SQL> grant connect,resource,select any table,debug connect session to TESTUSER;

--生成建表和索引SQL文件
$ imp \'/ as sysdba\' fromuser=TESTUSER touser=TESTUSER indexfile=TESTUSER_create.sql

--将源表空间替换成目标表空间
$ vi TESTUSER_create.sql
:g/REM  /s//
:g/TBS_INDEX/s//TBS_DATA/g

1.4创建表和索引,导入其他对象
$ sqlplus "/ as sysdba" @TESTUSER_create.sql
$ imp \'/ as sysdba\' fromuser=TESTUSER touser=TESTUSER ignore=y

--统计用户对象,核查是否和源用户对象一致
SQL> select object_type,count(*) from dba_objects where wner='TESTUSER' group by rollup(object_type);

OBJECT_TYPE           COUNT(*)
------------------- ----------
DATABASE LINK                1
INDEX                        6
TABLE                       25
VIEW                         5
                            37

2.方法二:使用expdp/impdp
2.1expdp导出用户结构
$ export ORACLE_SID=testa
$ expdp \'/ as sysdba\' content=metadata_only schemas=TESTUSER DIRECTORY=dir_test dumpfile=TESTUSER.dmp

2.2将dmp文件ftp到目标数据库主机

2.3impdp导入用户结构
$ export ORACLE_SID=testb
$ impdp \'/ as sysdba\' content=metadata_only schemas=TESTUSER DIRECTORY=dir_test dumpfile=TESTUSER.dmp REMAP_TABLESPACE=tbs_index:tbs_data

注:这里可以使用network_link参数,一步到位复制用户。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/405242/viewspace-687769/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-29

  • 博文量
    15
  • 访问量
    75567