深入解析oracle--資料庫的初始化

jelephant發表於2015-10-27
一、Oracle的預設定時任務可能帶來很多問題,所以我們有必要關注一下系統有哪些預設的任務
查詢任務
dba_scheduler_jobs
dba_scheduler_job_run_details
關閉任務
execute dbms_scheduler.disable('AUTO_SPACE_ADVISOR_JOB');

二、為了保證在RAC環境備份歸檔日誌的方便性,歸檔日誌除了分別在兩節點進行本地歸檔外,在進行本地歸檔的同時,透過配置log_archive_dest_2向另一節點傳送歸檔日誌,在透過orapwd工具在一個節點更改sys密碼後,造成歸檔log_archive_dest_2向另一個節點無法傳送歸檔日誌。在RAC或DG環境中,ORA-16191錯誤通常是由於兩個節點的密碼檔案不一致或者remote_login_passwordfile引數設定不當造成的。而本次重建了密碼檔案還是沒有解決問題,經分析後發現跟oracle11g的口令安全增強有關。(SEC_CASE_SENSITIVE_LOGON)
當啟用強口令認證時,oracle區分密碼大小寫,在建立口令檔案時,即使口令相同也會在兩個節點產生不用的hash值,需要指定ignorecase=y引數強制忽略大小寫才能保證DG的正常認證。

三、dbms_backup_restore包
可以在資料庫例項nomount狀態下呼叫,直接從備份集讀取資料檔案,功能十分強大。用於RMAN進行資料備份時,備份資訊丟失的情況。

四、傳輸表空間標準步驟
1、以sys使用者執行非嚴格自包含檢查
exec dbms_tts.transport_set_check('USER',true,false);
select * from tansport_set_violations;
以sys使用者執行嚴格自包含檢查
exec dbms_tts.transport_set_check('JEL',true,true);
select * from tansport_set_violations;
可以對多個表空間進行同時傳輸
exec dbms_tts.transport_set_check('USER,JEL',true,true);
select * from tansport_set_violations;
2、將表設定為只讀
alter tablespace user read only;
3、匯出表空間
exp/expdp
4、傳輸檔案
將匯出的表空間後設資料和資料檔案轉移到目標主機
5、匯入目標端
imp/impdp
6、將源端和目標端表空間置為讀寫
alter tablespace user read write;

五、不同位元組序平臺跨平臺表空間傳輸
Solaris到windows
Oracle 10G之前,資料檔案是不能跨平臺傳輸使用的
確認平臺資訊
v$transportable_platform v$database  (platform_name)
1、設定表空間只讀
alter tablespace user read only;
2、匯出傳輸表空間
exp/expdp
3、使用rman的convert命令轉換檔案格式
rman target /
convert tablespace user
to platform 'Microsoft Windows IA (32-bit)'
format  '/tmp/%N_%f';
4、確認檔案生成
cd /tmp
ls -lrt
5、把dump檔案和convert生成的檔案傳輸到目標端
scp
6、目標端對檔案進行轉換
rman target /
convert datafile '源端傳過來的convert檔案'
db_file_name_covert
'源端傳過來的convert檔案','源端傳過來的convert檔案重新命名.dbf'
7、在目標端建立相應使用者並執行匯入
create user 
imp/impdp
8、把表空間置為讀寫

六、相同位元組序平臺間傳輸表空間
由於不同平臺上作業系統會在資料檔案頭上寫系統資訊,這部分資訊無法跨平臺,所以仍然會導致跨平臺的檔案無法被資料庫正確識別。在oracle10g中,同位元組跨平臺的檔案頭資訊oracle會自動改寫,不需要轉換。
實驗環境
Red Hat Enterprise Linux AS release 3+Oracle 9iR2 9.2.0.4
window XP+Oracle 10g 10.2.0.1
select * from v$version where rownum<2;
看一下linux平臺,檔案頭被作業系統保留的位元組數:
select file_name,bytes from dba_data_files where tablespace_name='USERS';
檢視作業系統下檔案的大小  ls -lrt USERS.dbf
兩個值的差,為作業系統在檔案頭的位元組
linux匯出檔案到window平臺匯入時,會出現ORA-00600錯誤,提示檔案頭無法正確識別。可以透過這個檔案進行一個特殊操作,為檔案更換一個window檔案頭。
1、提取windows資料檔案頭
dd if=user.dbf of=header.dbf bs=8192 count=1
2、去除linux資料檔案頭
dd if=user.dbf of=linux.dbf bs=8192 skip=1
3、將兩個檔案合二為一
copy /b header.dbf+linux.dbf users.dbf
則users.dbf就具有windows平臺下的檔案頭和linux平臺下的檔案體
然後匯入window平臺資料庫
結論,oracle 9i資料檔案可以透過表空間傳輸遷移到oracle 10g中使用

七、Oracle10g 同位元組序跨平臺遷移
注意事項
1、源平臺與目標平臺有相同的位元組序
2、重做日誌檔案和控制檔案不會傳輸,遷移之後需要重建控制檔案使用resetlogs方式開啟資料庫;臨時檔案不會被傳輸
3、BFILES、外部表和directories不會被傳輸
如下實驗linux+oracle 10.2.0.1  到 windows+Oracle 10.2.0.3,通常高版本資料庫不能向低版本遷移
1、確認源平臺和目標平臺具有相同的位元組序
2、確認源資料庫是否支援遷移,跨平臺遷移需要資料庫處於read only模式開啟,使用dbms_tdb.check_db進行檢查
declare
db_ready boolean;
begin
db_ready := dbms_tdb.check_db('Microsoft Windows IA (32-bit)');
end;
/
如果儲存過程成功執行,並且沒有其他警告輸出,則說明資料庫可以支援跨平臺轉移
3、檢查外部物件
使用dbms_tdb.check_external來識別外部表、directories或BFILES,這些物件所指向的外部資料不能被RMAN自動轉移
declare
db_external boolean;
begin
db_external := dbms_tdb.check_external;
end;
/
4、使用RMAN進行跨平臺檔案遷移
跨平臺遷移首先透過RMAN程式資料檔案轉換
rman target /
convert database new database 'JEL2'
transport script '/home/oracle/script/transport.sql'
to platform 'Microsoft Windows IA (32-bit)'
db_file_name_convert '/oracle/app/oradata/JEL1/datafile' \ '/home/oracle/transport'
指定生成的轉換指令碼進行參考,所有的資料檔案轉換後存放在一個新目錄
修改rman生成的引數檔案,主要是路徑修改
5、轉移轉換出的檔案到目標端
6、建立基礎環境
7、遷移步驟
啟動資料庫到nomount狀態
startup nomount pfile=
建立控制檔案,然後關閉資料庫,啟動資料庫到mount狀態,然後open資料庫
alter database open resetlogs;
如果兩個平臺的資料庫版本完全一樣,則以上步驟可以順利進行。但本例中,以上語句報錯,必須執行upgrade選項來開啟資料庫
再次啟動資料庫到upgrade模式,由於之前的資料庫中斷,現在需要進行恢復工作
startup upgrade;
recover database
shutdown immediate;
startup upgrage;
執行指令碼?/rdbms/admin/utlirp.sql,該指令碼的作用是重新編譯資料庫中的plsql物件
shutdown and restart the database in normal mode and run utlrp.sql to recompile invalid objects
utlrp.sql執行完成之後我們需要再執行和資料庫升級相關的指令碼catupgrd.sql
這個指令碼呼叫catlog.sql和catproc.sql來重建字典物件等,執行完成該指令碼後,我們可以正常關閉資料庫後正常開啟資料庫。指令碼可能使部分物件失效,我們可以再次執行utlrp.sql指令碼進行編譯。編譯完成後為資料庫新增臨時檔案
alter database temp add tempfile size 200m autoextend on next 65536 maxsize 32767m;
至此,同位元組序的跨平臺遷移全部完成。

八、檔案系統與ASM的切換
在目標端進行正常匯入,匯入完成後,此時新匯入的檔案在檔案系統上,我們需要把檔案系統檔案轉移到ASM磁碟組上
select name from v$datafile;
檔案轉移可以透過RMAN進行,但首次嘗試遇到RMAN-20201錯誤,
rman target /
backup as copy datafile '/opt/oracle/trans.dbf' format '+DATADG';
這個錯誤是由於trans表空間剛剛匯入資料庫,處於只讀狀態,並未被catalog記錄感知,透過對檔案更改為讀寫狀態,可以消除此錯誤
alter tablespace trans read write;
select tablespace_name,status from dba_tablesapces where tablespace_name='';
rman>report schema
複製前需要把表空間置為只讀狀態
alter tablespace trans read only;
rman>backup as copy datafile  '/opt/oracle/trans.dbf' format '+DATADG';
執行switch操作需要將表空間離線,否則報錯
alter tablespace trans offline;
rman>switch datafile  '/opt/oracle/trans.dbf' to copy;
此時轉換後的表空間已經移動到ASM磁碟組中。
select * from v$datafiles;

九、dbms_file_transfer
從10g開始,oracle提供了dbms_file_transfer程式包,可以很方便的在本地資料庫和遠端資料庫,ASM和檔案系統間傳輸資料庫檔案
desc dbms_file_transfer

十、



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29337971/viewspace-1816637/,如需轉載,請註明出處,否則將追究法律責任。

相關文章