小女巫 发表于 2015-1-16 22:38:38

MYSQL网页设计ORACLE与SQL之间的数据迁徙

MySQL已经为支持所有最流行的Web2.0语言做好了准备,诸如Ruby、Ajax等,当然还有PHP。有的业界分析师说过,“每一个Web2.0公司实质上就是一个数据库公司。oracle|数据
初级数据迁徙

良多工夫,要在异构数据库之间举行数据迁徙或抽取,假如在SQL中提取ORACLE的数据,能够经由过程ODBC、OLEDB等多种体例,要从ORACLE提取SQL中的数据,多数是经由过程通明网关来完成的。

在异构数据抽取过程当中,最好接纳SQL92尺度的语法编写SQL代码,同时要注重分歧数据库之间数据范例的转换干系,如ORACLE的日期范例用DATE、SQL用Datetime等。



一关于ORACLE的通明网关设置

ORACLE安装时(9i),将TRANSPARENTGATEWAYFORMSSQL选中,在ORACLE主目次BIN中,有个tg4msql.exe程序,它是通明网关程序啦,同时在主目次中另有tgrmsql的一个目次,ORACLE_HOME        g4msqladmin目次中的inittg4msql.ora就是必要举行设置才干在ORACLE中毗连SQL。



.1tg4msql

1怎样设置通明网关呢?翻开inittg4msql.ora:

#

#HSinitparameters

#xzh代表SQL服务名,pubs代表要会见的SQL数据库

#

HS_FDS_CONNECT_INFO="SERVER=xzh;DATABASE=pubs"

HS_FDS_TRACE_LEVEL=OFF

HS_FDS_RECOVERY_ACCOUNT=RECOVER

HS_FDS_RECOVERY_PWD=RECOVER

2监听的设置oracle_home
etworkadminListiner.ora

LISTENER=

(DESCRIPTION_LIST=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=xzh)(PORT=1521))

)

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=xzh)(PORT=1527))

)

)

)

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(GLOBAL_DBNAME=xzh.world)

(ORACLE_HOME=D:oracleora92)

(SID_NAME=xzh)

)

(SID_DESC=

(GLOBAL_DBNAME=tg4msql)

(PROGRAM=tg4msql)

(SID_NAME=tg4msql)

(ORACLE_HOME=D:oracleora92)

)

)

加亮代码是要在监听文件中新加部分,GLOBAL_DBNAME、SID_NAME能够恣意,PROGRM必需指向tg4msql如.1所示。

3当地服务文件的设置oracle_home
etworkadminTnsNames.ora

XZH=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=xzh)(PORT=1521))

)

(CONNECT_DATA=

(SERVER=DEDICATED)

(SERVICE_NAME=xzh.world)

)

)



TG4MSQL=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=xzh)(PORT=1527))

)

(CONNECT_DATA=

(SID=tg4msql)

)

(HS=OK)

)

利用SQL的当地服务名为TG4MSQL,能够恣意写,SID必需是Listiner.ora中指定的谁人SID_NAME,PORT也必需是监听中指定的PORT,主机等都要切合分歧。到此为止,我们把通明网关大抵已设置好啦,假如要会见SQL,还要利用数据库链才便利。

4在SQL中创立登录帐号xzh口令xzh,利用能够会见PUBS数据库。

CREATEDATABASELINKsqlCONNECTTOxzhIDENTIFIEDBYxzh

USING‘TG4MSQL’

这里的USING‘TG4MSQL’是tnsnames.ora中设置好的当地服务名,sql是我们今后要援用的数据库链名。

SQL>SELECT*FROMsales@sql

假如无数据前往,暗示我们会见SQL数据库的通道已建成,请勇敢利用吧,但对远程异构数据库不充许举行DDL操纵。

SQL>CREATETABLEall_users@tg4msqlFRINall_users;

*

ERROR位于第1行:

ORA-02021:不同意对远程数据库举行DDL操纵



二SQL会见ORACLE的办法

1经由过程行集函数OPENDATASOURCE

OPENDATASOURCE(provider_name,init_string)

SELECT*

FROMOPENDATASOURCE(

MSDAORA,

DataSource=xzh.oracle;UserID=POS;Password=POS)..POS.A0325

MSDAORA是OLEDBFORORACLE的驱动,初始化字符串指定当地服务名、用户名、口令。然后援用表中数据时要以服务器..用户名.表名。注重必定是四部分构成,用户名与表名必定要年夜写。

SELECT*INTOPUBS.DBO.A0325FROM

OPENDATASOURCE(

MSDAORA,

DataSource=xzh.oracle;UserID=POS;Password=POS)..POS.A0325

--将ORACLE中POS形式的A0325导进SQL的PUBS数据库。

2经由过程SQL的链接服务器援用ORACLE的数据

--检察已存在的链接服务器

SELECT*FROMSYSSERVERS

--增加链接服务器到SQL

EXECSP_ADDLINKEDSERVER

@server=ORCL,--ORCL是SQL中链接服务器称号

@srvproduct=Oracle,        --Oracle流动的            

@provider=MSDAORA,--MSDAORA流动的

@datasrc=xzh.oracle--DataSrc当地服务名



EXECSP_DROPSERVER‘ORCL’--删除链接服务器



在这里声明一下,假如如今就会见ORACLE一定不克不及,由于没有供应登录ORACLE的用户名/口令

EXECSP_ADDLINKEDSRVLOGINORCL,false,sa,POS,POS

Sa是SQL当地登录帐号,POS/POS是ORACLE的登录帐号,但这句话对我们要到达的目标没有匡助。

SELECT*FROMORCL..POS.A0325

仍是四部分构成,注重事项同上,为何不可呢,自己一向在寻觅办理举措,最初发明经由过程SQL语句没法办理,只要翻开SQL的企业办理器。



.2设置ORACLE的远程帐号



.3设置远程登录帐号

SELECT*FROMORCL..POS.A0325--此次终究OK。

SELECT*FROMOPENQUERY(ORCL,SELECT*FROMPOS.A0325)

3利用SQL的OPENROWSET函数

SELECTa.*

FROMOPENROWSET(MSDAORA,

xzh.oracle;POS;POS,POS.A0325)ASaORDERBYa.ID



有些中央要用别号才干援用,请人人注重。



4利用ODBC的体例

SELECTA.*

FROMOPENROWSET(MSDASQL,ORCL_ODBC;POS;POS,

POS.A0325)ASA

ORDERBYA.ID



ORCL_ODBC是ORACLE的ODBC数据源,创立ODBC不必我说吧,以上一切代码在SQLQUERYANALYZE中经由过程。



三总结

关于SQL会见ORACLE有四种体例,个中经由过程ODBC与链接服务器的体例做起来难度较年夜,敌手老手会贫苦一些,利用OLEDBFORORACL驱动时,有OPENDATASOURCE与OPENROWSET函数可使用,都很便利,条记喜好利用后者,交代一下,在数据存取方面,这四种方面效力相称。


根据Evans的调查报告,“MySQL的使用在未来将继续呈成长趋势。”

再见西城 发表于 2015-1-17 17:25:34

可以动态传入参数,省却了动态SQL的拼写。

admin 发表于 2015-1-20 22:31:47

多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油

老尸 发表于 2015-1-30 07:21:24

也可谈一下你是怎么优化存储过程的?

简单生活 发表于 2015-2-6 08:07:16

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。

飘飘悠悠 发表于 2015-2-15 18:47:13

你可以简单地认为适合的就是好,不适合就是不好。

莫相离 发表于 2015-3-4 12:49:11

需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。

海妖 发表于 2015-3-11 19:40:39

所以你总能得到相应的升级版本,来满足你的需求。

透明 发表于 2015-3-19 10:19:38

你可以简单地认为适合的就是好,不适合就是不好。

爱飞 发表于 2015-3-27 19:11:10

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
页: [1]
查看完整版本: MYSQL网页设计ORACLE与SQL之间的数据迁徙