使用傳輸表空間跨平台遷移資料庫

2021-06-09 06:22:40 字數 4621 閱讀 7132

***資料庫遷移,由於資料量比較大,有1t,用匯出匯入的方式比較花費時間,採用表空間傳輸方式提高遷移速度。

sourcedb environment:

os:oracle@qc_p570_728:/home/oracle>uname -a

aix qc_p570_728 1 6 00c4035e4c00

db version:

sql> select * from v$version;

banner

oracle database 11g enterprise edition release 11.2.0.2.0 - 64bit production

pl/sql release 11.2.0.2.0 - production

core    11.2.0.2.0      production

tns for ibm/aix risc system/6000: version 11.2.0.2.0 - production

nlsrtl version 11.2.0.2.0 - production

endian_format:

sql> select d.name, i.version, d.platform_name, endian_format

2    from v$transportable_platform tp, v$database d, v$instance i

3   where tp.platform_name = d.platform_name

4     and d.db_unique_name = i.instance_name;

name  version      platform_name         endian_format

cszg4  11.2.0.2.0     aix-based systems (64-bit)   big

db instance:

cszg4

db characterset:

sql> select * from nls_database_parameters where parameter in('nls_language','nls_territory','nls_characterset');

parameter                      value

nls_language                   american

nls_territory                  america

nls_characterset               zhs16gbk

targetdb environment:

os:oracle@vm-test-133 shzw]$ uname -a

linux vm-test-133 2.6.32-131.0.15.el6.x86_64 #1 smp tue may 10 15:42:40

edt 2011 x86_64 x86_64 x86_64 gnu/linux

db version:

sql> select * from v$version;

banner

oracle database 11g enterprise edition release 11.2.0.3.0 - 64bit production

pl/sql release 11.2.0.3.0 - production

core    11.2.0.3.0      production

tns for linux: version 11.2.0.3.0 - production

nlsrtl version 11.2.0.3.0 - production

endian_format:

sql> select d.name, i.version, d.platform_name, endian_format

2    from v$transportable_platform tp, v$database d, v$instance i

3   where tp.platform_name = d.platform_name

4     and d.db_unique_name = i.instance_name;

name   version     platform_name    endian_format

shzw   11.2.0.3.0    linux x86 64-bit       little

db instance:

shzw

db characterset:

sql> select * from nls_database_parameters where parameter in('nls_language','nls_territory','nls_characterset');

parameter                      value

nls_language                   american

nls_territory                  america

nls_characterset               zhs16gbk

從上面兩環境的對比表可以看出,作業系統不同,平台間的endian不同,那麼在匯入操作之前必須首先轉換源平台的表空間到目標格式;如果endian相同,即使是不同作業系統,則可以跳過轉換的步驟,當然前提是各平台的資料庫版本不能低於10g。資料轉換可以在源庫進行也可以在目標庫進行,它們的轉換指令碼略有差別,具體在後面操作中提到。

表空間傳輸方式在目標庫的準備工作:

1、  在目標庫不用建立任何表空間,

2、  建立與要傳輸的表空間相關使用者,如果使用者在源庫上指定了預設表空間為要傳輸的表空間,在這兒建立使用者時不用指定(因為還沒有表空間),

待傳輸完後再進行修改使用者的預設表空間。

select * from v$tablesapce;

col name format a60;

set linesize 200;

select ts#,file#,name from v$datafile order by ts#,file#;

2、  create directory

sql>grant read ,write on directory dmpdir to system;

3、  將要傳輸的表空間置為唯讀狀態

alter tablespace data read only;

alter tablespace data01 read only;

4、匯出元資料

expdp system/sys@orcl directory=dmp dumpfile=tts.dmp transport_tablespaces=data01,data02logfile=tts.log

5、轉換資料(如果是相同平台遷移,此步可以略去)

$rman target=/

rman>

convert tablespace 'data'

to platform="linux x86 64-bit"

db_file_name_convert='/home/oracle/oradata/data01.dbf','/tmp/data01.dbf';

note

:如果在目標庫轉換,則因為目標庫還沒有表空間,則進行資料檔案轉換。採用如下指令碼:

rman> convert datafile'/home/oracle/oradata/data01.dbf'

to platform =" linux x86 64-bit "

from platform ="

aix-based systems(64-bit) "

db_file_name_convert='/home/oracle/oradata/data01.dbf','/tmp/data01.dbf';

6、ftp轉換後的資料檔案到目標機的資料檔案存放位置

1、create directory

sql>grant read ,write on directory dmpdir to system;

2、  將在源頭庫所在的機器上的匯出檔案tts.dmp檔案拷貝到目標庫的dmpdir目錄

3、匯入元資料

impdp system/sys@dbtest directory=dmpdir dumpfile=tts.dmplogfile=tts2.logtransport_datafiles='e:\oracle\product\10.2.0\oradata\dbtest\x01.dbf',

'e:\oracle\product\10.2.0\oradata\dbtest\y01.dbf'(資料檔案多也可以寫到引數檔案中去,parfile=db_imp.par)

4、檢查表空間,資料

5、執行完後將表空間置為正常狀態(

包括目標庫和源頭庫)

alter tablespace data01 read write;

alter tablespace data02 read write;

6、修改使用者預設表空間

alter user cd default tablespace data01;

alter usdr ad default tablespace data02;

Flask遷移資料庫

在開發程式的過程中,你會發現有時需要修改資料庫模型,而且修改之後還需要更新資料庫。僅當資料庫表不存在時,flask sqlalchemy 才會根據模型進行建立。因此,更新表的唯一方式就是先刪除舊表,不過這樣做會丟失資料庫中的所有資料。更新表的更好方法是使用資料庫遷移框架。原始碼版本控制工具可以跟蹤原...

django bug 遷移資料庫

1 執行 python manage.py makemigrations 報錯,遷移失敗 解決辦法 新增預設值 default,重新進行遷移 class author models.model name models.charfield max length 50 email models.emai...

mysqldump遷移資料庫

同事接手了乙個第三方專案,需要把資料庫也遷移到本地。備份 mysqldump h127.0.0.1 uroot p 123 flush logs single transaction all databases test.sql 壓縮 傳輸 tar pczvf test.sql.gz test.sq...