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的使用在未来将继续呈成长趋势。” 可以动态传入参数,省却了动态SQL的拼写。 多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油 也可谈一下你是怎么优化存储过程的? 个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。 你可以简单地认为适合的就是好,不适合就是不好。 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。 所以你总能得到相应的升级版本,来满足你的需求。 你可以简单地认为适合的就是好,不适合就是不好。 数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
页:
[1]