64位Windows7下安装Oralce10g客户端过程.
本想尝试在不安装客户端的情况下使用PLSQL访问数据库服务器 .但是后来还是失败了.
于是在Windows7(64位)下安装了Oracle10g的客户端后,使用PLSQL尝试连接,总提示一个空白框.很无奈.百度谷歌了许久才找到解决方法.
摘自网上的:
1.到oracle官网下载Oracle InstantClient,我下的是instantclient-basiclite-win32-10.2.0.4.zip,把它解压缩到oracle安装目录product下,其中还有一个目录为10.2.0.在其中的db_1/NETWORK/ADMIN目录下拷贝tnsnames.ora文件到InstantClient解压目录. 2.非登录状态下进入PL/SQL developer,进入首选项,在connection中设置Oracle_Home和OCI Library,其中Oracle_Home设置为InstantClient的解压目录,OCI Library设置为该目录下的oci.dll. |
最后设置环境变量:
set path=instantclient的路径
set TNS_ADMIN=tnsnames.ora文件的目录
使用PLSQL尝试登录,成功.
PS:如果出现ORA-12705:无法访问NLS数据文件,或者指定的环境无效错误,把环境变量中NLS_LANG的变量删除掉
有关Oracle中的Blob字段更新问题
先说下偶遇到的问题:
Oracle中我使用Blob字段来存一个Xml内容.新增一条记录正常,但是尝试用一条记录去更新已经存在的记录.
发现Blob中的字段中的内容并没有被更新掉.
网络上的一些朋友说原因如下:
假设Blob字段中已经存在的内容是100个字节,那么尝试用50字节的内容去更新,
那么得到的结果就是:前面50个字节被覆盖,而Blob仍然存在100个字节,其中后面50个字节是原先的后50个字节.
那么解决的方法如下:(证实可以通过)
先清空原Blob字段中的数据,再进行字节的写入.(与平常的更新操作会多了一步).
具体的更新方法如下:
UPDATE 表名 SET BLOB字段=EMPTY_BLOB() WHERE 条件.
然后再执行具体的更新SQL语句.
ORA-01034 ORACLE not available ORA-27101 Shared memory realm does not exist错误解决方案.
解决好创建实例问题之后,使用PL/SQL连数据库报如下错误:
ORA-27101 Shared memory realm does not exist
ORA-01034 ORACLE not available
谷歌了很久很久,才找到解决方案,网上大多数方案都不行.很佩服这个牛人.
偶不是Oracle专家,不说原因了..直接说明怎么解决问题的吧.
1.打开命令窗口输入:lsnrctl start
2.出现监听程序启动成功之后,继续输入: sqlplus '/as sysdba'
3.连接成功后输入startup
4.出现成功信息后再使用PL/SQL登录,发现登录成功.
贴个截图:
Oracle服务误删除的解决办法(360搞的)
之前有一次遇到这个问题,ORACLE.exe莫名奇妙的被360给删除了,上次选择了还原系统来解决,这次不知何时又被删除了.害我搞了一个晚上
无奈之下只好百度谷歌到处搜索.搜索到如下命令可建Oracle实例.(可弄成一个bat文件)
oradim -NEW -SID orcl -STARTMODE manual -PFILE F:\oracle\product\10.2.0\admin\ORCL\pfile\initorcl.ora"
oradim -STARTUP -SID ORCL -STARTTYPE inst
其中红色部分为自己的Oracle实例.
顺便贴个删除Oracle实例的命令:
oradim -DELETE -SID orcl
完成之后重启便可.
若登录数据库时出现如下错误 :
ora-01034:oracle not available
ora-27101:shared mermory realm does not exist
Oracle出现ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务解决方法
遇到此问题多次了,于是决定记一下.
找到listener.ora文件打开,
# listener.ora Network Configuration File: f:\oracle\product\10.2.0\db_1\network\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = f:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = f:\oracle\product\10.2.0\db_1) (SID_NAME = ORCL) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) ) |
上面红色标记部分为增加的部分,根据具体数据库安装的不同,分别更改GLOBAL_DBNAME、ORACLE_HOME、SID_NAME三个值,然后重新启动Oracle服务即可
Oracle split函数的用法
split函数故名思意就是用来分割字符串。做了个简单的实验:
看SQL语句:
Select * From Table (Split('1#2#3#4','#'))
得到的结果如下:
若想要把分割出来的记录与其他相关表进行关联查询,使用这张表与其他表进行关联即可。
Oracle Number的精度问题
今天写建表的脚本时,设置数据类型为Number(2,2),以为前面的这个参数是代表整数的位数,后面的参数是代表整数的未数,结果报出“精度错误”的问题,百度得到:
原来Number(P,S)是代表总共P位数,其中小数有S位
卸载Oracle10g步骤
很郁闷的不知道为啥的装Oracle10g就出错了,无法创建实例等问题。于是就想到先卸载,但是之前听说Oracle的卸载异常麻烦,之前是用9i的,听过如果第一次装失败,基本上要重装系统了。不过今天百度了下,并且按照里面的做了,接着再装Oracle就可以了,于是记录下具体卸载方法:(摘自网上)
0、开始->设置->控制面板->添加删除程序-> Oracle Data Provider for .Net Help 1、开始->设置->控制面板->管理工具->服务停止所有Oracle服务; 2、开始->程序->Oracle – OraDb10g_home1>Oracle Installation Products-> Universal Installer 卸装所有Oracle产品,但Universal Installer本身不能被删除; 3、运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口; 4、运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动这个列表,删除所有Oracle入口; 5、运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除所有Oracle入口; 6、开始->设置->控制面板->系统->高级->环境变量,删除环境变量CLASSPATH和PATH中有关Oracle的设定; 7、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标; 8、删除c:\Program Files\Oracle目录; 9、重新启动计算机,重起后才能完全删除Oracle所在目录 ; 10、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入口目录及所有子目录,并从Windows XP目录(一般为d:\WINDOWS)下删除以下文件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等; 11、WIN.INI文件中若有[ORACLE]的标记段,删除该段; 12、如有必要,删除所有Oracle相关的ODBC的DSN(管理工具/数据源(ODBC)); 13、到事件查看器(管理工具/事件查看器)中,删除Oracle相关的日志(只能删除所有,右击某个目录,清除所有事件) |
其中有很多步我都没用到,可能是因为刚刚装完的缘故吧。还没产生其他垃圾数据和文件。
Oracle 横表和纵表
前一段时间了解到的,今天有空写下,备忘~
先来说说横表和纵坐表的概念,先来看看以下两图:
第一张图就是横表,一行表示了一个实体记录,这就是我们传统的设计表的形式
第二张图就是纵表,他的一行记录,是用于表示某个学生的属性名和属性值对应关系,像这边有两个属性(名字和性别),在纵表中就要用两条记录来表示一个学生。
从上面可以观察出,横表的好处是清晰可见,一目了然,但是有一个弊端,如果现在要把这个表加一个字段,那么就必须重建表结构。对于这种情况,在纵表中只需要添加一条记录,就可以添加一个字段,所消耗的代价远比横表小,但是纵表的对于数据描述不是很清晰,而且会造成数据库数量很多,两者利弊在于此。所以,应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。
在实际开发中,经常需要互相转换横表和纵表的形式,这里贴个从纵表数据转成横表显示的形式。
Select student_no, max(decode(field_name,'student_name',field_value)) As student_name, max(decode(field_name,'student_sex',field_value )) As student_sex From cuc_student_y Group By student_no;
横转纵暂时不知~~望高人指点~~
Oracle 树状查询
在实际应用中,经常利用数据库保存树状结构的数据,通常用一张表中的两个字段表示,一个是自身的ID,一个是保存父类的ID。在这样具有这种关系中的数据,要求查出的数据具有我们想要的树状显示。这里需要引入Oracle的一个查询语句。
Select * from tablename start with [condition1] Connect By Prior [condition2] where [condition3]
condition1 通常是用于筛选某颗树或者多颗树的结点,这里所的树包括子树,
condtion2 通常是用于连接父结点和子结点的关系,prior 所表示的是上一条记录,通常用法:prior id = pid,(上一条的的ID号是本条记录的父类ID号)这样就把整个树状结构给建立起来了。
conditon3 就是我们通常的where语句,过滤某些记录。
现在看下具体例子。
其中Test_ID 表示本身的ID,Test_PID表示父类的ID
这边记录的描述成树状结构就是如下:
现在,假设我们查询的福州以及福州下的所有子东西,就可以这样查询,
只要取福州的根结点就可以,福州的根结点翻译成数据库中存的数据就是 test_id =1
因此得到的sql如下:
Select * From Test_ t Start With Test_Id = 1 Connect By Prior Test_Id = Test_Pid
查询结果:
用结构图表示就是如下信息:
因此想要查询某些信息,只要抓住根结点的条件就可以。。Over~~