oracle怎么使用,Oracle 游标使用总结
oracle怎么使用,Oracle 游标使用总结详细介绍
本文目录一览: Oracle客户端怎么用?
首先去下载oracleclient客户端工具
小编这里已经下载的有了,目录结构如下所示
请点击输入图片描述
打开PLSQL,点取消进去,然后弹出PLSQL主界面,找到菜单栏的tools选择属性preferences进去
请点击输入图片描述
请点击输入图片描述
请点击输入图片描述
弹出如下界面,配置oracleclient
配置好两个设置项,点apply,然后点ok,关闭PLSQL,重启PLSQL
请点击输入图片描述
上边的两个填写项就是第一步中的目录,以及目录下的一个文件
如下图所示,在哪个目录就对应的去找就可以了。
请点击输入图片描述
重启PLSQL进入到登录界面,输入相关信息,用户名密码,以及连接信息
连接信息:可以是ip:1521/实例名
也可以是network/admin目录下的tnsname.ora中配置的TNS别名。
请点击输入图片描述
连接进去成功之后
可以随便写一个语句查查,是否正常
select * from dual;
请点击输入图片描述
Oracle数据库系统使用经验
oracle数据库是一种大型数据库系统,一般应用于商业,政府部门,它的功能很强大,能够处理大批量的数据,在网络方面也用的非常多。Oracle数据库管理系统是一个以关系型和面向对象为中心管理数据的数据库管理软件系统,其在管理信息系统、企业数据处理、因特网及电子商务等领域有着非常广泛的应用。1.having 子句的用法having 子句对 group by 子句所确定的行组进行控制,having 子句条件中只允许涉及常量,聚组函数或group by 子句中的列。2.外部联接"+"的用法外部联接"+"按其在"="的左边或右边分左联接和右联接。若不带"+"运算符的表中的一个行不直接匹配于带"+"预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回。若二者均不带?+?,则二者中无法匹配的均被返回。利用外部联接"+",可以替代效率十分低下的 not in 运算,大大提高运行速度。例如,下面这条命令执行起来很慢select a.empno from emp a where a.empno not in(select empno from emp1 where job=?SALE?);倘若利用外部联接,改写命令如下:select a.empno from emp a ,emp1 bwhere a.empno=b.empno(+)and b.empno is nulland b.job=?SALE?;可以发现,运行速度明显提高。3.删除表内重复记录的方法可以利用这样的命令来删除表内重复记录:delete from table_name awhere rowid (select max(rowid) from table_namewhere column1=a.column1 and column2=a.column2and colum3=a.colum3 and );不过,当表比较大(例如50万条以上)时,这个方法的效率之差令人无法忍受,需要另想办法(可参看拙文《电信计费中长途重复话单的技术处理》,《计算机与通信》,1999-07)。4.set transaction 命令的用法在执行大事务时,有时oracle会报出如下的错误:ORA-01555:snapshot too old (rollback segment too small)这说明oracle给此事务随机分配的回滚段太小了,这时可以为它指定一个足够大的回滚段,以确保这个事务的成功执行。例如set transaction use rollback segment roll_abc;delete from table_name where commit;回滚段roll_abc被指定给这个delete事务,commit命令则在事务结束之后取消了回滚段的指定。5.使用索引的注意事项select,update,delete 语句中的子查询应当有规律地查找少于20%的表行。如果一个语句查找的行数超过总行数的20%,它将不能通过使用索引获得性能上的提高。索引可能产生碎片,因为记录从表中删除时,相应也从表的索引中删除。表释放的空间可以再用,而索引释放的空间却不能再用。频繁进行删除操作的被索引的表,应当阶段性地重建索引,以避免在索引中造成空间碎片,影响性能。在许可的条件下,也可以阶段性地truncate表,truncate命令删除表中所有记录,也删除索引碎片。6.数据库重建应注意的问题在利用import进行数据库重建过程中,有些视图可能会带来问题,因为结构输入的顺序可能造成视图的输入先于它低层次表的输入,这样建立视图就会失败。要解决这一问题,可采取分两步走的方法:首先输入结构,然后输入数据。命令举例如下 (uesrname:jfcl,password:hfjf,host sting:ora1,数据文件:expdata.dmp):imp jfcl/hfjf@ora1 file=empdata.dmp rows=Nimp jfcl/hfjf@ora1 file=empdata.dmp full=Y buffer=64000commit=Y ignore=Y第一条命令输入所有数据库结构,但无记录。第二次输入结构和数据,64000字节提交一次。ignore=Y选项保证第二次输入既使对象存在的情况下也能成功。以上六条小经验是从平时的工作中总结出来的,拿出来与大家分享,希望能帮到大家。
oracle数据库怎么建
有两种方式
(1)图形化创建:DBCA,然后根据图形化提示一步一步的区创建
(2)静默创建,也就是语句创建create database语句,这个语句很长,很麻烦,要写的内容很多,很多地方都有相关例子,这里就不赘述了。
下面还有一种不算是创建数据库的建立方法:
复制数据库或者导入数据库:将数据库整体复制或者导出,然后再新的地方导入。只是复制和导出时也要考虑一些配置文件与参数文件。
建立Oracle数据库需要以下步骤:
安装Oracle数据库软件:首先需要从Oracle官方网站下载合适的Oracle数据库软件,然后按照官方文档中的说明进行安装。
创建数据库实例:在安装完成后,需要使用Oracle提供的DBCA(Database Configuration Assistant)工具创建数据库实例。在创建数据库实例时,需要指定数据库的名称、字符集、管理员用户名和密码等信息。
配置数据库参数:数据库实例创建完成后,需要对数据库参数进行适当的配置,以优化数据库性能。Oracle数据库提供了多种方式来配置数据库参数,包括使用SQL*Plus命令行工具和在Oracle Enterprise Manager中进行配置等。
创建表空间和用户:在数据库实例配置完成后,需要创建表空间和用户,以便存储和管理数据。表空间是一个逻辑存储单元,用于组织和管理数据库对象,而用户则是数据库中的一个实体,用于访问和管理数据库对象。
创建表和索引:创建表和索引是数据库设计的重要部分。表用于存储数据,而索引用于加速数据访问。在Oracle数据库中,可以使用SQL命令或Oracle Enterprise Manager来创建表和索引。
管理数据:最后,需要对数据库中的数据进行管理。管理数据包括数据的备份和恢复、数据的安全性管理以及数据库性能的监控和优化等。
以上是建立Oracle数据库的基本步骤,需要根据具体情况进行调整和优化。
Oracle 游标使用总结
Oracle游标分为显示游标和隐式游标 显示游标(Explicit Cursor):在PL/SQL程序中定义的 用于查询的游标称作显示游标 隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的 而且是在PL/SQL中使用UPDATE/DELETE语句时 Oracle系统自动分配的游标 一 显示游标 使用步骤 ( )定义 ( )打开 ( )使用 ( )关闭 使用演示 首先创建测试用表STUDENT 脚本如下 复制代码 代码如下:
( ) 使用WHILE循环处理游标 create or replace PROCEDURE PROC_STU AS BEGIN 显示游标使用 使用while循环 declare 定义游标 名称为cur_stu cursor cur_stu is select stuno stuname from student order by stuno; 定义变量 存放游标取出的数据 v_stuno varchar( ); v_stuname varchar( ); begin 打开游标cur_stu open cur_stu; 将游标的当前行取出存放到变量中 fetch cur_stu into v_stuno v_stuname; while cur_stu%found 游标所指还有数据行 则继续循环 loop 打印结果 dbms_output PUT_LINE(v_stuno|| > ||v_stuname); 继续将游标所指的当前行取出放到变量中 fetch cur_stu into v_stuno v_stuname; end loop; close cur_stu; 关闭游标 end; END PROC_STU ; ( ) 使用IF ELSE代替WHILE循环处理游标 create or replace PROCEDURE PROC_STU AS BEGIN 显示游标使用 使用if判断 declare 定义游标 名称为cur_stu cursor cur_stu is select stuno stuname from student order by stuno; 定义变量 存放游标取出的数据 v_stuno varchar( ); v_stuname varchar( ); begin 打开游标cur_stu open cur_stu; 将游标的当前行取出存放到变量中 fetch cur_stu into v_stuno v_stuname; loop if cur_stu%found then 如果游标cur_stu所指还有数据行 打印结果 dbms_output PUT_LINE(v_stuno|| > ||v_stuname); 继续将游标所指的当前行取出放到变量中 fetch cur_stu into v_stuno v_stuname; else exit; end if; end loop; close cur_stu; 关闭游标 end; END PROC_STU ; ( ) 使用FOR循环处理游标 create or replace PROCEDURE PROC_STU AS BEGIN 显示游标使用 使用for循环 declare 定义游标 名称为cur_stu cursor cur_stu is select stuno stuname from student order by stuno; begin for stu in cur_stu loop dbms_output PUT_LINE(stu stuno|| > ||stu stuname); 循环做隐含检查 %notfound end loop; 自动关闭游标 end; END PROC_STU ; ( ) 常用的使用EXIT WHEN处理游标 create or replace PROCEDURE PROC_STU _ AS BEGIN 显示游标使用 使用exit when循环 declare 定义游标 名称为cur_stu cursor cur_stu is select stuno stuname from student order by stuno; 定义变量 存放游标取出的数据 v_stuno varchar( ); v_stuname varchar( ); begin 打开游标cur_stu open cur_stu; loop 将游标的当前行取出存放到变量中 fetch cur_stu into v_stuno v_stuname; exit when cur_stu%notfound; 游标所指还有数据行 则继续循环 打印结果 dbms_output PUT_LINE(v_stuno|| > ||v_stuname); end loop; close cur_stu; 关闭游标 end; END PROC_STU _ ; 二 隐式游标 使用演示 create or replace PROCEDURE PROC_STU AS BEGIN 隐式游标使用 update student set stuname= 张燕广 where stuno= ; 如果更新没有匹配则插入一条新记录 if SQL%NOTFOUND then insert into student(STUNO STUNAME AGE GENDER) values( 张燕广 男 ); end if; END PROC_STU ; 说明 所有的SQL语句在上下文区内部都是可执行的 因为都有一个游标指向上下文区 此游标就是 SQL游标 与现实游标不同的是 SQL游标在PL/SQL中不需要打开和关闭 而是在执行UPDATE DELETE是自动打开和关闭 上面例子中就是通过SQL%NOTFOUND游标属性判断UPDATE语句的执行结果决定是否需要插入新记录 lishixinzhi/Article/program/Oracle/201404/30540
如何连接oracle数据库
使用sqlplus连接oracle11g数据库步骤如下所示:
方法一:
1、找到sqlplus,在开始菜单你安装的oracle-》应用程序开发目录下面;
点击查看大图" class="ikqb_img_alink" rel="nofollow noopener" bdsfid="313">
2、点击SQLPlus,弹出cmd;
3、输入用户名,还有密码,密码后面加上@数据库实例名,登录成功后界面如下所示;
方法二:
在开始-》运行(快捷键winr),输入cmd。弹出的黑色框中输入:sqlplus用户名/密码@数据库实例名;
oracle触发器如何使用
触发器 是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。触发器是许多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。 1.说明 1)触发器是一种特殊的 触发器 是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。触发器是许多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。1.说明1)触发器是一种特殊的存储过程,触发器一般由事件触发并且不能接受参数,存储器由语句块去调用2)触发器分类:1.DML触发器: 创建在表上,由DML事件引发2.instead of触发器: 创建在视图上并且只能在行级上触发,用于替代insert,delete等操作(由于oracle中不能直接对有两个以上的表建立的视图进行DML操作,所以给出替代触发器,,它是专门为进行视图操作的一种处理方法)3.DDL触发器: 触发事件时数据库对象的创建和修改4.数据库事件触发器:定义在数据库或者模式上,由数据库事件触发3)组成:1.触发事件:引发触发器被触发的事件 DML语句(INSERT, UPDATE, DELETE语句对表或视图执行数据处理操作)、DDL语句(如CREATE、ALTER、DROP语句在数据库中创建、修改、删除模式对象)、数据库系统事件(如系统启动或退出、异常错误)、用户事件(如登录或退出数据库)。2.触发时间:即该触发器是在触发事件发生之前(BEFORE)还是之后(AFTER)触发3.触发操作:触发器触发后要完成的事情4.触发对象:包括表、视图、模式、数据库。只有在这些对象上发生了符合触发条件的触发事件,触发器才会执行触发操作。5.触发条件:由WHEN子句指定一个逻辑表达式。只有当该表达式的值为TRUE时,遇到触发事件才会自动执行触发操作。6.触发频率:说明触发器内定义的动作被执行的次数。即语句级(STATEMENT)触发器和行级(ROW)触发器。(比如delete多条数据时,行级触发器可能会执行多次,语句级触发器只会触发一次)2.语法1)说明不同类型的触发器例如DML触发器,Instead of触发器,系统触发器语法格式区别较大2)一般语法CREATE [OR REPLACE] TIGGER触发器名 触发时间 触发事件ON表名/视图名[FOR EACH ROW] //加上FOR EACH ROW 即为行级触发器,不加时为语句级触发器BEGINpl/sql语句ENDcreate [or replace] trigger [schema.]trigger_name{before | after | instead of}{delete [or insert][or update [of column,...n]]}on [schema.]table_name | view_name[for each row [when(condition)]]sql_statement[,...n]例如:CREATE OR REPLACE TRIGGER trigger_name ON table_name[FOR EACH ROW]WHEN (condition)DECLAREBEGINEND;3)instead of 触发器语法语法:CREATE [OR REPLACE] TRIGGER trigger_nameINSTEAD OF{INSERT|DELETE|UPDATE [OF COLUMN...]}[OR {INSERT| DELETE| UPDATE [OF COLUMN...]}]ON VIEW_NAME[REFFERENCING{OLD [AS] OLD | NEW [AS] NEW| PARENT AS PARENT}] // 可以指定相关名称,当前的默认相关名称为OLD和NEW,应用相关名称时需要加:[FOR EACH ROW] //instead of 触发器只能在行级上触发,因为没有必要指定[WHEN CONDITION]DECLAREBEGINEND;说明:INSTEAD OF 用于对视图的DML触发,由于视图可能有多个表进行联结而成,因而并非所有的联结均可更新,运用 INSTEAD OF 触发器可完成相应的操作。3.实例创建测试表格:CREATE TABLE "HNZC"."TRIGGERTEST"("ID" VARCHAR2(20 BYTE),"NAME" VARCHAR2(20 BYTE),"SCORE" NUMBER);create table tab1 select * from triggertest;1)DML触发器/行级触发器触发器如下:CREATE OR REPLACE TRIGGER TRIGGER1AFTER INSERT ON TRIGGERTEST //插入后触发FOR EACH ROW //行级触发器BEGININSERT INTO tab1(ID,NAME) VALUES('22','33');END;执行语句:insert into triggertest (id) values ('aabbcc');语句执行结束,表tab1中新增加一条数据2)限制对表的修改(例如非工作时间不能修改某些表)触发器如下:CREATE OR REPLACE TRIGGER TRIGGER1AFTER INSERT ON TRIGGERTESTFOR EACH ROWBEGINIF(TO_CHAR(SYSDATE,'DAY') IN ('星期三','星期天')) THEN RAISE_APPLICATION_ERROR(-20001,'不是上班时间,不能修改表格triggertest'); END IF;END;执行语句:insert into triggertest (id) values ('aabbcc');今天周三因而输出结果为:在行 1 上开始执行命令时出错:insert into triggertest (id) values ('aabbcc')错误报告:SQL 错误: ORA-20001: 不是上班时间,不能修改表格triggertestORA-06512: 在 "HNZC.TRIGGER1", line 3ORA-04088: 触发器 'HNZC.TRIGGER1' 执行过程中出错通常对表的修改限制如下(即周一至周五9——18点能修改表格)CREATE OR REPLACE TRIGGER TRIGGER1BEFORE INSERT OR DELETE OR UPDATE ON TRIGGERTESTFOR EACH ROWBEGINIF(TO_CHAR(SYSDATE,'DAY') IN ('星期六','星期天')) OR(TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '9:00' AND '18:00') THEN RAISE_APPLICATION_ERROR(-20001,'不是上班时间,不能修改表格triggertest'); END IF;END;3)增加限制条件(如不能更改某个员工的记录)触发器如下:(如下实现月儿的分数只能增加)CREATE OR REPLACE TRIGGER TRIGGER1BEFORE INSERT OR DELETE OR UPDATE ON TRIGGERTESTFOR EACH ROWWHEN(OLD.NAME='月儿')BEGINCASE WHEN UPDATING('SCORE') THENIF:NEW.SCORE当前月儿的分数为20当修改为10时出错UPDATE "HNZC"."TRIGGERTEST" SET SCORE = '10' WHERE ROWID = 'AAAdEzAAPAAAAH+AAB' AND ORA_ROWSCN = '47685303'ORA-20001: 月儿的分数只能提升不能下降ORA-06512: 在 "HNZC.TRIGGER1", line 4ORA-04088: 触发器 'HNZC.TRIGGER1' 执行过程中出错当修改为30时成功UPDATE "HNZC"."TRIGGERTEST" SET SCORE = '30' WHERE ROWID = 'AAAdEzAAPAAAAH+AAB' AND ORA_ROWSCN = '47685303'提交成功4)在触发器中调用存储过程触发器为:CREATE OR REPLACE TRIGGER TRIGGER1BEFORE INSERT OR DELETE OR UPDATE ON TRIGGERTESTFOR EACH ROWBEGINTESTPRO1();END;存储过程为:create or replacePROCEDURE TESTPRO1 AS BEGINinsert into tab1(id,name,score) VALUES('AAA','BBB',200);END TESTPRO1;执行完毕后tab1中增加一条数据5)级联更新触发器如下(triggertest表中name修改时同时修改tab1中的name)create or replacePROCEDURE TESTPRO1 AS BEGINinsert into tab1(id,name,score) VALUES('AAA','BBB',200);END TESTPRO1;执行语句:update triggertest set name= '水儿' where;结果:tab1中name为月儿的也更改为水儿6)instead of触发器TABLE STUDENT表格数据如下创建视图student_viewCREATE OR REPLACE VIEW STUDNET_VIEWAS SELECT CLASSID,AVG(SCORE) AVERAGE_SCORE FROM STUDENTGROUP BY CLASSID;视图数据如下:对视图student_view 执行如下操作:DELETE FROM STUDNET_VIEW WHERE CLASSID='111';执行结果:错误报告:SQL 错误: ORA-01732: 此视图的数据操纵操作非法01732. 00000 - "data manipulation operation not legal on this view"解决方法:创建INSTEAD OF 视图CREATE OR REPLACE TRIGGER STUDENT_VIEW_DELETEINSTEAD OF DELETE ON STUDNET_VIEWFOR EACH ROWBEGINDELETE FROM STUDENT WHERE CLASSID=:OLD.CLASSID;END STUDENT_VIEW_DELETE;执行删除语句DELETE FROM STUDNET_VIEW WHERE CLASSID='111';执行结果:删除成功1 行已删除。4.注意事项1) 在触发器的执行部分只能用DML语句(SELECT、INSERT、UPDATE、DELETE),不能使用DDL语句(CREATE、ALTER、DROP)2) 触发器中不能使用commit语句,触发器的操作与触发事件(INSERT,UPDATE,DELETE)一起进行COMMIT和ROLLBACK;3) 一个表上的触发器越多,对于表的DML操作性能影响越大4) 触发器最大为32K
如何连接oracle数据库?
如何配置才能使客户端连到数据库:\x0d\x0a\x0d\x0a要使一个客户端机器能连接oracle数据库,需要在客户端机器上安装oracle的客户端软件,唯一的例外就是java连接数据库的时候,可以用 \x0d\x0ajdbc \x0d\x0athin模式,不用装oracle的客户端软件。加入你在机器上装了oracle数据库,就不需要在单独在该机器上安装oracle客户端了,因为装 \x0d\x0aoracle数据库的时候会自动安装oracle客户端。\x0d\x0a 用过sql \x0d\x0aserver数据库然后又用oracle的新手可能会有这样的疑问:问什么我用sql server的时候不用装sql \x0d\x0aserver的客户端呢?原因很简单,sql server也是microsoft的,它在操作系统中集成了sql \x0d\x0aserver客户端,如果microsoft与oracle有协议,将oracle客户端也集成到操作系统中,那我们也就不用在客户端机器装oracle\x0d\x0a 客户端软机就可访问数据库了,不过,这好像是不可能实现的事情。\x0d\x0a 也有的人会问:为什么在sql \x0d\x0aserver中没有侦听端口一说,而在oracle中要配置侦听端口?其实sql \x0d\x0aserver中也有侦听端口,只不过microsoft将侦听端口固定为1433,不允许你随便改动,这样给你一个错觉感觉sql \x0d\x0aserver中没有侦听端口,咳,microsoft把太多的东西都封装到黑盒子里,方便使用的同时也带来的需要副作用。而oracle中的侦听端口直接\x0d\x0a 在配置文件中,允许随便改动,只不过无论怎样改动,要与oracle服务器端设置的侦听端口一致。\x0d\x0a好,言归正传,我们如何做才能使客户端机器连接到oracle数据库呢?\x0d\x0aA. 安装相关软件\x0d\x0aB. 进行适当的配置\x0d\x0a\x0d\x0aA.在适当的位置安装适当的软件:\x0d\x0a在客户端机器:\x0d\x0a1.在客户端机器上安装ORACLE的Oracle Net通讯软件,它包含在oracle的客户端软件中。\x0d\x0a2.正确配置了sqlnet.ora文件:\x0d\x0aNAMES.DIRECTORY_PATH = (TNSNAMES, ?.)\x0d\x0aNAMES.DEFAULT_DOMAIN=DB_DOMAIN\x0d\x0a一般情况下我们不用NAMES.DEFAULT_DOMAIN参数。如果想不用该参数用#注释掉或将该参数删除即可,对于NAMES.DIRECTORY_PATH参数采用缺省值即可,对于NAMES.DEFAULT_DOMAIN参数有时需要注释掉,在下面有详细解释。\x0d\x0a3.正确配置了tnsname.ora文件\x0d\x0a\x0d\x0a在服务器端机器:\x0d\x0a1.保证listener已经启动\x0d\x0a2.保证数据库已经启动。\x0d\x0a如果数据库没有启动,用:\x0d\x0aOracle 9i:\x0d\x0ados>sqlplus “/ as sysdba”\x0d\x0asqlplus> startup\x0d\x0aOracle 8i:\x0d\x0ados>svrmgrl\x0d\x0asvrmgrl>connect internal\x0d\x0asvrmgrl>startup\x0d\x0a命令启动数据库\x0d\x0a如果listener没有启动,用:\x0d\x0alsnrctl start [listener name]\x0d\x0alsnrctl status [listener name]\x0d\x0a命令启动listener\x0d\x0aB.进行适当的配置\x0d\x0a如何正确配置tnsname.ora文件:\x0d\x0a\x0d\x0a可\x0d\x0a 以在客户端机器上使用oracle Net Configuration Assistant或oracle Net \x0d\x0aManager图形配置工具对客户端进行配置,该配置工具实际上修改tnsnames.ora文件。所以我们可以直接修改tnsnames.ora文件,\x0d\x0a 下面以直接修改tnsnames.ora文件为例:\x0d\x0a该文件的位置为: ?\network\admin\tnsnames.ora (for windows)\x0d\x0a?/network/admin/tnsnames.ora (for unix)\x0d\x0a此处,假设服务器名为testserver,服务名为orcl.testserver.com,使用的侦听端口为1521,则tnsnams.ora文件中的一个test网络服务名(数据库别名)为:\x0d\x0atest =\x0d\x0a(DESCRIPTION=\x0d\x0a(ADDRESS_LIST=\x0d\x0a(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))\x0d\x0a)\x0d\x0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)\x0d\x0a)\x0d\x0a)\x0d\x0a此处的笑脸为)。\x0d\x0a 红色的内容为需要根据实际情况修改的内容,现解释如下:\x0d\x0a PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。\x0d\x0a\x0d\x0aHOST:数据库侦听所在的机器的机器名或IP地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机 \x0d\x0a \x0d\x0a器。在UNIX或WINDOWS下,可以通过在数据库侦听所在的机器的命令提示符下使用hostname命令得到机器名,或通过ipconfig(for\x0d\x0a WINDOWS) or ifconfig(for \x0d\x0aUNIX)命令得到IP地址。需要注意的是,不管用机器名或IP地址,在客户端一定要用ping命令ping通数据库侦听所在的机器的机器名,否则需要在\x0d\x0a hosts文件中加入数据库侦听所在的机器的机器名的解析。\x0d\x0a\x0d\x0aPORT:数据库侦听正在侦听的端口,可以察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下通过lnsrctl status [listener name]命令察看。此处Port的值一定要与数据库侦听正在侦听的端口一样。\x0d\x0a SERVICE_NAME:在服务器端,用system用户登陆后,sqlplus> show parameter service_name命令察看。\x0d\x0a 如何利用配置的网络服务名连接到数据库:\x0d\x0a 用sqlplus程序通过test网络服务名进行测试,如sqlplus system/manager@test。\x0d\x0a 如果不能连接到数据库,则在tnsname.ora文件中的test网络服务名(net \x0d\x0aservice)后面加上sqlnet.ora文件中NAMES.DEFAULT_DOMAIN参数的值,此处我的参数值为 \x0d\x0atestserver.com,将其加到网络服务名后面,修改后的tnsname.ora中关于该网络服务名的内容为:\x0d\x0a\x0d\x0a 什么情况下会引起oracle自动设置NAMES.DEFAULT_DOMAIN参数?\x0d\x0a \x0d\x0a 出现这种情况的典型环境为windows的客户端的‘我得电脑à属性à计算机名à更改à其它?à此计算机的主DNS后缀’中设置了‘primary \x0d\x0a dns \x0d\x0asuffix’,因为在这种情况下安装客户端时,会在sqlnet.ora文件中自动设置NAMES.DEFAULT_DOMAIN参数,或许当把计算机\x0d\x0a 加入域中安装oracle客户端时也会出现这种情况,有条件的话大家可以试一下。\x0d\x0a\x0d\x0a我在设置oracle的客户端时一般手工修改tnsnames.ora文件,但是还有许多人喜欢用图形工具配置,该图形工具最终还是修改tnsnames.ora文件,但是它有时会引起其它的问题:\x0d\x0a\x0d\x0a在用oracle的图形配置软件'net assistant'或‘Net Configuration \x0d\x0aAssistant’配置网络服务名时,假如已经设置了‘primary dns \x0d\x0asuffix’,但是在图形配置软件中写的网络服务名的名字中没有‘primary dns \x0d\x0asuffix’,如只是写了test,则图形配置软件会自动在后面加上‘primary dns \x0d\x0asuffix’,使之变为test.testserver.com,并存在tnsnames.ora中,而不管你的sqlnet.ora文件中是否有 \x0d\x0aNAMES.DEFAULT_DOMAIN参数。此时,用图形工具进行测试连接是通过的,但是假如此时sqlnet.ora文件中没有 \x0d\x0aNAMES.DEFAULT_DOMAIN参数,则你在使用网络服务名时应该使用在tnsnames.ora中的 \x0d\x0atest.testserver.com,而不是你在图形配置软件中键入的test。解决的办法为:\x0d\x0a可以在sqlnet.ora文件中设置NAMES.DEFAULT_DOMAIN= testserver.com,这时你可以用test或test.testserver.com连接数据库\x0d\x0a在sqlnet.ora文件中不设置NAMES.DEFAULT_DOMAIN参数,在tnsnames.ora文件中将test.testserver.com中的.testserver.com去掉,这时你可以用test连接数据库。\x0d\x0a\x0d\x0a关于为什们在网络服务名后面加db_domain参数,需要了解sql*plus连接数据库的原理,我在后面解决12154常见故障中给出了详细的说明。\x0d\x0a\x0d\x0a如果上面的招数还不奏效的话,只好用一下乾坤大挪移了。\x0d\x0a将客户端的网络服务名部分\x0d\x0atest.testserver.com =\x0d\x0a(DESCRIPTION=\x0d\x0a(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))\x0d\x0a)\x0d\x0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)\x0d\x0a)\x0d\x0a)\x0d\x0a此处的笑脸为)。\x0d\x0a拷贝到服务器的tnsnames.ora文件中。然后再服务器端用sqlplus system/manager@test.testserver.com连接到数据库。\x0d\x0a 如果能连接成功,说明你的客户端与服务器端的网络有问题。\x0d\x0a 如果连接不成功,用前面的部分检查网络服务名部分部分是否正确,如果确信网络服务名部分正确而且所有的客户端都连不上数据库则可能为系统TCP/IP或Oracle系统有问题,建议重新安装数据库。\x0d\x0a该错误表示用于连接的网络服务名在tnsnames.ora文件中不存在,如上面的tnsnames.ora中的网络服务名只有test,假如用户在连接时用sqlplus system/manager@test1则就会给出TNS-12154错误。\x0d\x0a要注意的是,有时即使在tnsnames.ora文件中有相应的网络服务名,可是用该网络服务名连接时还会出错,出现这种情况的典型配置如下(在客户端的机器上):\x0d\x0asqlnet.ora文件:\x0d\x0aNAMES.DIRECTORY_PATH = (TNSNAMES, ?.)\x0d\x0aNAMES.DEFAULT_DOMAIN = server.com\x0d\x0atnsnames.ora文件:\x0d\x0atest =\x0d\x0a(DESCRIPTION=\x0d\x0a(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))\x0d\x0a)\x0d\x0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)\x0d\x0a)\x0d\x0a)\x0d\x0a此处的笑脸为)。\x0d\x0asql*plus运行基本机理:\x0d\x0a 在用户输入sqlplus system/manager@test后,sqlplus程序会自动到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN参数,假 如该参数存在,则将该参数中的值取出,加到网络服务名的后面, \x0d\x0a\x0d\x0a即此例中你的输入由sqlplus system/manager@test自动变为sqlplus system/manager@test.server.com\x0d\x0a \x0d\x0a,然后再到tnsnames.ora文件中找test.server.com网络服务名,这当然找不到了,因为该文件中只有test网络服务名,所以报 \x0d\x0a 错。解决的办法就是将sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN参数注释掉即可,如 \x0d\x0a#NAMES.DEFAULT_DOMAIN = \x0d\x0aserver.com。假如NAMES.DEFAULT_DOMAIN参数不存在,则sqlplus程序会直接到tnsnames.ora文件中找 \x0d\x0atest网络服务名,然后取出其中的host,port,tcp,service_name,利用这些信息将连接请求发送到正确的数据库服务器上。\x0d\x0a 另外原则上tnsnames.ora中的配置不区分大小写,但是我的确遇到区分大小写的情况,所以最好将使用的网络服务与tnsnames.ora中配置的完全一样。\x0d\x0aORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect Descriptor.\x0d\x0a该错误表示能在tnsnames.ora中找到网络服务名,但是在tnsnames.ora中指定的SERVICE_NAME与服务器端的SERVICE_NAME不一致。解决的办法是修改tnsnames.ora中的SERVICE_NAME。\x0d\x0a\x0d\x0a 易混淆术语介绍:\x0d\x0a \x0d\x0a Db_name:对一个数据库(Oracle database)的唯一标识,该数据库为第一章讲到的Oracle \x0d\x0adatabase。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负 \x0d\x0a 担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了Db_domain参数,这样在数据库的标识是由Db_name和 \x0d\x0aDb_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将Db_name和 \x0d\x0aDb_domain两个参数用’.’连接起来,表示一个数据库,并将该数据库的名称称为Global_name,即它扩展了Db_name。 \x0d\x0aDb_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。\x0d\x0a\x0d\x0a Db_domain:定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。\x0d\x0a\x0d\x0aGlobal_name:对一个数据库(Oracle \x0d\x0adatabase)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name. \x0d\x0aDb_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,如果要修改 \x0d\x0aGlobal_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO \x0d\x0a命令进行修改,然后修改相应参数。\x0d\x0a\x0d\x0aService_name:该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,\x0d\x0a \x0d\x0a一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,\x0d\x0a 而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. \x0d\x0aDb_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关\x0d\x0a 系,即不必Service name 必须与SID一样。\x0d\x0aNet service name:网络服务名,又可以称为数据库别名(database alias)。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。
oracle数据库中SID到底什么意思?怎么用?
SID的意思是oracle数据库的唯一标识符是你在建立一个数据库时系统自动赋予的一个初始ID。
SID主要用于在一些DBA操作以及与操作系统交互,从操作系统的角度访问实例名,必须通过ORACLE SID,且它在注册表中也是存在的。
扩展资料
如何查询当前用户的SID:
1、按【Win + R】快捷键,在弹出的运行对话框中输入【cmd】后按回车键
2、在命令提示符窗口中输入"whoami /user",按回车键
3、然后就查出我当前的用户名和对应的SID
SID是在一些DBA操作以及与操作系统交互,从操作系统的角度访问实例名,必须通过ORACLE_SID(操作系统的环境变量),且它在注册表中也是存在的。而数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。
SID的查询及设置:
1、按“Win + R”快捷键,在弹出的运行对话窗口中输入“cmd”后再按回车键进入下一个界面;
2、在界面里有两条命令都可以查询当前用户的SID。第一条指令:“whoami /user”。在命令提示符窗口中输入"whoami /user",再按回车键即可查询;
3、比如下图,就是本人的电脑当前的用户名和对应的SID;
4、第二条指令:“wmic useraccount get name,sid”。在命令提示符窗口中输入"wmic useraccount get name,sid",再按回车键即可查询;
5、比如下图,就是这条指令的执行结果,其他用户的用户名也可以一起查出来。
扩展资料:一个完整的SID包括:
· 用户和组的安全描述
· 48-bit的ID authority
· 修订版本
· 可变的验证值Variable sub-authority values
例:S-1-5-21-31044058 8- 2 500 36847- 5 803 895 05-500
我们来先分析这个重要的SID。第一项S表示该字符串是SID;第二项是SID的版本号,对于2000来说,这个就是1;然后是标志符的颁发机构,对于2000内的帐户,颁发机构就是NT,值是5。然后表示一系列的子颁发机构,前面几项是标志域的,最后一个标志着域内的帐户和组。
SID是一个数据库的唯一标识符!是你在建立一个数据库时系统自动赋予的一个初始ID,虽说他和数据库名(DB_NAME)都是一个数据库的唯一标识符,但是在作用上就有不小区别。
SID主要用于在一些DBA操作以及与操作系统交互,从操作系统的角度访问实例名,必须通过ORACLE_SID,且它在注册表中也是存在的.
而数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。
而SERVICE_NAME指的网络服务名,它是可以由自己意愿随意设置的,相当于为某个数据库实例取个别名方便自己记忆和访问。
ORACLE_NAME这东西我不自动你指的是什么 是指的数据库名吗(DB_NAME)
又或者指的是数据库实例名(instance_name)
而数据库实例名(instance_name)和ORACLE_SID功能类似,都是用于操作系统交互,但区别是instance_name是oracle数据库参数,而ORACLE_SID是操作系统的环境变量。
8i(8.1.x)之前是SID,之后改成service_name
现在的企业一般都是9i或10g,用services_name即可。
如果本机安装了oracle客户端,那就修改tnsname.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = [host|ip])(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
就是这个地方会涉及到版本问题,如果是8i以前的,下面的写法是错误的。
(SERVICE_NAME = orcl)
而8i之后也是支持(SID = orcl)这个格式的
在机器A上装了oracle 10g,如何在机器B上用SQL Plus登陆;
机器A的名字是dzhb,数据库名字是LKJS.
如何在SQL Plus中输入登陆信息????
B机安装Oracle客户端,使用Net Configuration Assistant配置一个本地服务名,然后在sqlplus中:
sqlplus username/password@network_service_name
SID的意思是oracle数据库的唯一标识符是你在建立一个数据库时系统自动赋予的一个初始ID。
SID主要用于在一些DBA操作以及与操作系统交互,从操作系统的角度访问实例名,必须通过ORACLE SID,且它在注册表中也是存在的。
扩展资料
如何查询当前用户的SID:
1、按【Win + R】快捷键,在弹出的运行对话框中输入【cmd】后按回车键
2、在命令提示符窗口中输入"whoami /user",按回车键
3、然后就查出我当前的用户名和对应的SID
Oracle round函数是什么意思?怎么运用?
Oracle Round 函数的意思是四舍五入的方法,即传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果。
Oracle Round 函数使用示例如下:
SELECT ROUND( number, [ decimal_places ] ) FROM DUAL
1、参数 number 是指需要处理的数值,是必须填写的值。
2、参数 decimal_places 是指在进行四舍五入运算时 , 小数的应取的位数,该参数可以不填,不填的时候,系统默认小数位数取0。
3、函数应用举例:
①“select round(988.211, 0) from dual;”得到结果为:988
②“select round(988.211, 1) from dual;”得到结果为:988.2
③“select round(988.211, 2) from dual;” 得到结果为:988.21
④“select round(988.211, 3) from dual;” 得到结果为:988.211
⑤“select round(-988.211, 2) from dual;”得到结果为:-988.21
扩展资料:
四舍五入是一种精确度的计数保留法,与其他方法本质相同。
但特殊之处在于采用四舍五入,能使被保留部分的与实际值差值不超过最后一位数量级的二分之一,假如0~9等概率出现的话,对大量的被保留数据,这种保留法的误差总和是最小的。
这也是我们使用这种方法为基本保留法的原因。
参考资料:百度百科-Round函数 百度百科-四舍五入