oracle將乙個使用者下的所有表複製到以乙個使用者下

2021-07-14 20:59:30 字數 4564 閱讀 7754

在測試過程中,一般為了讓測試環境與開發環境隔離,一般要球測試環境對應的資料庫也與開發環境進行隔離

這時候我的做法是:先建立乙個用於測試環境的使用者,然後將開發環境中該使用者對應的表及資料匯出,再匯入到測試使用者下

具體實現步驟:

方式一:

建立測試使用者,並賦許可權(看需要是否需要建立表空間)--》然後可直接使用imp命令將開發環境使用者下的所有表及資料,包括約束,儲存過程,觸發器匯出為乙個dmp檔案,然後使用exp命令將該檔案匯入到測試使用者下即可

--建立表空間

create tablespace "tbs_kfmh_dat01" datafile 

'/+dg_data/kfmh_dat01' size 204800000

logging online permanent blocksize 8192

extent management local autoallocate default 

nocompress  segment space management auto

--/+dg_data/kfmh_dat002為oracle的資料檔案路徑

--tbs_kfmh_dat01為表空間名稱

---建立使用者

create user kfmhdev identified by kfmhdev

default tablespace tbs_kfmh_dat01

temporary tablespace temp

profile default

password expire;

--賦許可權

-- grant/revoke object privileges 

grant execute on dbms_job to kfmhdev;

grant execute on dbms_random to kfmhdev;

-- grant/revoke role privileges 

grant connect to kfmhdev;

-- grant/revoke system privileges 

grant alter session to kfmhdev;

grant create cluster to kfmhdev;

grant create materialized view to kfmhdev;

grant create procedure to kfmhdev;

grant create sequence to kfmhdev;

grant create session to kfmhdev;

grant create synonym to kfmhdev;

grant create table to kfmhdev;

grant create trigger to kfmhdev;

grant create type to kfmhdev;

grant create view to kfmhdev;

grant execute any procedure to kfmhdev;

grant execute any type to kfmhdev;

grant force transaction to kfmhdev;

grant select any table to kfmhdev;

grant unlimited tablespace to kfmhdev;

---檢視表空間大小及使用情況

select a.tablespace_name "表空間名", 

total "表空間大小", 

free "表空間剩餘大小", 

(total - free) "表空間使用大小", 

total / (1024 * 1024 * 1024) "表空間大小(g)", 

free / (1024 * 1024 * 1024) "表空間剩餘大小(g)", 

(total - free) / (1024 * 1024 * 1024) "表空間使用大小(g)", 

round((total - free) / total, 4) * 100 "使用率 %" 

from (select tablespace_name, sum(bytes) free 

from dba_free_space 

group by tablespace_name) a, 

(select tablespace_name, sum(bytes) total 

from dba_data_files 

group by tablespace_name) b 

where a.tablespace_name = b.tablespace_name 

select * from user_tables;

select * from user_tables where num_rows!=0;

--查詢外來鍵列表

select * from user_constraints c where c.constraint_type = 'r';

--查詢所有索引

select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name

--查詢觸發器 

select name from user_source where type = 'trigger' group by name

--匯出使用者下的所有表結構及資料

--進入到oracle所在伺服器(通常為linux)

--進入linux

--# su - oracle

--匯出某個使用者下的所有資料

--$ exp sys/oracle\"@kfmh\" file=kfmhtest.dmp owner=kfmhtest log=exp_kfmhtest.log

只匯出資料物件,不匯出資料 (rows=n )

--向某個使用者匯入資料

方式二:

我給人的專案由於表眾多,且不同表之間的關聯性比較強,使用第一張方式匯出表資料的時候會報錯,此時我是按照分布匯出的方式進行的:

步驟如下:

建立測試使用者,並賦許可權(看需要是否需要建立表空間)--》然後匯出表結構,匯出表資料--》在匯入到測試使用者時,是先將表結構和主鍵匯入,然後匯入資料,再匯入表儲存過程,觸發器,最後匯入外來鍵

傳送門:

3. 三種模式 

(1)表方式,將指定表的資料匯出/匯入。 

匯出:匯出一張或幾張表:$ exp user/pwd file=/dir/***.dmp log=***.log tables=table1,table2 

匯出某張表的部分資料 

$ exp user/pwd file=/dir/***.dmp log=***.log tables=table1 query=\「where col1=\『…\』and col2 \

匯入:匯入一張或幾張表 

$ imp user/pwd file=/dir/***.dmp log=***.log tables=table1, 

table2 fromuser=dbuser touser=dbuser2 commit=y ignore=y 

(2)使用者方式,將指定使用者的所有物件及資料匯出/匯入。 

匯出:$ exp user/pwd file=/dir/***.dmp log=***.log owner=(xx, yy) 

只匯出資料物件,不匯出資料 (rows=n ) 

$ exp user/pwd file=/dir/***.dmp log=***.log owner=user rows=n 

匯入:$ imp user/pwd file=/dir/***.dmp log=***.log fromuser=dbuser touser=dbuser2 

commit=y ignore=y 

(3)全庫方式,將資料庫中的所有物件匯出/匯入匯出: 

$ exp user/pwd file=/dir/***.dmp log=***.log full=ycommit=y ignore=y 

匯入:$ imp user/pwd file=/dir/***.dmp log=***.log fromuser=dbuser touser=dbuser2 

如何刪除掉乙個使用者下的所有物件

create or replace procedure drop all ascursor cur obj is select uo.object name,uo.object type from user objects uo where uo.object name not in drop al...

oracle刪除使用者下的所有表

刪除表有2個辦法 1,刪除使用者 這是最快的方法 2,生成刪除語句 方法一drop user cascade 方法二你需要建立這些刪除語句,通過oracle的資料字典找到該使用者下的所有表 檢視等物件,拼接成語句。如下select drop table table name chr 13 chr 1...

ORACLE刪除某使用者下所有物件

sql指令碼 唯一注意的是下面的f dropobj.sql 為操作的.sql 你的電腦沒有f盤,請換為d或者e其他存在的碟符 用於刪除當前使用者的所有物件 use for drop all objects in current user set heading off set feedback of...