一、導入命令
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 ?) ??
原因:表空間不足
解決:擴充表空間