oracle 導入數據庫imp導入問題總結


一、導入命令

1、單個文件導入

imp hn_dw/hn_dw file=/home/oracle/test.dmp log=/home/oracle/test.log full=y commit=y ignore=y

imp hn_dw/hn_dw (用戶名/密碼 )file=/home/oracle/test.dmp(文件路徑) log=/home/oracle/test.log(日志路徑) full=y commit=y ignore=y

參數解釋:

2、多個文件導入

imp hn_dw/hn_dw file=\(test01.dmp,test02.dmp,test03.dmp\) log=hn_log/test.log full=y commit=y ignore=y

imp hn_dw/hn_dw(用戶名/密碼) file=\(test01.dmp,test02.dmp,test03.dmp\) (多個文件)log=hn_log/test.log full=y commit=y ignore=y

二、查看表空間使用率

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

三、查看表空間數據文件

1、輸入命令bai: sqlplus / as sysdba

2、select t1.name,t2.name ?from v$tablespace t1,v$datafile t2 where t1.ts# = t2.ts#;

四、擴充表空間

alter tablespace PARTNER_DBS add datafile '/home/orcl/app/oracle/product/12.1.0_1sscms1.dbf' size 24576m

表空間名:PARTNER_DBS

表空間數據文件路徑: /home/orcl/app/oracle/product/12.1.0/db_1/PARTNER_DBS .DBF

2、查看表空間是否開啟了自動擴展的功能 

SELECT T.TABLESPACE_NAME,
D.FILE_NAME,
D.AUTOEXTENSIBLE,
D.BYTES,
D.MAXBYTES,
D.STATUS
FROM DBA_TABLESPACES T, DBA_DATA_FILES D
WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME
ORDER BY TABLESPACE_NAME, FILE_NAME;

3、擴大表空間的四種方法:

1、增加數據文件 
ALTER TABLESPACE ***_TRD ADD DATAFILE 
‘D:\Oracle\PRODUCT\10.2.0\ORADATA\DBFILE\TRD_2.DBF’ SIZE 1024M;

2、增加數據文件並允許自動增長 
ALTER TABLESPACE ***_TRD ADD DATAFILE 
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD_2.DBF’ SIZE 1024M AUTOEXTEND ON NEXT 8M MAXSIZE 10240M;

3、允許已存在的數據文件自動增長 
ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD.DBF’ 
AUTOEXTEND ON NEXT 8M MAXSIZE 10240M;

4、手工改變已存在數據文件的大小 
ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD.DBF’ 
RESIZE 10240M;

五、查看oracle用戶下所有表

select * from dba_tables where owner in ('用戶名');

或者當前用戶

select * from user_tables;

六、覆蓋之前的表數據

oracle10g之后impdp的table_exists_action參數

impdp username/password table_exists_action=truncate  directory=DATA_PUMP_DIR dumpfile=expdpfilename.dmp logfile=implog.log

table_exists_action:

skip 是如果已存在表,則跳過並處理下一個對象;

append是為表增加數據;

truncate是截斷表,然后為其增加新數據;

replace是刪除已存在表,重新建表並追加數據;

注:使用imp命令導入的話ignore=y就是覆蓋;

七、如何查看dmp文件是哪個用戶導出

1、打開dmp文件 找關鍵詞CONNECT 后面的bai就是對方的用戶名,執行imp userid=用戶名/密碼@orcl fromuser=原來的舊用戶 touser=新的用戶file=d:\xxxx.dmp命令成功導入,已執行檢測過。

八、刪除oracle用戶

- 查詢用戶各進程相對應的 sid、serial#。
-- 注意: username 必須大寫
SELECT sid,serial#,username FROM v$session WHERE username = 'AAA';
-- 根據上面的查詢結果,將用戶占用的所有進程殺掉。
--注意: sid 與 serial# 
ALTER SYSTEM KILL SESSION 'xxx, xxx';
-- 刪除用戶
DROP USER test1 CASCADE;

九、查看oracle數據庫版本

1)select* from v$version;

2)select * from product_component_version;

3)set serveroutput on;

exec dbms_output.put_line(dbms_db_version.version);

十、導入導出詳細步驟

注:導入導出之前都要先查看字符集:echo $NLS_LANG

1,expdp導入導出需要創建導入導出目錄:

      sqlplus / as sysdba

      create or replace directory test as '/home/oracle/dmp';

      exit

2,expdp" '/as sysdba' " directory=test   schemas=platform    dumpfile=platform_UAT_YYYYMMDD.dmp    logfile=platform_UAT_YYYYMMDD.log   version=11.2.0.1.0(高版本到低版本需要設置版本號)

3,導入時候把.dmp文件放到/home/oracle/dmp/test下

4,斷開所有應用連接,跟PLSQL連接,保證當前數據庫沒有客戶端在連接

5,dba角色用戶登陸,sqlplus / as sysdba

6,刪除用戶  drop user platform cascade;

7,退出sqlplus exit

8,導入之前先查看字符集 echo $NLS_LANG,如果字符集為空,則根據情況自行導入字符集

      export NLS_LANG = american_america.ZHS16GBK

9,最后導入dmp文件

      impdp " '/as sysdba' " directory=test  cluster = no dumpflie=platform_UAT_YYYYMMDD.dmp logfile=platform_YYYYMMDD-imp.log

  如果導入失敗,則使用下列方法:

   impdp " '/as sysdba' " directory=test   dumpflie=platform_UAT_YYYYMMDD.dmp

 logfile=platform_YYYYMMDD-imp.log   remap_schema=SOURCE_USER:platform

使用exp,imp命令導入導出不需要指定directory

 1,導入導出之前都要先查看字符集:echo $NLS_LANG

 2,exp  platform/platform@10.142.83.4:1521/tysys owner=platform file=platform_YYYYMMDD.dmp

3 ,  imp  platform/platform@10.141.238.180:1521/tysys full=y file=platform_YYYYMMDD.dmp ignore=y

 4,如果遇到無法導入的情況,則執行創建用戶,賦與connect,resource權限,dba角色

 sqlplus / as sysdba

 create user platform identified by platform default tablespace platform Temporary TABLESPACE Temp;

 grant connect,resource,dba to platform;

   exit;

5,重復導入exp文件即可。

十一、權限

1、授予權限
  1、默認的普通用戶SCOTT默認未解鎖,不能進行那個使用,新建的用戶也沒有任何權限,必須授予權限
  --授予 XIMING 用戶創建SESSION的權限,即登陸權限,允許用戶登錄數據庫
  GRANT CREATE SESSION TO XIMING;
  --授予XIMING用戶使用表空間的權限
  GRANT UNLIMITED TABLESPACE TO XIMING;
  --授予創建表的權限
  GRANT CREATE TABLE TO XIMING;
  --授予刪除表的權限
  GRANTE DROP TABLE TO XIMING;
  --插入表的權限
  GRANT INSERT TABLE TO XIMING;
  --修改表的權限
  GRANT UPDATE TABLE TO XIMING;
  --這條比較重要,授予所有權限(ALL)給所有用戶(PUBLIC)
  GRANT ALL TO PUBLIC;

  2、ORALCE對權限管理比較嚴謹,普通用戶之間也是默認不能互相訪問的,需要互相授權
  GRANT SELECT ON TABLENAME TO XIMING;--授予XIMING用戶查看指定表的權限
  GRANT DROP ON TABLENAME TO XIMING;--授予刪除表的權限
  GRANT INSERT ON TABLENAME TO XIMING;--授予插入的權限
  GRANT UPDATE ON TABLENAME TO XIMING;--授予修改表的權限
  GRANT INSERT(ID) ON TABLENAME TO XIMING;
  --授予對指定表特定字段的插入和修改權限,注意,只能是INSERT和UPDATE
  GRANT UPDATE(ID) ON TABLENAME TO XIMING;
  GRANT ALERT ALL TABLE TO XIMING;--授予XIMING用戶ALERT任意表的權限

2、撤銷權限
  基本語法同GRANT,關鍵字為REVOKE

3、查看權限
  SELECT * FROM USER_SYS_PRIVS;--查看當前用戶所有權限
  SELECT * FROM USER_TAB_PRIVS;--查看所用用戶對表的權限

4、操作表的用戶的表
  SELECT * FROM XIMING.<TABLENAME>(用戶.表明);

5、權限傳遞
  即用戶A將權限授予B,B可以將操作的權限再授予C,命令如下:
  GRANT ALERT TABLE ON TABLENAME TO XIMING WITH ADMIN OPTION;--關鍵字 WITH ADMIN OPTION
  GRANT ALERT TABLE ON TABLENAME TO XIMING WITH GRANT OPTION;--關鍵字 WITH GRANT OPTION效果和ADMIN類似

十二、更新有用戶名和密碼

select user#,name from user$ where name='舊用戶名' 
update user$ set name='新用戶民' where user#=? ;  參數
commit;
alter user 舊用戶名 identified by "新用戶名"; 
commit;
alter system checkpoint;
alter system flush shared_pool;

十三、報錯

1、IMP-00017: following statement failed with ORACLE error 959:

原因:在導入數據庫文件時,有一張表未導入成功,報了如下錯誤:
IMP-00003: 遇到 ORACLE 錯誤 959 ORA-00959: 表空間 'XXXXXXXXXXX' 不存在。

ORA-00959: ??? 'PARTNER_DBS' ???  (注:PARTNER_DBS這個表空間不存在)
查詢的確沒有對應的表空間:

select * from dba_data_files where tablespace_name = 'XXXX'

解決:添加上對應的表空間,再重新導入:

create tablespace emaoyi

logging

datafile 'D:\app\Administrator\product\11.2.0\dbhome_1\database\emaoyi.dbf'

size 10m

autoextend on

next 10m maxsize 20480m

extent management local;

注: 表空間自增長,其大小也不會超過最大大小,因此在設置大小時可以將MAXSIZE 設置為unlimited;

2、IMP-00085: multiple input files specified for unbounded export file

為無界導出文件指定了多個輸入文件

*原因:在導出的時候一個表因為過大,所以分成幾個dmp文件導出,所以在導入的時候注意,要用多個文件一起的命令格式導入,文件要完整且名稱要准確。我在導入三個文件時報錯,然后轉義一下就可以了。命令如下:

解決:imp 用戶名/密碼 file=\(文件01.dmp,文件02.dmp\) log=hn_log/日志名稱.log full=y commit=y ignore=y

3、IMP-00003: ORACLE error 942 encountered

ORA-00942: ???????

原因:1.表或視圖真的不存在 2.用戶沒有訪問該表的權限。

GRANT SELECT ON TABLENAME TO XIMING;--授予XIMING用戶查看指定表的權限
GRANT DROP ON TABLENAME TO XIMING;--授予刪除表的權限
GRANT INSERT ON TABLENAME TO XIMING;--授予插入的權限
GRANT UPDATE ON TABLENAME TO XIMING;--授予修改表的權限
GRANT INSERT(ID) ON TABLENAME TO XIMING;
解決:給用授予權限

4、ORA-02437: ???? (HN_DW.SYS_C0054645) - ????

原因:創建表示沒有添加主鍵,當表中存在很多重復數據時,此時再添加主鍵就會報這個錯誤。所以,設計表的時候一定要注意!

解決:先找出表中重復的數據,然后刪除相同數據rowid最小的那一列

5、IMP-00093: Inconsistency between dumpfile constraint definition for table PNR_INSPECT_PLAN_ITEM with columns ("ID")

原因:起因是在導入的過程中要導入系統生成的約束,類似SYS_C0027639, metalink上只提到了這個原因,但是以前很多次的imp應該都是有這樣系統生成的約束名,並沒有報錯過,所以應該還是有另外的因素參雜其中的,比如統計信息的生成。沒有繼續研究。

解決:在imp時使用indexes=no或statistics=none參數,當然后者比較好一些。

6、ORA-01000

解決:而是IMP-00093,只是由於太多的IMP-00093錯誤消耗了大量的cursor,導致一個session中的cursor數超過了定義的300,所以在最后就開始報ORA-01000錯誤了

7、ORA-00001: ???????? (HN_DW.PK_PNR_LINE_LOCUS)

原因:UPDATE或INSERT語句試圖插入重復的鍵

解決:刪除唯一約束限制或不插入重復值。

8、IMP-00009: abnormal end of export file

原因:這中情況通常是因為導出文件異常,當導如最后發現異常時,會回退所有操作。

9、ORA-01653: ? HN_DW.TBL_WORKORDER_USER_REPLY ???? 1024 (???? DAIWEIDBS ?) ??

原因:表空間不足

解決:擴充表空間

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM