最近用到從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腳本