Oracle表空間用戶數據導出

oracle表空間簡介   
Oracle表空間是數據管理的基本方法,所有用戶的對象要存放在表空間中,也就是用戶有空間的使用權,才能創建用戶對象。否則是不充許創建對象,因爲就是想創建對象,如表,索引等,也沒有地方存放,Oracle會提示:沒有存儲配額。因此,在創建對象之前,首先要分配存儲空間。分配存儲,就要創建表空間:

Oracle可以創建的表空間有三種類型:
(1)temporary: 臨時表空間,用於臨時數據的存放;創建臨時表空間的語法如下:create temporary tablespace test_temp ......
(2)undo: 還原表空間。用於存入重做日誌文件。創建還原表空間的語法如下:create undo tablespace test_undo ......
(3)用戶(數據)表空間: 最重要,也是用於存放用戶數據表空間可以直接寫成: create tablespace test_data .......
temporaty 和 undo 表空間是Oracle 管理的特殊的表空間。只用於存放系統相關數據。

查看錶空間

  1. select tablespace_name,file_id,bytes,file_name from dba_data_files  
<span style="font-size:18px;">select tablespace_name,file_id,bytes,file_name from dba_data_files</span>



創建(數據)表空間
(創建表空間stu_data,datafile指定數據表空間的存儲文件的位置,用來存放數據的文件)

  1. --第一種   
  2. create tablespace stu_data      
  3. logging   
  4. datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'       
  5. size 32m       
  6. autoextend on       
  7. next 32m    
  8. maxsize 2048m       
  9. extent management local;   
<span style="font-size:18px;">--第一種
create tablespace stu_data   
logging
datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'    
size 32m    
autoextend on    
next 32m 
maxsize 2048m    
extent management local; 
</span>



創建表空間參數講解
1、logging
有 nologging和 logging兩個選項,nologging:創建表空間時,不創建重做日誌。logging和nologging正好相反, 就是在創建表空間時生成重做日誌。用nologging時,好處在於創建時不用生成日誌,這樣表空間的創建較快,但是沒能日誌,數據丟失後,不能恢復,但是一般我們在創建表空間時,是沒有數據的,按通常的做法,是建完表空間,並導入數據後,是要對數據做備份的,所以通常不需要表空間的創建日誌,因此,在創建表空間時,選擇nologging,以加快表空間的創建速度。

2、datafile 用於指定數據文件的具體位置和大小。
如: datafile 'D:\Oracle\ORADATA\ORA92\LUNTAN.ora' SIZE 5M 說明文件的存放位置是'D:\Oracle\ORADATA\ORA92\LUNTAN.ora' ,文件的大小爲5M。如果有多個文件,可以用逗號隔開:
datafile 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' SIZE 5M,  'D:\ORACLE\ORADATA\ORA92\dd.ora' SIZE 5M
但是每個文件都需要指明大小。單位以指定的單位爲準,如 5M 或 500K。對具體的文件,可以根據不同的需要,存放大不同的介質上,如磁盤陣列,以減少IO竟爭。指定文件名時,必須爲絕對地址,不能使用相對地址。

3、extent management local:存儲區管理方法
在Oracle 8i以前,可以有兩種選擇,一種是在字典中管理(dictionary),另一種是本地管理(local),從9I開始,只能是本地管理方式。因爲local管理方式有很多優點。在字典中管理(dictionary): 將數據文件中的每一個存儲單元做爲一條記錄,所以在做DM操作時,就會產生大量的對這個管理表的Delete和Update操作。做大量數據管理時,將會產生很多的DM操作,嚴得的影響性能,同時,長時間對錶數據的操作,會產生很多的磁盤碎片,這就是爲什麼要做磁盤整理的原因。本地管理(local): 用二進制的方式管理磁盤,有很高的效率,同進能最大限度的使用磁盤。 同時能夠自動跟蹤記錄臨近空閒空間的情況,避免進行空閒區的合併操作。

4、segment space management:磁盤擴展管理方法:
  ◆segment space management: 使用該選項時區大小由系統自動確定。由於 Oracle 可確定各區的最佳大小,所以區大小是可變的。
  ◆uniform segment space management:指定區大小,也可使用默認值 (1 MB)。

5、段空間的管理方式:
  ◆auto: 只能使用在本地管理的表空間中。 使用LOCAL管理Oracle表空間時,數據塊中的空閒空間增加或減少後,其新狀態都會在位圖中反映出來。位圖使 Oracle 管理空閒空間的行爲更加自動化,併爲管理空閒空間提供了更好的性,但對含有LOB字段的表不能自動管理。
  ◆nanual: 目前已不用,主要是爲向後兼容。

  1. --第二種   
  2. create tablespace stu_data    
  3. datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'       
  4. size 800M     
  5. autoextend on     
  6. next 50M     
  7. maxsize unlimited     
  8. --maxsize unlimited 是大小不受限制   
<span style="font-size:18px;">--第二種
create tablespace stu_data 
datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'    
size 800M  
autoextend on  
next 50M  
maxsize unlimited  
--maxsize unlimited 是大小不受限制 </span>



  1. --第三種   
  2. create tablespace stu_data    
  3. datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'       
  4. size 800M     
  5. autoextend on     
  6. next 50M     
  7. maxsize 1000M   
  8. extent management local uniform;     
  9. --unform表示區的大小相同,默認爲1M     
<span style="font-size:18px;">--第三種
create tablespace stu_data 
datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'    
size 800M  
autoextend on  
next 50M  
maxsize 1000M
extent management local uniform;  
--unform表示區的大小相同,默認爲1M   </span>



  1. --第四種   
  2. create tablespace stu_data    
  3. datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'       
  4. size 800M     
  5. autoextend on     
  6. next 50M    
  7. maxsize 1000M    
  8. extent management local uniform size 500K;     
  9. --unform size 500K表示區的大小相同,爲500K   
<span style="font-size:18px;">--第四種
create tablespace stu_data 
datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'    
size 800M  
autoextend on  
next 50M 
maxsize 1000M 
extent management local uniform size 500K;  
--unform size 500K表示區的大小相同,爲500K </span>



  1. --第五種   
  2. create tablespace stu_data    
  3. datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'       
  4. size 800M     
  5. autoextend on     
  6. next 50M   
  7. maxsize 1000M     
  8. extent management local autoallocate;     
  9. --autoallocate表示區的大小由隨表的大小自動動態改變,大表使用大區小表使用小區   
<span style="font-size:18px;">--第五種
create tablespace stu_data 
datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'    
size 800M  
autoextend on  
next 50M
maxsize 1000M  
extent management local autoallocate;  
--autoallocate表示區的大小由隨表的大小自動動態改變,大表使用大區小表使用小區 </span>



  1. --第六種   
  2. create tablespace stu_data    
  3. datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'       
  4. size 800M     
  5. autoextend on     
  6. next 50M     
  7. maxsize 1000M     
  8. temporary;     
  9. --temporary創建字典管理臨時表空間   
<span style="font-size:18px;">--第六種
create tablespace stu_data 
datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'    
size 800M  
autoextend on  
next 50M  
maxsize 1000M  
temporary;  
--temporary創建字典管理臨時表空間 </span>



爲表空間增加數據文件

  1. alter tablespace stu_data add     
  2. datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'       
  3. size 800M     
  4. autoextend on    
  5. next 50M     
  6. maxsize 1000M;  
<span style="font-size:18px;">alter tablespace stu_data add  
datafile 'D:\oracle\product\10.2.0\oradata\orcl\stu_data.dbf'    
size 800M  
autoextend on 
next 50M  
maxsize 1000M;</span>



創建臨時表空間
(創建臨時表空間stu_temp,tempfile指定臨時表空間的存儲文件的位置,是臨時文件)

  1. --創建方式和創建數據表空間相同,只是把datafile改爲tempfile   
  2. create temporary tablespace stu_temp       
  3. tempfile 'D:\oracle\product\10.2.0\oradata\orcl\stu_temp01.dbf'       
  4. size 32m       
  5. autoextend on       
  6. next 32m maxsize 2048m       
  7. extent management local;  
<span style="font-size:18px;">--創建方式和創建數據表空間相同,只是把datafile改爲tempfile
create temporary tablespace stu_temp    
tempfile 'D:\oracle\product\10.2.0\oradata\orcl\stu_temp01.dbf'    
size 32m    
autoextend on    
next 32m maxsize 2048m    
extent management local;</span>



創建用戶 並指定表空間
(創建用戶stu_test,密碼爲abcdef,指定其默認表空間爲stu_data,臨時表空間爲stu_temp)

  1. create user stu_test identified by abcdef       
  2. default tablespace stu_data      
  3. temporary tablespace stu_temp;   
<span style="font-size:18px;">create user stu_test identified by abcdef    
default tablespace stu_data   
temporary tablespace stu_temp; </span>



給用戶授權

  1. grant connect,resource to stu_test;  
<span style="font-size:18px;">grant connect,resource to stu_test;</span>



用戶常用權限:connect resource dba exp_full_database imp_full_database

改變用戶的默認表空間

  1. alter user stu_test default tablespace stu_data;    
<span style="font-size:18px;">alter user stu_test default tablespace stu_data;  </span>




刪除用戶以及用戶所有的對象

  1. drop user stu_test cascade;   
  2. --cascade參數是級聯刪除該用戶所有對象,經常遇到如用戶有對象而未加此參數則用戶刪不了的問題,所以習慣性的加此參數  
<span style="font-size:18px;">drop user stu_test cascade;
--cascade參數是級聯刪除該用戶所有對象,經常遇到如用戶有對象而未加此參數則用戶刪不了的問題,所以習慣性的加此參數</span>




刪除表空間
前提:刪除表空間之前要確認該表空間沒有被其他用戶使用之後再做刪除

  1. drop tablespace stu_data including contents and datafiles cascade onstraints;   
  2. --including contents 刪除表空間中的內容,如果刪除表空間之前表空間中有內容,而未加此參數,表空間刪不掉,所以習慣性的加此參數   
  3. --including datafiles 刪除表空間中的數據文件    
  4. --cascade constraints 同時刪除tablespace中表的外鍵參照  
<span style="font-size:18px;">drop tablespace stu_data including contents and datafiles cascade onstraints;
--including contents 刪除表空間中的內容,如果刪除表空間之前表空間中有內容,而未加此參數,表空間刪不掉,所以習慣性的加此參數
--including datafiles 刪除表空間中的數據文件 
--cascade constraints 同時刪除tablespace中表的外鍵參照
</span>




如果刪除表空間之前刪除了表空間文件,解決辦法:

如果在清除表空間之前,先刪除了表空間對應的數據文件,會造成數據庫無法正常啓動和關閉。
可使用如下方法恢復(此方法已經在oracle9i中驗證通過):
下面的過程中,filename是已經被刪除的數據文件,如果有多個,則需要多次執行;tablespace_name是相應的表空間的名稱。

  1. $ sqlplus /nolog   
  2. SQL> conn / as sysdba;   
  3. --如果數據庫已經啓動,則需要先執行下面這行:   
  4. SQL> shutdown abort   
  5. SQL> startup mount    
  6. SQL> alter database datafile 'filename' offline drop;    
  7. SQL> alter database open;    
  8. SQL> drop tablespace tablespace_name including contents;  
<span style="font-size:18px;">$ sqlplus /nolog
SQL> conn / as sysdba;
--如果數據庫已經啓動,則需要先執行下面這行:
SQL> shutdown abort
SQL> startup mount 
SQL> alter database datafile 'filename' offline drop; 
SQL> alter database open; 
SQL> drop tablespace tablespace_name including contents;</span>




oracle數據庫的導入導出命令:

Oracle數據導入導出imp/exp就相當於oracle數據還原與備份。exp命令可以把數據從遠程數據庫服務器導出到本地的dmp文件, imp命令可以把dmp文件從本地導入到遠處的數據庫服務器中。 利用這個功能可以構建兩個相同的數據庫,一個用來測試,一個用來正式使用

導出數據庫文件(開始--運行--cmd)
1、用戶名爲stu_test,密碼爲abcdef,數據庫爲orcl,file=.....爲導出後存放位置

  1. exp stu_test/abcdef@orcl file=d:/a.dmp  
<span style="font-size:18px;">exp stu_test/abcdef@orcl file=d:/a.dmp</span>


2、將數據庫中system用戶與sys用戶的表導出

  1. exp system/system@orcl file=d:/a.dmp owner=(system,sys)  
<span style="font-size:18px;">exp system/system@orcl file=d:/a.dmp owner=(system,sys)</span>


3、將數據庫中的表t1、t2導出

  1. exp zyna/zyna@orcl file=d:/a.dmp tables=(t1,t2)  
<span style="font-size:18px;">exp zyna/zyna@orcl file=d:/a.dmp tables=(t1,t2)</span>

4、將數據庫中的表table1中的字段filed1以"00"打頭的數據導出

  1. exp system/system@orcl file=d:/a.dmp tables=(table1) query=" where filed1 like '00%'"  
<span style="font-size:18px;">exp system/system@orcl file=d:/a.dmp tables=(table1) query=" where filed1 like '00%'"</span>



導入數據庫文件(開始--運行--cmd )
1、用戶名是stu_test,密碼是abcdef,數據庫是orclfile=....是要導入的數據庫文件的存放位置

  1. imp stu_test/abcdef@orcl file=d:/a.dmp full=y  
<span style="font-size:18px;">imp stu_test/abcdef@orcl file=d:/a.dmp full=y</span>

 

  1. imp stu_test/abcdef@orcl file=d:/a.dmp full=y ignore=y   
  2. --上面可能有點問題,因爲有的表已經存在,然後它就報錯,對該表就不進行導入。   
  3. --在後面加上 ignore=y 就可以了。  
<span style="font-size:18px;">imp stu_test/abcdef@orcl file=d:/a.dmp full=y ignore=y
--上面可能有點問題,因爲有的表已經存在,然後它就報錯,對該表就不進行導入。
--在後面加上 ignore=y 就可以了。
</span>


2、將d:/a.dmp中的表table1 導入

  1. imp system/system@orcl file=d:/a.dmp tables=(table1)  
<span style="font-size:18px;">imp system/system@orcl file=d:/a.dmp tables=(table1)</span>


注意:用戶要有導入導出權限

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章