Archive for category oracle

在c#中使用TransactionScope操作oracle数据库

有需求要将几个操作oracle数据库的方法写到一个事务里面,用到了TransactionScope对象。但使用的时候不是很顺利,先是说不能嵌套事务,仔细检查原来的代码中,的确有事务,那个现在要把几个操作放到一个事务里面,只写删除了单个方法的事务。随之又报了另一个错误。

using (TransactionScope scope = new TransactionScope())
{
    do_ora1();
    do_ora2();
    do_ora3();
    scope.Complete();
}
[DllNotFoundException: 无法加载 DLL“oramts.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。]
   System.Data.OracleClient.OracleInternalConnection.Enlist(String userName, String password, String serverName, Transaction transaction, Boolean manualEnlistment) +157
   System.Data.OracleClient.OracleInternalConnection.Activate(Transaction transaction) +68
   System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) +33
   System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +1318
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +100
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +116
   System.Data.OracleClient.OracleConnection.Open() +40

在网上查原因,各式各样的都有,我是这样的解决的:

我的oracle版本是10.2,我下载了一个oramts10.dll文件,将这个文件重命名为oramts.dll后复制到oracle\product\10.2.0\db_1\BIN下。就OK了。有些人说下载msvcrtd.dll到system32下面,我试了是没有的。

下载oramts10.dll

oracle function将多行变为逗号分隔

create or replace function GetInfoCategory(infoid in varchar2) return varchar2 is
  Result varchar2(5000);
  cursor cur_tsalary is
    select mic.CATEGORYNAME from InfoCategory ic
    inner join (
    select * from idcs_metadata_infocategory t
connect by prior t.guid=t.fcatecode
start with
t.fcatecode ='0130d7cf' order by t.seqnum ) mic on ic.c_guid=mic.guid where ic.f_guid=infoid;
  cname varchar2(5000);
begin
  open cur_tsalary;
  loop
    fetch cur_tsalary into cname;
    exit when cur_tsalary%notFound;
    Result := Result || ',' || cname;
  end loop;
  close cur_tsalary;
  Result := trim(Result);
  if length(Result) > 0 then
     Result := substr(Result, 2, length(Result)-1);
  end if;
  return(Result);
end GetInfoCategory;

ORA-01536 超出表空间‘USERS’的空间限量

运行命令:

ALTER USER <USERNAME> QUOTA UNLIMITED ON TABLESPACENAME

oracle获取表的字段名称、字段类型、长度、注释、主键的sql语句

select distinct A.column_name name,A.data_type datatype,A.data_length,
A.data_precision 整数位, A.Data_Scale 小数位,
A.nullable isnullable,c.column_name constraint_name,d.comments tablename,
B.comments comments from user_tab_columns A,user_col_comments B ,all_cons_columns C,USER_TAB_COMMENTS D
where a.COLUMN_NAME=b.column_name and A.Table_Name = B.Table_Name
and A.Table_Name = D.Table_Name and (A.TABLE_NAME=c.table_name) and
A.Table_Name=’” + name + “‘

解决Dynamic Performance Tables not accessible方法

当我在pl/sql中查询某个表的详细字段信息的时候,报了这样一个错误
sql语句为: Read the rest of this entry »

由一张表更新另一张表

更新bank表中的address字段,通过bank.tyid与banktype的typeid进行关联

update bank set address = (select typename from banktype where bank.tyid=banktype.typeid)

记2010年5月22日下午在杭州贝塔咖啡参加oracle活动

说来也巧,参加了oracle杭州群,正好赶上有这种线下的活动,又是我一直向往的关于dba活动。于是就参加了。当然,没有白来,见到了很多和我一样,带着对dba高手敬仰之情而来的朋友们,也如愿以偿的见到了很多牛人,包括:冯大辉、d.b.c.a(楼方鑫)、alan Lee等人。在活动中,大家分享了自己成为dba的经验,以及如何成为一个好的dba。其中大家聊的最多的就是要认认真真的看两年书,就是oracle的基础知识。万丈高楼平地起,千里之行始于足下,大家都再三强调了基础的重要性。
回来以后,我一直在想,我适合做dba吗,能不能踏踏实实的学习两年基础知识,迈入dba这个领域呢?我也一直在思索,一方面是感觉自己是虽然在技术上没有短板,但也没有一个是特别擅长的,所谓的一专多能没有达到;另一方面,在数据和手机这两块领域,我都认为是很有前途的,我都想去做,但是我真的有这么多的精力吗,不专攻一个,我肯定做不到最好,也许该逼一下自己,去创造背水一战的场景。曲则全,枉则直,洼则盈,敝则新,少则多,多则惑。每次想到这里,我就有种被这世上所谓的知识给耍了的感觉。人生就这么短的时光,却有这么多的欲望要去实现,真是以有涯随无涯,殆已!随的是什么,是少的时候想多一些,多了呢,就迷惑了,这就是人的欲望。话讲了这么多,感觉自己跟个超人(超凡脱俗的人)似的,其实,我也还在三界内五行中。只是看不清:一方面,数据,肯定是越来越多,多了就会产生价值,就需要dba去管理和挖掘,这就是dba的职责;另一方面,智能手机迅速普及,我预测,智能手机的数量一定会超过PC机的数量,将来会有越来越多的手机上的应用和功能等需要去开发,也有很多事情可以做。我究竟往哪个方面走呢?二个选择我都迷惑了,这要是多了还得了?

学习oracle要看的几本书

几本核心的,concept,administrator guide,以及 unix administrator guide

用一条sql语句将四行两列数据库记录转为两行四行且id为顺序递增

有一个数据表的记录为:
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

oracle ebs12 for linux 安装指南

安装指南:
一、操作系统安装
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 »

pagepeel by webpicasso.de