前提說明最近,應(yīng)客戶要求,需要將平臺遷往另一個地方進行統(tǒng)一管理。原平臺用的是oracle11g,新平臺是oracle12c。由于公司人手不夠,這個任務(wù)就由我這個菜鳥頂上。遷移過程中,遇到的困難大多數(shù)與oracle數(shù)據(jù)庫有關(guān),這次呢就是想記錄一下遷移過程中遇到的一些坑。 一、備份數(shù)據(jù)時遇到的問題遷移前,客戶通知去備份數(shù)據(jù),因為老平臺不再投入使用,幾天后就關(guān)閉訪問了。我接到通知后高興的跟領(lǐng)導(dǎo)打了個招呼跑路了(因為可以快樂的摸魚了),前往客戶機房導(dǎo)數(shù)據(jù)(服務(wù)器機房是真的冷,當時6月份的天,我在里面凍得受不了)。 1.plsql導(dǎo)出窗口一閃而過導(dǎo)數(shù)據(jù)一上來就給了我一個下馬威。客戶是給了一臺win10界面的服務(wù)器作為跳板機,上面裝了oracle11g的客戶端和plsql。我剛開始用plsql導(dǎo)數(shù)據(jù),但是導(dǎo)出的黑窗口一閃而過,百度以后,網(wǎng)上有很多博文給出了解決方法,我呢在這里記錄一下。 方案一:配置環(huán)境變量(網(wǎng)上給的最多的解決方案) 1.安裝的本地oracle客戶端地址,一般都是app為最層文件夾 ORACLE_HOME:C:\app\MYSERVER\product\12.2.0\dbhome_1 2.配置sid ORACLE_SID:ORCL 方案二:檢查plsql配置(我自己出現(xiàn)的問題,粗心導(dǎo)致的) 這個文件一般在ORACLE_HOME/bin/exp.exe 2.使用exp命令行導(dǎo)出數(shù)據(jù)報錯:EXP-00091: Exporting questionable statistics.plsql導(dǎo)出失敗后,我就使用命令行導(dǎo)出。 2.1使用exp命令導(dǎo)出數(shù)據(jù)1.登錄oracle服務(wù)器,切換到oracle用戶 su -l oracle 2.編寫導(dǎo)出命令,格式如下 // 2.1整庫導(dǎo)出,包含系統(tǒng)表full=y exp 用戶名/密碼@SID file=文件名 full=y 例如:使用系統(tǒng)用戶system導(dǎo)出整個庫 exp system/system@orcl file=\opt\mydb.dmp full=y // 2.2導(dǎo)出某個(些)用戶下的所有表 exp 用戶名/密碼@SID file=文件名 owner=(用戶名) 例如:導(dǎo)出zhangsan用戶下的所有表 exp system/system@orcl file=\opt\mydb.dmp owner=zhangsan 例如:導(dǎo)出zhangsan、lisi兩個用戶下的所有表 exp system/system@orcl file=\opt\mydb.dmp owner=(zhangsan,lisi) // 2.3導(dǎo)出指定的表 exp 用戶名/密碼@SID file=文件名 tables=(用戶名) 例如:導(dǎo)出teacher、student兩張表 exp system/system@orcl file=\opt\mydb.dmp owner=(teacher,student) 2.2報錯EXP-00091: Exporting questionable statistics.這個我剛開始以為僅僅只是警告,導(dǎo)完數(shù)據(jù)我就回公司了,后來在把數(shù)據(jù)導(dǎo)入新庫時就出問題了,當然不僅僅是這一個問題導(dǎo)致的。這個問題是我同事幫我解決的,我網(wǎng)上查閱了資料,大多步驟如下:
select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET';
1.切換到oracle用戶 su -l oracle 2.設(shè)置變量 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 3.查看是否設(shè)置成功 echo $NLS_LANG 2.3oracle11g不會導(dǎo)出空表一定要注意, 二、導(dǎo)入數(shù)據(jù)時遇到的問題1.目標數(shù)據(jù)庫與源數(shù)據(jù)庫字符編碼不一致在將備份完的數(shù)據(jù)導(dǎo)入庫時,控制臺報錯: IMP-00019: row rejected due to ORACLE error 12899 IMP-00003: ORACLE error 12899 encountered ORA-12899: value too large for column .... 百度之后,是由于源數(shù)據(jù)的字符編碼ZHS16GBK與目標數(shù)據(jù)庫的字符編碼AL32UTF8不一致導(dǎo)致的,網(wǎng)上給出的解決方案是修改目標數(shù)據(jù)庫的字符編碼為ZHS16GBK。但是目標數(shù)據(jù)庫是客戶方委托第三方統(tǒng)一管理,不可能修改。最后與同事討論,同事給出建議嘗試修改測試庫(為了方便,我在公司測試服務(wù)器上搭建了一個oracle11g的測試庫,字符集是AL32UTF8)的字符集為ZHS16GBK,然后將數(shù)據(jù)導(dǎo)入測試庫,再將測試庫字符集修改為同目標庫一致的編碼AL32UTF8,再將文件導(dǎo)出。 具體修改數(shù)據(jù)庫字符集的指令如下: 1.切換oracle用戶 su -l oracle; 2.連接數(shù)據(jù)庫 sqlplus / as sysdba; 3.關(guān)閉數(shù)據(jù)庫 shutdown immediate; 4.掛載數(shù)據(jù)庫 startup mount; 5.使用數(shù)據(jù)庫追蹤 alter session set sql_trace=true; 6.開啟限制會話模式 alter system enable restricted session; alter system set job_queue_processes=0; alter system set aq_tm_processes=0; 7.打開數(shù)據(jù)庫 alter database open; 8.修改編碼(這個根據(jù)個人實際情況來,我涉及到到兩個編碼,AL32UTF8和ZHS16GBK) alter database character set internal_use zhs16gbk; 9.關(guān)閉數(shù)據(jù)庫 shutdown immediate; 10.重啟數(shù)據(jù)庫 startup; 11.查看數(shù)據(jù)庫編碼是否修改成功 select * from nls_database_parameters where parameter ='NLS_CHARACTERSET' 2.IMP-00003: 遇到 ORACLE 錯誤 942使用plsql導(dǎo)入測試庫時報錯: IMP-00003: 遇到 ORACLE 錯誤 942 ORA-00942: 表或視圖不存在 產(chǎn)生這個問題原因有很多,我是因為測試庫裝的oracle11g,而plsql工具所在的那臺win10系統(tǒng)服務(wù)器裝的客戶端是oracle12c,版本不一致。 三、啟動服務(wù)遇到的問題1.啟動tomcat8.5報錯:Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC 3986具體報錯內(nèi)容: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 上網(wǎng)查了一下不錯原因,高版本tomcat是按照RFC 3986規(guī)范解析請求的,請求url中的字符必須包含在該規(guī)范中,如果url出現(xiàn)了該規(guī)范中沒有定義的字符就會報該錯誤,給出的解決方案如下:在tomcat的server.xml中添加 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" /> 2.apache代理經(jīng)常出現(xiàn)502的問題項目中使用apache做代理服務(wù)器,自己開發(fā)的服務(wù)沒有問題,但是兩個第三方產(chǎn)品,經(jīng)常會出現(xiàn)502的錯誤,有時是打開項目后,過一會頁面就502了,有時干脆項目都打不開,輸入訪問地址一直在加載就是進不去,最后報錯502。一番折騰后,發(fā)現(xiàn)需要在httpd.conf配置文件中,加入以下命令: // 我的是httpd2.4 ,格式如下,是沒有=號的,網(wǎng)上有些格式Keepalive=On Keepalive On 加入了該命令后,問題有所好轉(zhuǎn),但是兩個第三方服務(wù)始終有一個會502,兩者交替進行,甚至苦惱。最終,通過嘗試發(fā)現(xiàn),盡管兩個第三方服務(wù)部署在不同服務(wù)器上,但是兩者tomcat端口都8080,修改一個端口為8081后,就沒問題了,至于什么原因?qū)е碌奈乙矝]想明白。 總結(jié)整個遷移過程歷時三周,原本以為一個星期就差不多了。其中困難之處如下: |
|
來自: XSMforever > 《Oracle》