資料庫匯入匯出expdp,impdp
資料庫操作
(1)資料庫匯入匯出expdp,impdp
在匯入匯出資料庫的時候,經常會用到exp和imp,在資料量小的情況下可以隨意使用,但是當資料量大,表中資料有百萬,千萬條的時候,就要等好久好久好久。。
oracle官方肯定也考慮到了這樣的問題,於是出現了expdp和impdp,這是oracle 10g版本出的一個新功能,使用資料泵匯入匯出資料,據官方推薦說使用資料泵匯入匯出會比普通的匯入匯出快十倍,可以說是非常強大了。
首先連線到資料庫,使用cmd執行以下命令
sqlplus /nolog
conn / as sysdba
資料庫泵的步驟(以下是在資料庫所在的電腦上操作)
匯出資料
- (a)建立DIRECTORY
即在資料庫所在電腦上建立一個資料夾,用來存放匯出的dmp檔案
create directory expdp_dmp as 'F:/dmpfile'
- (b)授權
給當前資料庫使用者賦予讀寫檔案的許可權
grant read,write on directory expdp_dmp to salespa;
檢視許可權
SELECT privilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1;
- (c)執行匯出
expdp SALESPA/[email protected] directory=expdp_dmp dumpfile=salespa.dmp
匯入資料
impdp E43001/E43001 directory=expdp_dmp dumpfile=salespa.dmp remap_schema=salespa:E43001 transform=OID:N
REMAP_SCHEMA
該引數的含義是將一個使用者的的資料遷移到另外一個使用者,如上從salespa使用者遷移到 E43001使用者上。
transform
在匯入資料的時候,之前的資料庫中可能存在type,把一個Object從一個schema匯入到另外一個schema的時候(在同一個資料庫上),如果這個OID也保持不變的話,那麼就會出現多個Object共享同一個object id的問題,會出現invalid object identifier。
設定transform 引數為OID:N,意思是新建立的表或這個型別會賦予新的OID,而不是dmp檔案中包含的OID的值。
參考部落格地址:
資料庫匯入匯出exp和expdp以及imp和impdp的區別
ORACLE EXPDP命令使用詳細
ORA-02304: ORACLE匯入TYPE
(2)cmd執行sql檔案
往資料庫中插入資料量較大時,例如幾萬,十幾萬條的時候,使用PLSQL工具的時候就會卡死。這裡就要在命令列中執行sql語句。
//1.首先連線到要連的資料庫
sqlplus scott/[email protected]
//[email protected]+“sql檔案放置的路徑”
SQL> @C:\people.sql
(3)檢視Oracle資料庫表空間的使用率
SELECT C.TABLESPACE_NAME,
A.BYTES / 1048576 MEGS_TOTAL,
(A.BYTES - B.BYTES) / 1048576 MEGS_USED,
B.BYTES / 1048576 MEGS_FREE,
(A.BYTES - B.BYTES) / A.BYTES * 100 PCT_USED,
B.BYTES / A.BYTES * 100 PCT_FREE
FROM (SELECT TABLESPACE_NAME,
SUM(A.BYTES) BYTES,
MIN(A.BYTES) MINBYTES,
MAX(A.BYTES) MAXBYTES
FROM SYS.DBA_DATA_FILES A
GROUP BY TABLESPACE_NAME) A,
(SELECT A.TABLESPACE_NAME, NVL(SUM(B.BYTES), 0) BYTES
FROM SYS.DBA_DATA_FILES A, SYS.DBA_FREE_SPACE B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+)
AND A.FILE_ID = B.FILE_ID(+)
GROUP BY A.TABLESPACE_NAME) B,
SYS.DBA_TABLESPACES C
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+)
AND A.TABLESPACE_NAME = C.TABLESPACE_NAME
ORDER BY 6;
檢視所有表空間大小
select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tablespace_name;
手動修改表空間的大小
查看錶空間的目錄
select * from dba_data_file
更改表空間的大小為30G
alter database datafile 'E:\APP\LABOGUEST\SALESPA\SALESPA_INDEX.DBF' resize 30720
(4)ORA-24247: 網路訪問被訪問控制列表 (ACL) 拒絕
- 建立訪問控制列表
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => 'email_server.xml', --這裡為任意的檔名,用於刪除時標識
description => 'ACL for 123.125.50.112',
principal => 'PRODUCE', --此為將來要進行操作的使用者
is_grant => TRUE,
privilege => 'connect');
END;
- 將使用者或角色新增到訪問控制列表中
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE (
acl => 'email_server.xml', --和建立訪問控制列表中的acl名相同
principal => 'PRODUCE', --要新增的使用者
is_grant => TRUE,
privilege => 'resolve');
END;
- 給網路分配訪問控制列表(ACL與郵件伺服器相關聯)
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
acl => 'email_server.xml', --和建立訪問控制列表中的acl名相同
host => '123.125.50.112', --主機名,域名,ip地址或分配的子網
lower_port => '25',
upper_port => NULL);
END;
- 查詢建立的ACL
SELECT host, lower_port, upper_port, acl FROM dba_network_acls;
SELECT acl,
principal,
privilege,
is_grant,
TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,
TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date
FROM dba_network_acl_privileges;
- 刪除ACL
BEGIN
DBMS_NETWORK_ACL_ADMIN.drop_acl(acl => 'email_server.xml');
COMMIT;
END;
(5)解鎖被鎖的表
在除錯程式的時候,有時debug忘記點結束,又去資料庫中操作表,很有可能會造成鎖表,無法對該表進行操作。以下是檢視被鎖的表和解鎖表的語句。
select a.object_name,b.session_id,c.serial#,c.username,c.command,c.machine,c.lockwait
from all_objects a,v$locked_object b,v$session c where a.object_id=b.object_id and c.sid=b.session_id;
alter system kill session'SID,serial# ';