说来也巧,参加了oracle杭州群,正好赶上有这种线下的活动,又是我一直向往的关于dba活动。于是就参加了。当然,没有白来,见到了很多和我一样,带着对dba高手敬仰之情而来的朋友们,也如愿以偿的见到了很多牛人,包括:冯大辉、d.b.c.a(楼方鑫)、alan Lee等人。在活动中,大家分享了自己成为dba的经验,以及如何成为一个好的dba。其中大家聊的最多的就是要认认真真的看两年书,就是oracle的基础知识。万丈高楼平地起,千里之行始于足下,大家都再三强调了基础的重要性。
回来以后,我一直在想,我适合做dba吗,能不能踏踏实实的学习两年基础知识,迈入dba这个领域呢?我也一直在思索,一方面是感觉自己是虽然在技术上没有短板,但也没有一个是特别擅长的,所谓的一专多能没有达到;另一方面,在数据和手机这两块领域,我都认为是很有前途的,我都想去做,但是我真的有这么多的精力吗,不专攻一个,我肯定做不到最好,也许该逼一下自己,去创造背水一战的场景。曲则全,枉则直,洼则盈,敝则新,少则多,多则惑。每次想到这里,我就有种被这世上所谓的知识给耍了的感觉。人生就这么短的时光,却有这么多的欲望要去实现,真是以有涯随无涯,殆已!随的是什么,是少的时候想多一些,多了呢,就迷惑了,这就是人的欲望。话讲了这么多,感觉自己跟个超人(超凡脱俗的人)似的,其实,我也还在三界内五行中。只是看不清:一方面,数据,肯定是越来越多,多了就会产生价值,就需要dba去管理和挖掘,这就是dba的职责;另一方面,智能手机迅速普及,我预测,智能手机的数量一定会超过PC机的数量,将来会有越来越多的手机上的应用和功能等需要去开发,也有很多事情可以做。我究竟往哪个方面走呢?二个选择我都迷惑了,这要是多了还得了?
Archive for category 数据库
学习oracle要看的几本书
五 4
几本核心的,concept,administrator guide,以及 unix administrator guide
有一个数据表的记录为:
id sqt
1 123
2 456
3 789
4 223
使用sql语句将上述记录转换为
id sqt id sqt
1 123 2 456
3 789 4 223
select a.id,a.sqt,b.id,b.sqt from aaaa a join aaaa b on mod(b.id,2)+1=mod(a.id,2) and b.id – a.id =1
安装指南:
一、操作系统安装
1、操作系统:Enterprise-R5-U4-Server-i386-dvd。
1) 配置网络时,不要选择动态DNS。输入静态IP地址和网关,DNS等信息。
2)选择自动分区,建议使用LVM来安装Lunux。这里边需要调整的是Swap的大小。调整Swap的大小为2G。
3)不要启用防火墙。禁用SELinux。
4)安装组件时,选择客户化安装。一般安装一个图形界面(比如GOME、KDE)。安装所有的开发组件。
Read the rest of this entry »
测试带有业务逻辑的trigger
十二 9
业务是这样:
触发过来的记录有以下一些判断约束:
新增:无约束,新增一条数据变动。
修改:
1) 如果变动表中存在同一记录的新增变动记录,但该新增变动记录处理状态为未处理,如果过滤状态为未过滤,则更新该新增变动记录的接受时间为当前时间;如果过滤状态为已过滤,则不做任何处理。
2) 如果变动表中存在同一记录的修改变动记录,但该修改变动记录处理状态为未处理,则更新该修改变动记录(更新接收时间为当前时间),并设置该修改变动记录的过滤状态为未过滤。
3) 其他情况,添加一条修改的变动记录。
删除:
1) 如果变动表中存在同一记录的新增变动记录,但该新增变动记录处理状态为未处理,则删除该新增变动记录。
2) 如果变动表中存在同一记录的修改变动记录,但该修改变动记录处理状态为未处理,则删除该修改变动记录,并添加一条删除的变动记录(或者更新该修改变动记录为删除变动记录,接受时间为当前时间,过滤状态为未过滤)。
3) 其他情况,添加一条删除的变动记录。
Read the rest of this entry »
绿色oracle客户端
十二 4
以后不再需要安装oracle客户端了,需要两个dll文件,oci.dll和oraociei11.dll,只要扔到system32文件夹下就可以了。当连接数据库的时候,在Web.Config中的配置改为以下配置就OK了。
<add name="DataAccessQuickStart" providerName="System.Data.OracleClient" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));uid=system;pwd=123"/>
那用到的两个dll是从哪里来的呢?答案是从oracle官方网站上下载,下载地址为:instantclient-basic-win32-11.1.0.7.0.zip解压并找到上面讲的两个dll就OK了。在我写这个blog的时候,发现了其他的朋友也有写好的,地址分别是:
〔原创〕Windows下面怎样配置 Oracle10g即时客户端(绿色安装ORACLE客户端)
免安装的Oracle客户端 – Oracle Instant Client介绍与配置
可以参考上面两个朋友的文章。
在上一篇中介绍了如何使用odp.net代替ado.net,不过demo程序是C/S的,今天写一个B/S的,主要是获取翻页存储过程的数据和行数。
首先,在Web.Config中配置数据库连接字串,具体企业库怎么配置连接字串这里就不介绍了。代码如下:
<add name="OracleSource" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.88)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));User Id=sys;Password=123;" providerName="Oracle.DataAccess.Client" />
然后,在.cs文件中编写如下代码,代码要注意的地方是存储过程的参数名要与代码中的参数名一致:
/// <summary>
/// 获取当前页数据
/// </summary>
/// <returns></returns>
public DataSet GetCurrentDataSet()
{
//调用EnterpriseLibrary获取Database对象
Database db = DatabaseFactory.CreateDatabase("OracleSource");
//获取OracleCommand
OracleCommand com = db.GetStoredProcCommand("WP_ALL_PAGINATION") as OracleCommand;
//表名称
com.Parameters.Add("TABLENAME_IN", OracleDbType.Varchar2, 50);
com.Parameters["TABLENAME_IN"].Direction = ParameterDirection.Input;
com.Parameters["TABLENAME_IN"].Value = tableName;
//每页显示记录数
com.Parameters.Add("PAGESIZE_IN", OracleDbType.Int32);
com.Parameters["PAGESIZE_IN"].Direction = ParameterDirection.Input;
com.Parameters["PAGESIZE_IN"].Value = PageSize * PageNo;
//当前页索引值
com.Parameters.Add("PAGEINDEX_IN", OracleDbType.Int32);
com.Parameters["PAGEINDEX_IN"].Direction = ParameterDirection.Input;
com.Parameters["PAGEINDEX_IN"].Value = (PageNo - 1) * PageSize;
//排序字段
com.Parameters.Add("ORDERSYNTAX_IN", OracleDbType.Varchar2, 3000);
com.Parameters["ORDERSYNTAX_IN"].Direction = ParameterDirection.Input;
com.Parameters["ORDERSYNTAX_IN"].Value = orderBY;
//Where子句下条件
com.Parameters.Add("CONDITION_IN", OracleDbType.Varchar2, 3000);
com.Parameters["CONDITION_IN"].Direction = ParameterDirection.Input;
com.Parameters["CONDITION_IN"].Value = whereCondition;
//显示的字段
com.Parameters.Add("FIELDSNAME_IN", OracleDbType.Varchar2,300);
com.Parameters["FIELDSNAME_IN"].Direction = ParameterDirection.Input;
com.Parameters["FIELDSNAME_IN"].Value = showFields;
//主键
com.Parameters.Add("ONLYFIELD_IN", OracleDbType.Varchar2, 100);
com.Parameters["ONLYFIELD_IN"].Direction = ParameterDirection.Input;
com.Parameters["ONLYFIELD_IN"].Value = guid;
//返回总记录数
com.Parameters.Add("COUNT_OUT", OracleDbType.Int32);
com.Parameters["COUNT_OUT"].Direction = ParameterDirection.InputOutput;
com.Parameters["COUNT_OUT"].Value = 0;
//返回记录集
com.Parameters.Add("cur_out", OracleDbType.RefCursor);
com.Parameters["cur_out"].Direction = ParameterDirection.Output;
DataSet ds = db.ExecuteDataSet(com);
//符合条件的记录总条数
Count = int.Parse(com.Parameters["COUNT_OUT"].Value.ToString());
return ds;
}
由于微软在.net framework4中会将System.Data.OracleClient.dll deprecated,而且就访问效率和速度而言,System.Data.OracleClient.dll与Oracle.DataAccess.dll相比,微软的确实没有oracle提供的类库有优势,所以我放弃了使用多年的System.Data.OracleClient.dll,取而代之的是odp.net。然而odp.net的优点不止这些,还包括:
1、不在安装客户端也能访问服务器上的oracle(假设Application Server与DB Server 分开)
2、不需要配置TnsNames.Ora文件
当然,我选择odp.net的最主要的原因还是性能。这篇文章列举了两者之间的对比。Technical Comparison: ODP.NET Versus Microsoft OracleClient