天天看點

oracle資料庫還原,如何将dmp檔案還原到oralce庫

 最近用到從oracle的dmp檔案中還原資料

由于沒有這方面的資料,在網上搜集了一些,相信有以下這些資料,我們可以成功地将dmp檔案用指令行的方式還原回去

在這裡我用的是oracle10g的版本,我的機器是512記憶體的,運作oracle的web管理程式有一些困難,是以我選擇通過指令行的方式,

以下我的安裝完成後,oracle給出的報告

enterprise manager database control url - (orcl) :

<a href="http://localhost:1158/em">http://localhost:1158/em</a>

資料庫配置檔案已經安裝到

e:/oracle/product/10.2.0,

同時其他標明的安裝元件也已經安裝到

e:/oracle/product/10.2.0/db_1。

isql*plus url 為:

<a href="http://localhost:5560/isqlplus">http://localhost:5560/isqlplus</a>

isql*plus dba url 為:

<a href="http://localhost:5560/isqlplus/dba">http://localhost:5560/isqlplus/dba</a>

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

第一,啟動服務,(如果資料庫處于啟動狀态,那麼略過這一步)

打開指令行執行以下語句

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

//當我們不需要完整的還原資料庫的時候,我們可以單獨地還原某個特定的表

//---------------------------------------------------------------------------

//做到這裡我們就已經完成了,資料庫的還原工作,下面我們就可以打開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腳本