複製使用者結構

beyondme發表於2011-02-23
描述:如何在不同資料庫或者同一個資料庫內複製使用者結構,下面以不同資料庫為例,且表空間不同。

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章