程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 遷移整個數據庫,遷移數據庫

遷移整個數據庫,遷移數據庫

編輯:Oracle教程

遷移整個數據庫,遷移數據庫


1)遷移整個數據庫,然後再進行掛庫升級

第一步:先把數據庫正常停庫,然後重啟數據庫為只讀模式

Startup mount

Alter database open read only;

 

第二步:RMAN狀態下運行腳本,把源庫數據進行備分導出。

關於轉換的問題:在傳輸表空間我們說過都是小字節不用轉換也可以,但是現在是庫,小字節的也要進行轉換,因為它是庫,如果一個是高字節一個小字節這個是沒有辦法轉換成功的。就是說兩個字節類型必須一樣

run

{

allocate channel c1 type disk;

allocate channel c2 type disk;

 CONVERT DATABASE NEW DATABASE 'test'                                                     

 transport script '/home/oracle/transportdb.sql'                                        

 to platform 'Microsoft Windows IA (64-bit)'                                            

 db_file_name_convert '/oradata/miao' '/oracle/orabak/';

}

 轉換完成後可以在/oracle/orabak可以看到轉換後的文件

第三步:然後我們把這引起文件全部傳到windows下的E:\ORABAK目錄下面

 第四步:在目標機上建立參數文件和控制文件

  |--參數文件內容如下:

*.audit_file_dest='e:\app\Administrator\admin\senhao\adump'

*.audit_trail='NONE'

*.compatible='11.2.0.0.0'

*.control_files='e:\orabak\control01.ctl','e:\orabak\control02.ctl'

*.db_block_size=8192

*.db_domain=''

*.db_name='test'

*.deferred_segment_creation=FALSE

*.diagnostic_dest='e:\app\Administrator'

*.memory_target=837812224

*.nls_language='SIMPLIFIED CHINESE'

*.nls_territory='CHINA'

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

 

|--控制文件內容如下:

CREATE CONTROLFILE REUSE SET DATABASE "TEST" RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 'E:\orabak\redo01.log' size 50M,

GROUP 2 'E:\orabak\redo02.log' size 50M,

GROUP 3 'E:\orabak\redo03.log' size 50M

DATAFILE

'E:\orabak\system01.dbf',

'E:\orabak\undotbs01.dbf',

'E:\orabak\sysaux01.dbf',

'E:\orabak\users01.dbf',

'E:\orabak\example01.dbf'

CHARACTER SET ZHS16GBK

;

 

第五步:創建實例名,在WIN下用ORADIM命令

>>oradim -NEW -SID test

 

第六步:啟動數據庫到NOMOUNT狀態,並且創建控制文件

SQL> startup nomount pfile=e:\orabak\inittest.ora

SQL> @e:\orabak\ctl.sh.txt

 第七步:在這裡我們要特別注意:因為我們現在的庫是11g的,但是傳過來的是10g的庫,所以我們在打開庫的時候,一定要以升級的方式打開。否則庫就會損壞

SQL> alter database open resetlogs upgrade;

第八步:現在我們來做掛庫升級,用的腳本都是通用的

@?/rdbms/admin/catupgrd.sql

 

我們可以看到出了一個ORA-00904錯誤,我們通過meatlink查看可以是因為有一個表 在10的進修少一行,我們可以把它加上。如果沒有,我們直接創建

那麼,我們怎麼解決呢?我們先看一下我們這個裡面的表是幾行?

通過上圖我們可以看到我們的這個表只有三行,所以我們現在要加一行進行,或者把這三行全刪除了,再重新插入四行。語法如下:

1) If the registry$database table does not get created by the Pre-Upgrade Script,then it may be created using the below SQL statement:

SQL> 'CREATE TABLE registry$database(
platform_id NUMBER,
platform_name VARCHAR2(101),
edition VARCHAR2(30),
tz_version NUMBER
)';

2) Then manually insert the Platform DST Patch information using the below SQL statement:

SQL> 'INSERT into registry$database
(platform_id, platform_name, edition, tz_version)
VALUES ((select platform_id from v$database),
(select platform_name from v$database),
NULL,
(select version from v$timezone_file))';

 

現在我們直接加入一列就可以了

Alter table registry$database add tz_version NUMBER;

 

第九步:在這裡我們還要注意一點:那就我們要給現在這個庫添加一個臨時表空間,生產中好多都是沒有加這個,導致出了問題的。所以我們要查看一下如果沒有,這個一定要加的

SQL> select file_name from dba_temp_files;

SQL> alter tablespace temp add tempfile 'e:\orabak\temp01.dbf' size 1000m;

 第十步:現在我們再來跑那個腳本,在這之前,我們一定要開SPOOL,因為它閃屏太快,有沒有成功,有什麼錯誤我們都看不到,所以我們要做一個日志來記錄這些東西

SQL> spool e:\catpatch.log

SQL> @?/rdbms/admin/catupgrd.sql

 

 



來自為知筆記(Wiz)



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved