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来连接。