Oracle11g資料庫匯入Oracle10g問題
1)問題1: Oracle11g資料庫匯入Oracle10g資料庫操作匯入解決方法:
11g備份,匯入10g的時候會拋錯,直接阻止匯入。
但是有時候還必須得把11g的資料庫匯入到10g,我今天就遇到了這種情況。
一、在11g伺服器上,使用expdp命令備份資料
EXPDP USERID='SYS/cuc2009@cuc as sysdba' schemas=sybj directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2.0.1.0
其中,紅色文字部分是根據需要改寫的地方。例如我的sys密碼是cuc2009,資料庫sid是cuc,要到出的使用者名稱是sybj,要匯入到10.2.0.1.0版本的Oracle資料庫中去。aa.dmp和aa.log將會在11g的dpdump目錄中生成,例如我的11g裝在了E盤下面,於是aa.dmp將會在E:\app\Administrator\admin\cuc\dpdump目錄下被生成。
二、在10g伺服器上,使用impdp命令恢復資料
準備工作:1.建庫2.建表空間3.建使用者並授權4.將aa.dmp複製到10g的dpdump目錄下
1-3點可以去參考博主的上一篇部落格“Oracle資料庫移植全步驟”,介紹的很詳細,這裡不再多說。關於第4點,我的10g裝在了e:\tools目錄下,於是我將aa.dmp檔案複製到了E:\tools\admin\cucf\dpdump目錄下。
IMPDP USERID='SYS/cuc2009@cucf as sysdba' schemas=sybj directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2.0.1.0
其中紅色部分是根據需要改寫的地方。例如我的sys密碼是cuc2009,資料庫sid是cucf,要匯入使用者名稱為sybj,要匯入到10.2.0.1.0版本的Oracle資料庫中去。aa.log將會在10g的dpdump目錄中生成。
http://blog.csdn.net/defonds/archive/2009/06/13/4263137.aspx
2)問題2:Oracle 11g匯出來的dmp匯入到 10g的資料庫(IMP-00010:不是有效的匯出檔案,頭部驗證失敗)
oracle 11g R2 匯出去的dmp檔案,匯入11g R1或10G的,都顯示:
IMP-00010:不是有效的匯出檔案,頭部驗證失敗
為了這個問題一直苦惱,差點就想卸掉11g然後裝10g了,後來想想,頭部驗證,那麼頭部到底是什麼,用Notepad++檢視了dmp檔案,發現頭部真的顯示一些東西:
11g R2:V11.02.00
11g R1:V11.01.00
10g:V10.02.01
把版本改成對方機子資料庫版本,執行imp就不再報錯了。
考慮到如果檔案過大,可能打不開導致當機,做個小程式。(C# WINFORM)
2個按鈕的事件:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog file = new OpenFileDialog();
file.InitialDirectory = Application.ExecutablePath;
if (file.ShowDialog() == DialogResult.OK)
{
String path =label11.Text= file.FileName;
FileStream fs = File.OpenRead(path);
fs.Seek(0, SeekOrigin.Begin);
byte[] byData = new byte[100];
fs.Read(byData, 0, 50);
string charData = new UTF8Encoding(true).GetString(byData, 0, byData.Length);
string[] da = System.Text.RegularExpressions.Regex.Split(charData, @":V", RegexOptions.IgnoreCase);
Regex r = new Regex(@":V\d{2}\.\d{2}\.\d{2}");
Match m = r.Match(charData);
label9.Text = m.Index.ToString ();
label10.Text = m.Length.ToString();
textBox1.Text = System.Text.RegularExpressions.Regex.Split(m.Value, @":V", RegexOptions.IgnoreCase)[1];
fs.Close();
}
}
private void button2_Click(object sender, EventArgs e)
{
Regex r = new Regex(@"\d{2}\.\d{2}\.\d{2}");
Match m = r.Match(textBox1.Text);
if (m.Success)
{
FileStream fs = File.OpenWrite(label11.Text);
fs.Seek(int.Parse(label9.Text.ToString())+2, SeekOrigin.Begin);
Byte[] info = new UTF8Encoding(true).GetBytes(textBox1.Text);
fs.Write(info, 0, info.Length);
fs.Close();
MessageBox.Show("版本修改成功。");
}
else
MessageBox.Show("版本格式錯誤。");
}
下載:http://files.cnblogs.com/alxc/AlxcTools.rar
3)問題3: 11g exp資料時就會遺漏記錄數為0的表匯入錯誤解決方法:
原因在於11gR2中的新功能 – Deferred Segment Creation(延遲段建立),預設情況 下這個功能是啟用的。
SQL>show parameter DEFERRED_SEGMENT_CREATION
NAME TYPE VALUE
------------------------------------ --------------------
deferred_segment_creation boolean TRUE
延遲段建立的含義是當此新建立一個可能會有Segment的物件時(比如表、索引、物化 檢視等),如果這個物件中還沒有任何記錄需要消耗一個Extent,那麼將不會在建立物件時自動建立Segment,這樣做的好處無疑是在建立物件時大大提高了速度。
對於上例中的T2表,我們在建立結束就立刻檢查DBA_SEGMENTS檢視,會發現沒有任何記
錄。
SQL>select segment_name from user_segments where segment_name='T2';
no rows selected
而對於exp程式而言,當僅僅存在Object的定義而沒有相應的Segment時,就會報出
EXP-00011物件不存在的錯誤。
解決方法就很簡單了,以下方法任選其一。
1. 設定DEFERRED_SEGMENT_CREATION為FALSE,這樣建立物件時就會自動建立Segment
2. 在建立物件時,明確指定立刻建立Segment
create table t2 (n number) SEGMENT CREATION IMMEDIATE;
3. 使用expdp替代exp(Datapump本身就是Oracle10g以後的推薦工具)
D:\Tempexpdp kamus/oracle tables=t2
Export: Release 11.2.0.1.0 - Production on Fri Apr 16 18:14:41 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights
reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 -
64bit Production
With the Partitioning, Oracle Label Security, Data Mining and Real
Application Testing opt ions
Starting "KAMUS"."SYS_EXPORT_TABLE_01": kamus/******** tables=t2
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 0 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "KAMUS"."T2" 0 KB 0
rows
Master table "KAMUS"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
****************************************************************************
Dump file set for KAMUS.SYS_EXPORT_TABLE_01 is:
D:\ORACLE\ADMIN\ORCL\DPDUMP\EXPDAT.DMP
Job "KAMUS"."SYS_EXPORT_TABLE_01" successfully completed at 18:15:10
4、如果一定要用exp的話可以考慮給空表分配段:
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
以上問題均為實際環境11g匯入10G中遇到過,部分問題及方案參考各位大俠的經驗,一併收錄。
文章版權所有Jusin Hao(luckyfriends),支援原創,轉載請註明。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14710393/viewspace-1082697/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫SQL Server DAC 匯入匯出資料到SQL Azure問題資料庫SQLServer
- 【oracle 資料匯入匯出字元問題】Oracle字元
- mysql資料庫匯入外來鍵約束問題MySql資料庫
- MySQL資料匯入匯出亂碼問題MySql
- BW資料匯入亂碼問題
- imp工具匯入整個資料庫出現的問題資料庫
- 資料庫 MySQL 資料匯入匯出資料庫MySql
- DBeaver 資料匯入SQL時的問題SQL
- 資料庫的匯入匯出資料庫
- mysql 資料庫匯入匯出MySql資料庫
- MySQL資料庫匯入匯出MySql資料庫
- 大文字資料,匯入匯出到資料庫資料庫
- oracle10G新特性之資料泵匯出/匯入Oracle
- 關於資料表結構sql檔案匯入mysql資料庫的問題?MySql資料庫
- 資料庫寫入的問題資料庫
- excel檔案內容匯入資料庫的問題及解決Excel資料庫
- DB2匯入資料遇到的問題DB2
- 特殊字元^M引起的資料匯入問題字元
- 【mysql】資料庫匯出和匯入MySql資料庫
- mysqldump匯入匯出mysql資料庫MySql資料庫
- oracle資料庫匯入匯出命令!Oracle資料庫
- Mysql 資料庫匯入與匯出MySql資料庫
- 請問java中向網頁匯入資料問題!Java網頁
- 資料匯出問題
- SSIS中匯入Excel資料到資料庫的一個常見小問題Excel資料庫
- oracle9i資料匯入oracle10gOracle
- Access 匯入 oracle 資料庫Oracle資料庫
- excel 匯入sqlyog資料庫ExcelSQL資料庫
- 將XML匯入資料庫XML資料庫
- 在SQL Server資料庫中匯入匯出資料SQLServer資料庫
- ORA-39082 匯入資料遇到的問題
- SQL資料庫的匯入和匯出SQL資料庫
- plsql developer匯入匯出資料庫方法SQLDeveloper資料庫
- 使用PHP向MySQL資料庫匯入資料,中文字元顯示亂碼問題PHPMySql資料庫字元
- xml與資料庫中資料的匯入匯出XML資料庫
- SQL Server資料庫匯入匯出資料方式比較SQLServer資料庫
- 將informix匯出的文字資料匯入oracle資料庫ORMOracle資料庫
- TP5.1excel匯入資料庫的程式碼?php excel如何匯入資料庫?Excel資料庫PHP