一、Oracle XE 数据库与连接工具安装使用

Oracle数据库历来以价格昂贵出名,当然贵有贵的道理,成为一个Oracle DBA也是令人羡慕的事情,如果程序员熟悉Oracle使用也有机会接触到大型的项目,但是Oracle似乎对一般程序员不怎么友好,因为其繁琐的安装配置过程和对系统硬件的苛求,另一般人望而止步,我最早从Oracle 9i开始接触它,深有感受,特别是熟悉了SqlServer的开发人员,初次接触Oracle还是很不习惯的。比如它没有SqlServer数据“库”的概念,一个sa账号管理很多数据库,在Oracle里面,它叫做“数据服务”,通过不同的数据库用户来区分数据。

1.1 数据库服务安装

现在,Oracle推出了一个免费的数据库产品,Database 快捷版 11g ,这个就像SqlServer Express版本一样,都是免费的,与收费版在功能没有任何区别,但是有些使用条件限制,比如仅支持一个CPU,数据文件组大小有限制等,但是一般中小企业的一些中小应用还是够了。Database 快捷版 11g下载地址请点击这里。不过下载之前要先注册Oracle账号,并同意下载许可声明。

适用于 Windows x64 的 Oracle Database 快捷版 11g 第 2 版

- 解压缩下载文件,然后运行 DISK1/setup.exe

适用于 Windows x32 的 Oracle Database 快捷版 11g 第 2 版

- 解压缩下载文件,然后运行 DISK1/setup.exe

适用于 Linux x64 的 Oracle Database 快捷版 11g 第 2 版 - 解压缩下载文件,可以像往常一样安装 RPM 文件

根据你的情况,选择下载32位的或者64位的,我下载了64位的,安装很简单,中途没有什么特别注意的地方,一路“下一步” 即可,这比起Oracle其他版本的数据库安装来说,实在很简单,安装完成后,即可使用了,不过千万记住不要忘记了Sys,System 用户的密码。安装完成之后,在桌面会有一个快捷方式:Oracle Database 11g Express Edition 入门 ,单击,进入Web的管理界面:

如果要查看其它界面,需要输入管理员密码,比如查看存储的界面:

如果要进行创建数据库用户,建表等操作,还得启动SQL plus 程序,不用做额外的配置,可以直接启动,这相比收费版,又简单了不少:

具体创建用户,创建表的工作,可以使用Oracle的SQL语句来做,但我们这里通过另外一个工具来做,还是在之前的Oracle XE 下载页面:

到这里下载一个最新版本的Oracle VS插件,有好几个版本,下载最上面的就好了,不过下载一样需要Oracle用户账号。

1.2 Oracle VS插件安装使用

安装这个插件的时候,注意安装提示,首先管理员账号Sys和密码,然后是要连接的Oracle服务名,输入相关的服务名,这里默认是 XE,然后保存为一个TNS名字,我用的是mydb,最后还有一个ODP.Net的安装,询问是否安装程序集到GAC,这里选择安装。

安装好后,在VS的“服务器资源管理器”--》“数据连接”,新建一个连接:

在图例中,我们选择以SysDba的角色进行登录,之后,就可以创建用户,查询表和编辑数据了,很方便,这里我建立了一个名字为SOD的用户,然后用这个用户登录:

功能很多,具体内容留给大家去研究了。不过从这里添加的用户不太方便设置成DBA角色,还是用命令行来设置。

至此,Oracle XE 的数据服务和开发工具插件,基本上安装好了。

1.3 PDF.NET集成开发工具连接Oracle

不过,我们也可以使用SOD框架的集成开发工具来连接,该工具连接过程如下:

最后点击确定,回到下面的界面,展开XE数据库,选择数据表,右键菜单查询数据:

至此,Oracle 的安装,连接过程就完成了,很简单。

二、SOD框架的Oracle CodeFirst支持

SOD框架是PDF.NET开发框架的数据框架,目前已经支持了SqlServer,SqlServerCe,Access,MySQL,PostgreSQL等主流数据库的Code First,但  PDF.NET_SOD Ver 5.2.1.0307  还未实现Oracle的Code First支持,主要原因是我对 Oracle 目前使用较少,如果不是SOD会员用户的强烈要求,可能SOD对Oracle Code First支持还要往后推延一段时间。

2.1 Oracle自增列处理

实际上SOD框架对Oracle Code First的支持并不复杂,主要需要解决的问题就是Oracle数据库自增字段的处理,大部分情况下,这都是通过触发器来实现的。

改写下 EntityCommand 类的创建表的方法,添加Oracle的处理:

public string CreateTableCommand

{

get {

if (_createTableCommand == null)

{

string script = @"

CREATE TABLE @TABLENAME(

@FIELDS

)

";

if (this.currDb.CurrentDBMSType == PWMIS.Common.DBMSType.PostgreSQL && !string.IsNullOrEmpty(currEntity.IdentityName))

{

string seq =

"CREATE SEQUENCE " + currEntity.TableName + "_" + currEntity.IdentityName + "_" + "seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1;";

script = seq + script;

}

else if (this.currDb.CurrentDBMSType == PWMIS.Common.DBMSType.Oracle && !string.IsNullOrEmpty(currEntity.IdentityName))

{

// --; 语句分割符号

string seqTemp = @"

CREATE SEQUENCE @TableName_@IDName_SEQ MINVALUE 1 NOMAXVALUE INCREMENT BY 1 START WITH 1 NOCACHE

;--

CREATE OR REPLACE TRIGGER @TableName_INS_TRG BEFORE

INSERT ON [@TableName] FOR EACH ROW WHEN(new.[@IDName] IS NULL)

BEGIN

SELECT @TableName_@IDName_SEQ.NEXTVAL INTO :new.[@IDName] FROM DUAL;

END;

;--

";

script = script + ";--\r\n" + seqTemp.Replace("@TableName", currEntity.TableName).Replace("@IDName", currEntity.IdentityName);

}

var entityFields = EntityFieldsCache.Item(this.currEntity.GetType());

string fieldsText = "";

foreach (string field in this.currEntity.PropertyNames)

{

string columnScript =entityFields.CreateTableColumnScript(this.currDb as AdoHelper, this.currEntity, field);

fieldsText = fieldsText + "," + columnScript+"\r\n";

}

string tableName =this.currDb.GetPreparedSQL("["+ currTableName+"]");

_createTableCommand = script.Replace("@TABLENAME", tableName).Replace("@FIELDS", fieldsText.Substring(1));

}

return _createTableCommand;

}

}

2.2 SOD Oracle Code First实现过程

由于Oracle 数据库的字段类型名称,对应DbType的名字并不完全相符,所以需要对AdoHelper类的Oracle实现类稍加修改:

public class Oracle : AdoHelper

{

//其它略

public override string GetNativeDbTypeName(IDataParameter para)

{

OracleParameter oraPara = (OracleParameter)para;

OracleType oraType = oraPara.OracleType;

if (oraType == OracleType.DateTime)

return "Date";

else if (oraType == OracleType.Int32)

return "INT";

else

return oraType.ToString();

}

}

能够根据实体类,得到生成表的建表脚本,任务已经完成了一半,不过SOD提供了一个DbContext类的封装,可以自动完成这个过程,下面就来实现一个Oracle的DbContext:

namespace PWMIS.Core.Extensions

{

public abstract class OracleDbContext :DbContext

{

///

/// 用连接字符串名字初始化本类

///

///

public OracleDbContext(string connName)

: base(connName)

{

}

///

/// 检查实体类对应的数据表是否在数据库中存在

///

protected override void CheckTableExists()

{

//创建表

if (CurrentDataBase.CurrentDBMSType == PWMIS.Common.DBMSType.Oracle)

{

var entity = new T();

var dsScheme = CurrentDataBase.GetSchema("Tables", null);

string owner = CurrentDataBase.ConnectionUserID;

var rows = dsScheme.Select("OWNER='"+ owner +"' and table_name='" + entity.GetTableName() + "'");

if (rows.Length == 0)

{

EntityCommand ecmd = new EntityCommand(entity, CurrentDataBase);

string sql = ecmd.CreateTableCommand;

//OracleClient 不能批量执行多条SQL语句

string[] sqlArr = sql.Split(new string[] {";--" }, StringSplitOptions.RemoveEmptyEntries);

foreach (string item in sqlArr)

{

if(item.Length >10) //去除回车行

CurrentDataBase.ExecuteNonQuery(item);

}

}

}

}

}

}

将SOD框架源码的 SampleORMTest 测试项目的SqlServerDbContext 改成OracleDbContext的:

namespace SampleORMTest

{

///

/// 用来测试的本地SqlServer 数据库上下文类

///

public class LocalDbContext : OracleDbContext // SqlServerDbContext

{

public LocalDbContext()

: base("local")

{

//local 是连接字符串名字

}

#region 父类抽象方法的实现

protected override bool CheckAllTableExists()

{

//创建用户表

CheckTableExists();

return true;

}

#endregion

}

}

只需要在OracleDbContext 实现类的CheckAllTableExists 方法内,实现各个实体类的表创建工作即可,比如本例创建用户表。

修改下App.config 文件的连接配置:

三、使用ODP.Net 访问Oracle数据库

3.1 创建SOD的ODP.Net扩展程序集

在本文中,已经说到安装了Oracle 的.net数据访问组件ODP.Net,MS也建议用这个组件来代替MS自己的Oracle.Client,下面,我们只需要新建立一个项目,引用下ODP.Net组件即可:

把SOD框架的核心程序集PWMIS.Core 的Oracle.cs 文件拷贝下来,只需要修改下命名空间即可使用。

编译这个项目,让SampleORMTest 测试项目引用它,或者直接拷贝DLL到测试项目,

3.2 运行32位的ODP.Net

重新修改下App.config文件的连接配置:

providerName="PWMIS.DataProvider.Data.OracleDataAccess.Oracle,PWMIS.OracleClient" />

运行项目,首先抛出下面这样一个异常:

其他信息: 未能加载文件或程序集“Oracle.DataAccess, Version=2.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或它的某一个依赖项。试图加载格式不正确的程序。

第一反应,应该是32位于6位程序不兼容的问题,仔细回想下,这可能是 Oracle VS插件安装时候安装到GAC里面的程序集。于是将测试程序修改成32位的(编译目标为x86),运行良久,再次报错,说TNS无法解析。

奇怪,使用MS Oracle Client都没有问题,为何用了ODP.Net缺不行了呢?百度了下,但觉得别人说的跟我当前不太一样。

检查Oracle的VS插件程序的安装目录,在 E:\app\client\dth\product\12.1.0\client_1\Network\Admin 目录中发现TSN配置文件 tnsnames.ora ,打开,原来是这样的内容:

mydb =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = XE)

)

)

分析内容,这应该是安装VS插件的时候,配置生成的。 那么原来的XE服务的监听名字是怎么来的? 在搜索下Oracle服务的安装目录,在 E:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN  下面找到了 tnsnames.ora 文件,打开:

XE =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = dth-home)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = XE)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)

ORACLR_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

)

(CONNECT_DATA =

(SID = CLRExtProc)

(PRESENTATION = RO)

)

)

原来默认的Oracle XE 监听服务名是这样定义的。

重新配置连接,将服务名从XE更改为mydb,顺利通过。

providerName="PWMIS.DataProvider.Data.OracleDataAccess.Oracle,PWMIS.OracleClient" />

如果不配置mydb这个TNS名字,可否直接使用呢?答案是可以,只需要将连接字符串做如下修改即可:

providerName="PWMIS.DataProvider.Data.OracleDataAccess.Oracle,PWMIS.OracleClient" />

测试运行,成功,可惜目前为止,还是基于32位的ODP.Net做的测试。

3.3 64位ODP.Net 使用

回忆之前安装XE数据库服务,确认当时安装的是64位的数据库,那么去它的安装目录,看看有没有ODP,一看,果然有:

E:\oraclexe\app\oracle\product\11.2.0\server\odp.net\bin\2.x

这里的 Oracle.DataAccess.dll 是64位的。

将它拷贝到SOD框架下面,再运行,终于看到了成功界面:

四、免安装Oracle客户端,使用ODP.Net

前面使用ODP.Net的过程,都是在本地机器安装了Oracle XE数据库和Oracle VS 开发插件的情况下进行的,但是,如果把访问Oracle的程序部署到一台没有装过Oracle程序的机器上,程序是无法使用的,这还得做下Oracle 环境的部署,过程如下:

4.1,下载ODAC

打开下面的链接:

http://www.oracle.com/technetwork/topics/dotnet/downloads/index-2235287.html?ssSourceSiteId=otncn

Oracle Data Access Components (12.1.0.1.0) Beta 2 - Oracle Universal Installer            [Released September 23, 2014]

Download 32-bit ODAC

ODAC121010Beta2_32bit.zip 291 MB (305,236,226 bytes)

Download 64-bit ODAC

ODAC121010Beta2_64bit.zip 282 MB (296,156,450 bytes)

OUI Install and Configuration Instructions

Oracle Data Access Components (12.1.0.1.0) Beta 2 - Xcopy           [Released September 23, 2014]

Download 32-bit ODAC

ODAC121010Beta2_32bitXcopy.zip 61.6 MB (64,608,758 bytes)

Download 64-bit ODAC

ODAC121010Beta2_64bitXcopy.zip 65.8 MB (69,024,274 bytes)

ODP.NET, Managed Driver

ODP.NETManaged12010Beta2_Xcopy.zip 2.41 MB (2,532,077 bytes)

这里提供了2种下载安装方式,前一种,Oracle Universal Installer  安装包比较大,略过,我们选择第二种,XCopy方式来部署。

根据你的需要,下载32位或者 64位的ODAC,并且下载 ODP.Net ,Managed Driver.

4.2,安装ODAC

比如我下载的是 64位的ODAC,以管理员权限启动命令行,

第一步,输入下面的命令:

install.bat all c:\oracle odac

这里表示将Oracle客户端程序复制到 c:\oracle 目录下面

第二步,安装ODP.Net,输入下面的命令:

install_odpm.bat c:\oracle x64 true

注意:c:\oracle 目录是第一步命令里面指定的路径。

第三步,关键,在系统环境变量里面,Path变量里面,包含Oracle程序的路径:

c:\oracle;c:\oracle\bin;

这样设置以后,本文的Oracle访问程序,就可以正常运行了。

五、获取Oracle SOD Code First支持

当前程序的全部代码已经签入SOD框架的开源项目,地址 http://pwmis.codeplex.com ,你在源码栏目可以查看到当前最新的更改,如果你有codeplex账号,可以直接连接TFS下载,如果没有,可以用SVN下载,独立下载包,

如果你们有Oracle服务器,但不再本地机器,可能需要单独下载ODP并安装, 64位程序下载地址:http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html

SOD框架开发团队一直致力于广大程序员的CRUD解放工作,打造最轻,最方便而又灵活的数据开发框架,感谢你的支持!

oracle的免费 mysql数据库服务器地址_Oracle 免费的数据库相关推荐

  1. 如何配置系统数据库服务器地址,如何配置系统数据库服务器地址

    如何配置系统数据库服务器地址 内容精选 换一换 华为云提供两种连接方式通过SQL Server客户端连接实例:非SSL连接和SSL连接.其中,SSL连接实现了数据加密功能,具有更高的安全性.安装SQL ...

  2. 免费 mysql数据库服务器地址_免费的云mysql数据库服务器地址

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. MySQL服务器地址为空,win10 mysql没有服务器地址

    win10 mysql没有服务器地址 内容精选 换一换 遇到该问题,参考以下步骤排查解决.如果在,执行2.如果不在,需要重新创建弹性云服务器实例,使之和GaussDB(for MySQL)实例在同一个 ...

  4. db2如何查看服务器信息,如何查看db2数据库服务器地址

    如何查看db2数据库服务器地址 内容精选 换一换 如果采用镜像站RPM安装方式安装,则需要额外做以下操作步骤避免启动和登录数据库失败:下载压缩包rpm-bug.zip并上传到服务器/home目录下.解 ...

  5. 免费的NNTP服务器地址大全

    免费的NNTP服务器地址大全 129.69.1.59 -- 9131 groups 134.99.128.5 -- 15 groups: hhu.* 162.114.4.20 -- 226 group ...

  6. 数据库服务器审计系统部署方式,数据库审计系统D2020,agent方式审计如何配置...

    客户端(101.1.12.2): 用于访问数据库审计系统管理界面,进行数据库审计系统的相关配置. 数据库审计系统: 管理口IP(183.1.10.52):被访问的,实现数据库审计系统的管理. 业务口I ...

  7. 阿里云mysql创建数据库服务器地址_阿里云服务器创建数据库操作流程

    阿里云服务器创建数据库操作流程,如何上传数据库阿里云. 在阿里云ecs云服务器上部署数据库后,在平常的操作中可能会遇到些问题,可以先做个大致的了解: 如果您想看更多的在ecs上的数据库的相关操作,请前 ...

  8. mysql显示服务器地址,怎样查看mysql服务器所在地址

    怎样查看mysql服务器所在地址 内容精选 换一换 在弹性云服务器上安装完成后输入公网IP,无法连接目的虚拟机,端口无法访问工具.源端网络未连通目的端.目的端安全组未开放8084端口.目的端网络ACL ...

  9. mysql显示服务器地址,查看mysql服务器地址

    查看mysql服务器地址 内容精选 换一换 GaussDB(for MySQL)全兼容MySQL协议,因此,连接GaussDB(for MySQL) 实例有普通连接和SSL连接.其中,SSL连接实现了 ...

最新文章

  1. TF (transform) in ROS
  2. 目标检测- YOLO v1--You Only Look Once
  3. 题目1008:最短路径问题
  4. MacOS系统下的图形化工具
  5. 子集—leetcode78
  6. liferay spring mvc 案例地址
  7. java 多线程统计质数,Java 七 多线程计算某个范围内的质数
  8. git使用stash存储相关操作
  9. Mac安装tree命令
  10. Python 将 QQ 聊天记录生成词云(分手了如何欢度情人节?)
  11. linux下调试paddlelite源码,Lite v2.7 v2.8 端侧部署 Ubuntu编译失败
  12. List集合排序Collections.sort()方法的一个容易忽略的小问题
  13. Exp7 网络欺诈防范 ————20164316张子遥
  14. 小秘谈币:谈谈炒币的几点感悟
  15. 气化器中BOG和EAG分别是什么意思?
  16. 后端开发如何快速转前端开发
  17. 指定Jboss的JDK
  18. 【打开方式问题解决】该文件没有与之关联的应用来执行该操作。请安装应用,若已经安装应用,请在“默认应用设置“页面中创建关联。
  19. Scratch简单10以内加法游戏
  20. 假设你是个妹子,你敢这样谈恋爱吗?

热门文章

  1. Android 12 NFC快捷方式在快捷栏里面消失了
  2. 慧通教育——python进阶习题第一关(二)
  3. 【计算机网络 (谢希仁) 习题题解】第4章 网络层 (2)——划分子网;CIDR
  4. Lifecycle的原理
  5. pygame clock.tick
  6. diff算法中的概念
  7. 关于pdf.js在IE浏览器二次刷新的报错,我有话说
  8. 下拉刷新和上拉加载 php,基于iscroll.js实现下拉刷新和上拉加载效果
  9. 电子产品EMC电磁兼容风险评估读书笔记(一)
  10. Mac OS下安装Vue完整步骤