oracle數據庫還原,如何將dmp文件還原到oralce庫


 最近用到從oracle的dmp文件中還原數據
由於沒有這方面的資料,在網上搜集了一些,相信有以下這些資料,我們可以成功地將dmp文件用命令行的方式還原回去


在這里我用的是oracle10g的版本,我的機器是512內存的,運行oracle的web管理程序有一些困難,所以我選擇通過命令行的方式,
以下我的安裝完成后,oracle給出的報告


Enterprise Manager Database Control URL - (orcl) :
http://localhost:1158/em


數據庫配置文件已經安裝到
E:/oracle/product/10.2.0,


同時其他選定的安裝組件也已經安裝到
E:/oracle/product/10.2.0/db_1。


iSQL*Plus URL 為:
http://localhost:5560/isqlplus


iSQL*Plus DBA URL 為:
http://localhost:5560/isqlplus/dba

下面我們來看一看如何來完成這一任務

第一,啟動服務,(如果數據庫處於啟動狀態,那么略過這一步)

打開命令行執行以下語句
net start OracleServiceORCL
net start  OracleOraDb10g_home2TNSListener
net start OracleOraDb10g_home2iSQL*Plus

 

 
  以上方式是在windows服務中啟動服務,當windows服務不能啟動數據庫實例的時候,應用以下的語句
  set oracle_sid=orcl
  oradim -startup -sid orcl

  sqlplus internal/oracle
  startup
 

 

第二清理以前還原過的痕跡,如果我們在數據庫曾經還原過,我們先來清理一下,痕跡,
    //刪除用戶
    drop user xxxx cascade;
    //刪除表空間
    drop tablespace xxxx;
    //刪除數據庫文件
    e:/xxxxxx.dbf


第三,接下來,准備工作做好后,我們就可以開始還原了
//創建用戶
CREATE USER 用戶名 IDENTIFIED BY 密碼 DEFAULT TABLESPACE  USERS TEMPORARY TABLESPACE TEMP
 
//給予用戶權限
grant connect,resource,dba to xxxx
 

//創建表空間,並指定文件名,和大小
CREATE SMALLFILE TABLESPACE "xxxx" DATAFILE 'E:/ORADATA/ORCL/xxxx.DBF'
 SIZE 100M
 AUTOEXTEND ON NEXT 100M
 MAXSIZE UNLIMITED
 LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

 

//執行給予權限的腳本grant.txt,將權限給予剛才創建的用戶
//給予權限
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO xxxx


//開始導入(完全導入),file:dmp文件所在的位置, ignore:因為有的表已經存在,對該表就不進行導入。
   在后面加上 ignore=y 。指定log文件 log=e:/log.txt
imp user/pass@orcl full=y file=e:/xxx.dmp ignore=y log=e:/log.txt

//當我們不需要完整的還原數據庫的時候,我們可以單獨地還原某個特定的表
//---------------------------------------------------------------------------
imp user/pass@datbase file=e:/xxx.dmp ignore=y log=e:/log.txt tables=(xxxx)
imp user/pass@database file=e:/xxx.dmp ignore=y log=e:/log2.txt tables=(xxxx)
//---------------------------------------------------------------------------

 

//做到這里我們就已經完成了,數據庫的還原工作,下面我們就可以打開isqlplus查看表中的數據了
 
select * from ***
 

第四我們來看一下,對oracle常用的操作命令
1)查看表空間的屬性
 select tablespace_name,extent_management,allocation_type from dba_tablespaces


2)查找一個表的列,及這一列的列名,數據類型
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where TABLE_NAME='xxxx'

 
3)查找表空間中的用戶表
 select * from all_tables where owner='xxx' order by table_name desc

4)在指定用戶下,的表的數量
 select count(*) from user_tab_columns
 

5)查看數據庫中的表名,表列,所有列
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns order by table_name desc

6)查看用戶ZBFC的所有的表名及表存放的表空間
 select table_name,tablespace_name from all_tables where owner='xxxx' order by table_name desc
7)生成刪除表的文本
select 'Drop   table '||table_name||';' from all_tables where owner="ZBFC";

8)刪除表級聯刪除
drop table table_name [cascade constraints];

9)查找表中的列
select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where column_name like '%'||'地'||'%' order by table_name

desc
 

10)查看數據庫的臨時空間
select tablespace_name,EXTENT_SIZE,current_users,total_extents,used_extents,MAX_SIZE,free_extents from v$sort_segment;

 http://download1.csdn.net/down3/20070615/15202338310.txt


作者在導入的過程中,還遇到了一個錯誤,就是數據違反了唯一性約束,數據庫拒絕了數據
IMP-00019: 由於 ORACLE 的 1 錯誤而拒絕行
在網上看到有人說,這是字符集的原因,所以我就新建了一個數據庫,將字符集改成了ZHS16GBK這樣,從新導了一次,結果就成功了

 下面是grant.txt腳本

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com