Oracle新手的一些体会
接触Oracle已经有两个月了,最近应公司项目的要求,要做一个Oracle定时插入记录的小工具,制作工具的过程中,收获很多,自己对Oracle的了解又深入了一步,下面把自己的一些体会和收获记录于此。
工具是用C#写的,首先在连库字符串的选择上面,自己纠结了一会儿。一般情况下我们做项目都是用系统配置好的环境去连接数据库的,不管连接本地还是远程机器上的数据库,都需要安装Oracle客户端或者Oracle数据库,归根结底,用的就是tnsname.ora这个文件的配置。这时候的一个问题就是怎么样才能不依赖这个文件,直接在工具界面通过IP/机器名、账号、密码、实例名直接就可以实现连接呢?
为此我查了一些连库字符串,最终选择了这个@"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=本地或者远程Oracle服务器IP) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=实例名sid)));Persist Security Info=True;User Id=用户名; Password=密码;
应用这个字符串可以不必要安装Oracle客户端或者数据库服务器,直接就可以连接到目标数据库。
这个是定了,于是我在dos命令下进入Oracle数据库(sqlplus "system/password as sysdba"),在数据库里创建了一张表,写了两条数据。接着回到我做的工具里面去查这些记录,但是却报错“数据库里不存在这张表”,但是我在shell窗口下查询明明有这个表啊!这个问题让我很纳闷,经过查找一些资料,才发现原来凡是以sysdba模式登陆的用户,登陆后,操作用户都会变成sys,例如:用sqlplus "system/password as sysdba",然后进去之后执行show user,会发现用户是"sys",这就说明我当初创建的表示在sys用户的表空间里面呢,而在连库字符串里面又不能指定用户sys,因为这个是超级用户。接着我自己创建了一个用户ljw,但是没有指定这个用户的表空间,发现这个用户的默认表空间是users,不过可以做测试之用。
明白了这个道理之后前面的问题也就解释清楚了。

浙公网安备 33010602011771号