1、ORA-12519:TNS:没有找到适用的服务处理程序
最近oracle10g频繁报出ORA-12519的错,查看数据库状态基本判定为oracle进程数不够导致报错。
最近oracle10g频繁报出ORA-12519的错,查看数据库状态基本判定为oracle进程数不够导致报错。
根据Oracle文档,SESSIONS和TRANSACTIONS的初始化参数应该源于PROCESSES参数,根据默认设置SESSIONS= PROCESSES * 1.1 + 5。oracle 10g默认session数为150,process数为170。
查看一下数据库现有的进程数,是否已经达到参数processes的大小。
1.select count(*) from v$process;取得数据库目前的进程数。
2.select value from v$parameter where name =‘processes’;取得进程数的上限。
3.select * from v$session;查看连接数。
3.select * from v$session;查看连接数。
SQL> show parameters sessions;
SQL> show parameters processes;
SQL> alter system set sessions=250scope=spfile;
SQL> alter system set processes=300scope=spfile;
SQL> create pfile from spfile;
重启数据库,就OK了
参考:
修改 Oracle 的process和Session
2、ORA-00942:表或试图不存在
SQL> conn hr/***
SQL> select username,sid,serial#,module,action from v$session;
select username,sid,serial#,module,action from v$session
ORA-00942: 表或视图不存在
解决:
sqlplus "sys/*** as sysdba"
SQL> grant select on gv$session to hr;
grant select on gv$session to hr
*
第 1 行出现错误:
ORA-02030: 只能从固定的表/视图查询
SQL> grant select on sys.v_$session to hr;
授权成功。
sqlplus "hr/***"
SQL> select username,sid,serial#,module,action from v$session;
USERNAME SID SERIAL# MODULE ACTION
------------------------------ ---------- ---------- ------------------------------------------------ --------------------------------
1 1
2 1
2、ORA-00942:表或试图不存在
SQL> conn hr/***
SQL> select username,sid,serial#,module,action from v$session;
select username,sid,serial#,module,action from v$session
ORA-00942: 表或视图不存在
解决:
sqlplus "sys/*** as sysdba"
SQL> grant select on gv$session to hr;
grant select on gv$session to hr
*
第 1 行出现错误:
ORA-02030: 只能从固定的表/视图查询
SQL> grant select on sys.v_$session to hr;
授权成功。
sqlplus "hr/***"
SQL> select username,sid,serial#,module,action from v$session;
USERNAME SID SERIAL# MODULE ACTION
------------------------------ ---------- ---------- ------------------------------------------------ --------------------------------
1 1
2 1
3、SSH命令行下登录Oracle
(1)管理员登录:sqlplus sys/system@eoastqdata as sysdba
(2)普通用户登录:sqlplus user/password@eoastqdata
4、Oracle特殊符号
(1)用于where比较条件的有:
等于:=、<、<=、>、>=、<>
包含:in、not in exists、not exists
范围:between...and、not between....and
匹配测试:like、not like
Null测试:is null、is not null
布尔链接:and、or、not
(2)通配符:
在where子句中,通配符可与like条件一起使用。在Oracle中:
%(百分号): 用来表示任意数量的字符,或者可能根本没有字符。
_(下划线): 表示确切的未知字符。
?(问号): 用来表示确切的未知字符。
#(井号): 用来表示确切的阿拉伯数字,0到9。
[a-d](方括号):用来表示字符范围,在这里是从a到d。
单引号('):在Oracle中,应该只使用单引号将文本和字符和日期括起来,不能使用引号(包括单双引号)将数字括起来。
双引号("):在Oracle中,单双引号含义不同。双引号被用来将包含特定字符或者空格的列别名括起来。双引号还被用来将文本放入日期格式。
撇号('):在Oracle中,撇号也可以写成彼此相邻的两个单引号。为了在供应商名字中间查找所有带撇号的供应商名字,可以这样编写代码:
select * from l_suppliers where supplier_name like '%''%'
&符号:在Oracle中,&符号常用来指出一个变量。例如,&fox是一个变量,稍微有点不同的一种&& fox。每当&fox出现在Oracle脚本中时,都会要求您为它提供一个值。而使用&&fox,您只需要在& &fox第一次出现时为它提供变量值。如果想将&符号作为普通的符号使用,则应该关闭这个特性。要想关闭这个特性,可以运行以下的命令: set define off ,这是一个SQLplus命令,不是一个SQL命令。SQLplus设置了SQL在Oracle中运行的环境。
双竖线(||):Oracle使用双竖线表示字符串连接函数。
星号(*):select *意味着选择所有的列,count(*)意味着计算所有的行,表示通配符时,表示0个或任意多个字符。
正斜杠(/):在Oracle中,用来终止SQL语句。更准确的说,是表示了“运行现在位于缓冲区的SQL代码”。正斜杠也用作分隔项。
或者这样解释,正斜杠就是让服务器执行前面所写的sql脚本。如果是普通的select语句,一个分号,就可以执行了。但是如果是存储过程,那么遇到分号,就不能马上执行了。这个时候,就需要通过斜杠(/)来执行。
单行注释:--
多行注释:/*......*/。
不等于:有多种表达方式:!=、^=、<>、not xxx=yyy、not(xxx=yyy)
3、执行sql脚本
通过PLSql客户端可以执行sql语句,但当sql语句过多时,客户端会死掉,这个时候我们就需要使用sql脚本,让oracle执行脚本。具体操作如下:
假如oracle数据库的SID为eoastqdata,用户名为eoastquser,密码为system,通过SSH登录一台应用服务器(前提是这台服务器能连接此数据库,即/usr/local/oracle/network/admin/tnsnames.ora文件中有此SID,且网络互通),把脚本文件放在应用服务器的某一目录下(比如/home/lxkj/oracledata/bas_balise_EOAS.sql),
(1)在命令行输入[lxkj@X3850-1 ~]$sqlplus eoastquser/system@eoastqdata;
回车执行后进入sql语句执行情景,在此情景下输入
(2)SQL>@/home/lxkj/oracledata/bas_balise_EOAS.sql;
即可执行脚本。
注意输入的命令后一定要有分号(;),而且每条sql语句的执行必须以分号结尾。
4、在SSH中进入执行sql语句情景后,执行sql语句时报如下异常:“Enter value for fq”,调查发现此sql语句是insert语句,values中包含的一个字符串字段的值为'Q&FQ',说明字符‘&’不能出现在值中。
5、oracle把一个临时表的内容搬运到正式表:insert into yourtable as (Select * from otherTable),前提:临时表和正式表的字段个数和类型必须完全一致。
(1)管理员登录:sqlplus sys/system@eoastqdata as sysdba
(2)普通用户登录:sqlplus user/password@eoastqdata
4、Oracle特殊符号
(1)用于where比较条件的有:
等于:=、<、<=、>、>=、<>
包含:in、not in exists、not exists
范围:between...and、not between....and
匹配测试:like、not like
Null测试:is null、is not null
布尔链接:and、or、not
(2)通配符:
在where子句中,通配符可与like条件一起使用。在Oracle中:
%(百分号): 用来表示任意数量的字符,或者可能根本没有字符。
_(下划线): 表示确切的未知字符。
?(问号): 用来表示确切的未知字符。
#(井号): 用来表示确切的阿拉伯数字,0到9。
[a-d](方括号):用来表示字符范围,在这里是从a到d。
单引号('):在Oracle中,应该只使用单引号将文本和字符和日期括起来,不能使用引号(包括单双引号)将数字括起来。
双引号("):在Oracle中,单双引号含义不同。双引号被用来将包含特定字符或者空格的列别名括起来。双引号还被用来将文本放入日期格式。
撇号('):在Oracle中,撇号也可以写成彼此相邻的两个单引号。为了在供应商名字中间查找所有带撇号的供应商名字,可以这样编写代码:
select * from l_suppliers where supplier_name like '%''%'
&符号:在Oracle中,&符号常用来指出一个变量。例如,&fox是一个变量,稍微有点不同的一种&& fox。每当&fox出现在Oracle脚本中时,都会要求您为它提供一个值。而使用&&fox,您只需要在& &fox第一次出现时为它提供变量值。如果想将&符号作为普通的符号使用,则应该关闭这个特性。要想关闭这个特性,可以运行以下的命令: set define off ,这是一个SQLplus命令,不是一个SQL命令。SQLplus设置了SQL在Oracle中运行的环境。
双竖线(||):Oracle使用双竖线表示字符串连接函数。
星号(*):select *意味着选择所有的列,count(*)意味着计算所有的行,表示通配符时,表示0个或任意多个字符。
正斜杠(/):在Oracle中,用来终止SQL语句。更准确的说,是表示了“运行现在位于缓冲区的SQL代码”。正斜杠也用作分隔项。
或者这样解释,正斜杠就是让服务器执行前面所写的sql脚本。如果是普通的select语句,一个分号,就可以执行了。但是如果是存储过程,那么遇到分号,就不能马上执行了。这个时候,就需要通过斜杠(/)来执行。
单行注释:--
多行注释:/*......*/。
不等于:有多种表达方式:!=、^=、<>、not xxx=yyy、not(xxx=yyy)
3、执行sql脚本
通过PLSql客户端可以执行sql语句,但当sql语句过多时,客户端会死掉,这个时候我们就需要使用sql脚本,让oracle执行脚本。具体操作如下:
假如oracle数据库的SID为eoastqdata,用户名为eoastquser,密码为system,通过SSH登录一台应用服务器(前提是这台服务器能连接此数据库,即/usr/local/oracle/network/admin/tnsnames.ora文件中有此SID,且网络互通),把脚本文件放在应用服务器的某一目录下(比如/home/lxkj/oracledata/bas_balise_EOAS.sql),
(1)在命令行输入[lxkj@X3850-1 ~]$sqlplus eoastquser/system@eoastqdata;
回车执行后进入sql语句执行情景,在此情景下输入
(2)SQL>@/home/lxkj/oracledata/bas_balise_EOAS.sql;
即可执行脚本。
注意输入的命令后一定要有分号(;),而且每条sql语句的执行必须以分号结尾。
4、在SSH中进入执行sql语句情景后,执行sql语句时报如下异常:“Enter value for fq”,调查发现此sql语句是insert语句,values中包含的一个字符串字段的值为'Q&FQ',说明字符‘&’不能出现在值中。
5、oracle把一个临时表的内容搬运到正式表:insert into yourtable as (Select * from otherTable),前提:临时表和正式表的字段个数和类型必须完全一致。