oracle資料庫轉換
1、首先打開SQL SERVER管理工具,然後選擇一個資料庫,單擊新查詢。
② 如何將oracle資料庫日期轉化為數字
首先第一種轉換方式是:將字元串類型的轉換成數字類型的,這中方法轉換直接用to_number()進行轉換,具體的語法為to_number(str)就可以了。
最後總結一下:這三種轉換無非就是to_char(),to_number(),to_date()之間的轉換,當我們在計算的時候,一定要通過轉換的方式轉換成同一種類型再進行計算。
③ 如何實現oracle資料庫中英文字元集轉換
如何更改Oracle字元集國內最常用的Oracle字元集ZHS16GBK(GBK 16-bit Simplified Chinese)能夠支持繁體中文,並且按照2個字元長度存儲一個漢字。UTF8字元集是多位元組存儲,1個漢字(簡體、繁體)有時採用3個字元長度存儲。Oracle支持字元集的更改,但是UTF8是Oracle中最大的字元集,也就是說UTF8是ZHS16GBK的嚴格超集。對於子集到超集的轉換,Oracle是允許的,但是對於超集到子集的轉換是不允許的。一般對於超集到子集的轉換,建議是通過dbca刪除原來的資料庫,重新再建庫,選擇正確的字元集,然後導入備份。我的方案是:先備份數據,然後強制轉換字元集從UTF8到ZHS16GBK,然後導入備份數據。如果不行,才來重新建庫,設置字元集ZHS16GBK,導入備份數據。如果這還不行,就把更改字元集從ZHS16GBK到UTF8(這是安全的),再導入備份數據,恢復到原始狀況。這樣就有可能避開重新建庫的麻煩。1. 備份資料庫中所有用戶的數據以oracle用戶登陸,執行以下命令# export NLS_LANG = 「SIMPLIFIED CHINESE_CHINA.UTF8」保持與資料庫伺服器端一致,這樣在exp導出時,就不會存在字元的轉換了,備份最原始的數據。2. 評估UTF8轉換成ZHS16GBK的風險轉換之前,要使用Oracle的csscan工具對資料庫掃描,評估字元集轉換前後,數據有可能的損壞情況。如果評估情況糟糕,那就絕對要放棄了。先安裝屬於 CSMIG 用戶的一套表和過程。以oracle用戶登陸UNIX,#sqlplus 「/ as sysdab」SQL>@$ORACLE_HOME/ rdbms/admin/csminst.sqlSQL>exit# $ORACLE_HOME\bin\csscan -help可以更清楚如何使用csscan。# $ORACLE_HOME/bin/csscan system/sunday user=mmsc FROMCHAR=UTF8 TOCHAR=ZHS16GBK ARRAY=102400 PROCESS=3 > csscan.log以上命令意思是掃描用戶:mmsc中的所有數據,從字元集UTF8更改為ZHS16GBK的轉換情況。然後得到三個文件:scan.txt、scan.out、scan.err。查看scan.out,scan.err,可以看出mmsc用戶下的所有的數據都是可以轉換的,並且沒有出現轉換「Exceptional」的情況,因此可以更放心一點。3. 更改資料庫的字元集為ZHS16GBK前面說過,通過命令「Alter Database Characeter Set XXXX」,實現從超集到子集的轉換,在Oracle是不允許的。但是該命令,提供這樣的命令方式:Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX這是Oracle的非公開命令。「在使用這個命令時,Oracle會跳過所有子集及超集的檢查,在任意字元集之間進行強制轉換,所以,使用這個命令時你必須十分小心,你必須清楚這一操作會帶來的風險」。以oracle用戶登陸UNIX,#sqlplus 「/ as sysdba」SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; SQL> ALTER SESSION SET SQL_TRACE=TRUE;SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL> ALTER DATABASE OPEN; SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; //如果不使用「INTERNAL_USE」參數,系統會提示出錯://ERROR at line 1://ORA-12712: new character set must be a superset of old character setSQL> ALTER SESSION SET SQL_TRACE=FALSE;SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;此時,檢查一下資料庫的字元集是否更改過來SQL> select value$ from props$ where name=』NLS_CHARACTERSET』;VALUE$-----------------ZHS16GBK緊接著檢查一下資料庫中簡體中文、繁體中文是否正常,不會出現亂碼。SQL>select spid,spname,spshortname from spinfovisual_hk …...非常不幸,我看到了一堆亂碼,這也證明了Oracle不支持字元集從超集到子集的更改,當時心裡很緊張,很怕失敗,從而恢復到原樣。但是根據以前的驗證,把UTF8下的備份導入到ZHS16GBK中去,是OK的,所以繼續嘗試。4. 導入備份的用戶數據還是以oracle用戶登陸UNIX, 先刪除庫中的用戶mmsc:#sqlplus 「/ as sysdba」SQL>drop user mmsc cascade;SQL>exit再運行createuser.sql,生成mmsc用戶。然後使用原來的備份文件,導入到mmsc用戶中:注意:先設置NLS_LANG要與當前資料庫的一致:ZHS16GBK。這樣,導出時用戶會話的NLS_LANG為UTF8,與原先的資料庫字元集一致;現在為ZHS16GBK,與此時的資料庫字元集一致。這樣,導入時,就會進行字元轉換。# export NLS_LANG = 「SIMPLIFIED CHINESE_CHINA.ZHS16GBK」#imp mmsc/mmsc@mdspdb file=DSMPD113_user_mmsc.dmp ignore=y fromuser=mmsc touser=mmsc馬上查看資料庫中簡體、繁體中文,哈哈,沒有亂碼了,一切顯示正常。緊接著進行驗證,也證明了:1個漢字此時只佔用2個字元長度。問題解決了!
④ oracle資料庫切換問題
你這個屬於主、備機切換
1.察看主庫狀態
selectswitchover_statusfromv$database;
收集主庫上的臨時表空間的情況,原因是備庫激活後臨時文件可能丟失,需要手工建上去:
colfile_nameformata40
selectfile_name,tablespace_name,bytes/1024/1024fromdba_temp_files;
FILE_NAMETABLESPACE_NAMEBYTES/1024/1024
---------------------------------------------------------------------------
/data/oradata/alihr/temp01.dbfTEMP2048
2.切換主庫到standby
;
或:
;
shutdownimmediate;
startupnomount;
;
3.驗證要被切換的standby是否接收到switchto通知
SELECTSWITCHOVER_STATUSFROMV$DATABASE;
以前的狀態就是SESSIONSACTIVE,現在就變為TOPRIMARY
4.切換物理standby到主用模式,檢查redolog是否創建好
;
shutdownimmediate;
startup;
5.standby資料庫切換成主庫後,檢查是否需要、對臨時表空間增加臨時文件:
先檢查臨時文件是否丟失:
colfile_nameformata60
selectfile_name,tablespace_namefromdba_temp_files;
把結果前面原主庫上的臨時文件進行對比,如有丟失則使用如下命令增加:
'/data/oradata/alihr/temp02.dbf'size2048Mreuse;
正常情況下,如果db_file_name_convert參數設置正確的話,11g會自動建立tempfile
6.在新的standby機器上
altersystemsetlog_archive_dest_state_2='defer';
;
7.檢查主備庫中fal參數
fal_server服務名是在standby機器的tnsnames中,指向主庫,fal_client是在主庫上的tnsnames中,指向standby。
fal參數只在standby機器上生效,所以在standby機器上fal_server指向主庫,fal_client機器指向備庫.
而主庫上的fal參數雖然不生效,但為了避免主庫切換成standby時,我們還要修改fal參數,所以現在就設置好,
讓fal_server指向現在的standby資料庫,fal_client指向自己。
8.在新的主庫
altersystemsetlog_archive_dest_state_2='enable';
altersystemarchivelogcurrent;
然後到備庫上檢查備庫機器上日誌是否正常的傳過來了。
9.檢查和調整主備庫兩台機器中的crontab中的資料庫備份腳本和刪除歸檔腳本。
=================oracle11g的最大保護和最大可用模式下的切換==================
如果主庫是意外宕機的,則直接把備庫切換成主庫:
;
;
shutdownimmediate;
connect/assysdba;
startupmount;
;
shutdownimmediate;
connect/assysdba;
startupmount;
;
alterdatabaseopen;
注意:上面操作中是手工的把資料庫重新置成MAXIMIZEAVAILABILITY,否則資料庫起來後是最大性能模式。
檢查資料庫的角色:
selectdatabase_rolefromv$database;
原有主庫啟動後,如果不是硬碟壞,主庫上的數據還存在,則把主庫轉換成standby就可以了:
主庫上:
startupmount;
recoverautomaticdatabase;
;
shutdownimmediate;
注意千萬不要把主庫打開了,否則會導致主庫的SCN發生變化,無法轉換成standby資料庫了。
在把原先的主庫轉化為standby時,有時可能報如下錯誤:
SQL>;
*
ERRORatline1:
ORA-00283:
ORA-19909:
ORA-01110:datafile1:'/opt/oracle/oradata/oratest/system01.dbf'
這里把到rman中:
listincarnationofdatabase;
resetdatabasetoincarnation1;
recoverdatabase;
resetdatabasetoincarnation2;
=========================================================
failover在物理standby的切換
1.檢查standby看是否使用了standbylog
2.有standbylog,執行下面的命令
;
;
2.1沒有standbylog則不執行上面的
SKIPSTANDBYLOGFILE;
3.切換
;
3.1如果上面3步驟失敗,則
;
4.重啟db
shutdownimmediate
startup
switchover的方法:
主庫和物理standby的切換
1.察看主庫狀態
SELECTSWITCHOVER_STATUSFROMV$DATABASE;
2.切換
;
3.原主庫
shutdownimmediate;
startupnomount
;
4.驗證要被切換的standby是否接收到switchto通知
SELECTSWITCHOVER_STATUSFROMV$DATABASE;
增加onlineredo日誌
5.切換物理standby到主
;
shutdownimmediate;
startup;
6.在新的standby機器(也就是老的主庫)
;
7.在新的主庫
altersystemarchivelogcurrent;========activestandbydatabase===========
當:
;
原來的主庫只能通過閃回轉化成standbydatabase,但要求資料庫的flashback打開。
在新主庫上:
selectto_char(standby_became_primary_scn)fromv$database;
在舊主庫上:
SHUTDOWNIMMEDIATE;
STARTUPMOUNT;
FLASHBACKDATABASETOSCNstandby_became_primary_scn;
;
selectmax(sequence#)fromv$log_historywhereRESETLOGS_TIME=(selectmax(RESETLOGS_TIME)fromv$log_history);實例恢復:
;
=================lgwr設置====================================
altersystemsetlog_archive_dest_3='location=/disk3/arch/bopschareopen=2MAX_FAILURE=3';
altersystemsetlog_archive_dest_state_3=alternate;
altersystemsetlog_archive_dest_1='location=/disk2/arch/bopschaalternate=log_archive_dest_3reopen=60MAX_FAILURE=5';
*.log_archive_dest_2='SERVICE=DTMRTLGWRASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=DTMRT';
('/oracle/u02/ORA10GDG/STANDBYRD01.LOG')size200M;
selectgroup#,thread#,sequence#,archived,statusfromv$standby_log;
{availability|performance|protection};
selectprotection_modefromv$database;
ORA-19527:
LOG_FILE_NAME_CONVERT='/u02/oracle/oradata/oract/','/u02/oracle/oradata/oract/'
altersystemsetlog_archive_dest_2='SERVICE=bopsteststblgwrsyncaffirm';
selectfrequency,rationfromv$redo_dest_resp_histogramwheredest_id=2andfrequency>1;SQL>;
SQL>ALTERDATABASEOPEN;
SQL>T;;
;
T;
;
finishapply;
;
舊主庫轉換成standby的步驟:
在新主庫上:
selectto_char(standby_became_primary_scn)fromv$database;
在舊主庫上:
SHUTDOWNIMMEDIATE;
STARTUPMOUNT;
FLASHBACKDATABASETOSCNstandby_became_primary_scn;
;
WITHSESSIONSHUTDOWN;
FORCE;
⑤ 可以吧oracle資料庫轉換成mysql嘛
技術上可以實現,需要處理兩個資料庫之間的差異,比如表結構定義的語法和類型,如果是項目中使用,還需要修改連接的驅動類和url。
⑥ 如何將oracle資料庫中某表中的欄位yyyymmdd轉換成yyyy-mm-dd
SELECT to_char(to_date('20160101 ','yyyymmdd'),'yyyy-mm-dd') from al
其中
①to_date('20160101 ','yyyymmdd')先把20160101轉為日期類型
②to_char把日期類型的to_date('20160101 ','yyyymmdd')又轉為char類型,而且格式為yyyy-mm-dd
⑦ Oracle資料庫行列轉換
舉個例子給你:
SELECT id,
MAX(decode(cn, 'c1', cv, NULL)) AS c1,
MAX(decode(cn, 'c2', cv, NULL)) AS c2,
MAX(decode(cn, 'c3', cv, NULL)) AS c3
FROM t_row_col
GROUP BY id
ORDER BY 1;
MAX聚集函數也可以用sum、min、avg等其他聚集函數替代。
看有沒有啟發
⑧ oracle資料庫類型轉換問題
正常來說,有數據的欄位不能修改。
可以先加一個欄位,把值復制過去,再清空原欄位的值,修改類型,再把值復制回來。
⑨ 什麼方法將oracle資料庫轉化為sql資料庫
步驟如下:
打開Sqlserver,如圖選中目標資料庫,右鍵->任務->導入數據
⑩ oracle 資料庫code 拼接欄位如何轉換成文字
有多種解決辦法。
一、使用「||」連接。二、使用CONCAT()函數連接。
在使用這個函數時,當拼接的值不是字元串時,oracle會自動轉換成字元串。需要注意的時,此函數裡面只支持兩個參數,不支持超過兩個的參數,否則會報:參數個數無效。當需要多個參數進行拼接時,可以使用多個concat()函數進行嵌套。
注意:mysql中不能使用||來連接字元串,只能用concat來連接。