- 浏览: 99478 次
-
文章分类
最新评论
Oracle 基础FAQ
Oracle
2.1 oracle用户卸载时被占用,怎么找到是谁占用
主题:oracle用户卸载时被占用,怎么找到是谁(session)占用
在卸载oracle用户时,发现用户被占用,一般情况可以很顺利的解决:
查询某用户会话session
SQL> select sid,serial#,status,server from v$session where username='ENIPDBZQ';
SID SERIAL# STATUS SERVER
---------- ---------- -------- ---------
348 21909 INACTIVE DEDICATED
终止非激活状态的会话
SQL> alter system kill session '348,21909';
这样就可以将被占用的用户session强制终止,可以顺利的卸载掉用户。
往往还会遇到不一般的情况,当有进程重连时,你将当前的终止了,马上又出来新的会话,令人头疼:
这种情况就用追根溯源法:
查询oracle数据库的某oracle用户的会话信息,如会话发起主机,会话发起OS用户,进程名,状态,会话个数
select username,machine,osuser,program,status,count(machine)
from v$session where username='CBPDBZQ1'
group by username,machine,program,status,osuser
order by username,machine ;
查找oracle连接客户端,找到连接oracle用户的源头进程,将其干掉,oracle用户会话session占用自然解决
SQL> select username,machine,osuser,program,status,count(machine)
2 from v$session where username='CBPDBZQ1'
3 group by username,machine,program,status,osuser
4 order by username,machine ;
USERNAME
------------------------------
MACHINE
----------------------------------------------------------------
OSUSER PROGRAM
------------------------------ ------------------------------------------------
STATUS COUNT(MACHINE)
-------- --------------
CBPDBZQ1
KDJ28901A ----------进程所在主机
cbpzq---------会话发起的进程DBAgent@KDJ28901A
(TNS V1-V3) ------具体进程名
INACTIVE 6
USERNAME
------------------------------
MACHINE
----------------------------------------------------------------
OSUSER PROGRAM
------------------------------ ------------------------------------------------
STATUS COUNT(MACHINE)
-------- --------------
CBPDBZQ1
KDJ28901A
cbpzq RSIProcess@KDJ28901A (TNS V1-V3)
INACTIVE 1
USERNAME
------------------------------
MACHINE
----------------------------------------------------------------
OSUSER PROGRAM
------------------------------ ------------------------------------------------
STATUS COUNT(MACHINE)
-------- --------------
CBPDBZQ1
KDJ28901A
cbpzq SyncCache@KDJ28901A (TNS V1-V3)
INACTIVE 1
2.2 查看数据库端口号
查看数据库端口号:
在cbp中连接数据库 su – oracle
cd $ORACLE_HOME/network/admin vi tnsname.ora
2.3 远程登录数据库
远程登录数据库:sqlplus userdb/cbs/@TNS (sqlplus /用户名/密码@TNS)
2.4 数据库session被锁解决方法
如果对数据库进行了insert/update/delete操作有没有提交的话,过一段时间session会被锁
解锁:先查询v$locked_object表找到对应数据库用户的session_id,然后再查询v$session表找到更具体的信息,最后用alter system kill session语句解锁。
2.5 数据库用户被锁解决方法
以sqlplus / as sysdba 登录数据库
Select username,account_status from dba_users 看用户状态:open,locked
alter user username account unlock
2.6 普通用户如何登陆sys库
如何在linux的一个非oracle用户下,使用sys登陆呢?
就是使用如下命名登陆:sqlplus sys/syspasswd@sid as sysdba,其中syspasswd为sys用户的密码,sid为oracle的实例名
在oracle上需要做如下设置:
1、首先找到sqlnet.ora文件
在该文件中添加SQLNET.AUTHENTICATION_SERVICES=(ALL)
2、查看并修改oracle系统参数remote_login_passwordfile
在oracle下使用sqlplus / as sysdba登陆
然后执行:
show parameter remote_login_passwordfile 查看remote_login_passwordfile的值
如果remote_login_passwordfile的值不是EXCLUSIVE的话,需要修改remote_login_passwordfile的值为remote_login_passwordfile
修改方法如下:
alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;
3、查看oracle是否建立密码文件
在oracle下使用sqlplus / as sysdba登陆
然后执行:
select * from v$pwfile_users;
如果显示为空,则需要建立密码文件
4、如何建立密码文件
不需要登陆sysdba,直接在oracle的家目录下执行如下命令:
orapwd file="/oracle/app/product/11g/db/orapasswd/orapwsysdb" password=sys entries=10;
其中file的路径和文件需要大家自己指定即可,其中密码文件orapasswdysdb的组成必须为:orapasswd+SID,其中sysdba就是SID;password为sys用户的登陆鉴权密码
5、修改sys用户的密码为sys
在oracle用户下使用sqlplus / as sysdba登陆
然后执行:
alter user sys identified by sys;
6、最后一步,重启数据库
使用sqlplus / as sysdba登陆
然后执行如下两条命令:
shutdown immediate;
startup;
这样我们就可以在非oracle用户下,使用sqlplus sys/syspasswd@sid as sysdba登陆数据库系统用户了。
2.7 oracle用户下存在oracle${ORACLE_SID}进程CPU占用率100%现象
oracle用户下存在oracle${ORACLE_SID}进程CPU占用率100%
定位过程:
第一步,通过top命令,找到该进程的PID(本例中为7944):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7944 oracle 25 0 2078m 581m 223m R 100 1.2 31:53.85 oracle
第二步,以oracle用户执行sqlplus / as sysdba,查询该PID对应的sql信息:
SQL> select addr from v$process where spid = 7944;
ADDR
----------------
00000000BF52A228
SQL> select sql_id from v$session where paddr ='00000000BF52A228';
SQL_ID
-------------
fyk8b9986ntk7
SQL> select sql_text from v$sql where sql_id = 'fyk8b9986ntk7';
SQL_TEXT
--------------------------------------------------------------------------------
SELECT EXECUTION_ID, STATUS, STATUS_DETAIL FROM MGMT_JOB_EXEC_SUMMARY WHERE JOB_
ID = :B3 AND TARGET_LIST_INDEX = :B2 AND EXPECTED_START_TIME = :B1
第三步,找到了占CPU为100%的sql内容,通过网上查询得知,此为oracle的一个bug:
HIGH CPU UTILIZATION AFTER INSTALLING ORACLE 11G [ID 734104.1]
修改时间 03-JAN-2011类型 PROBLEM状态
PUBLISHED
In this Document
Symptoms
Cause
Solution
References
Applies to:
Enterprise Manager Grid Control - Version: 11.1.0.6 to 11.2.0.2 - Release: 11.1 to 11.2
Information in this document applies to any platform.
Symptoms
Installed oracle 11g server that when I start the enterprise manager console using the command emctl start dbconsole. A new user shadow process start to request for a very intensive cpu usage it takes 100% of CPU.
Cause
Found that the query it's been executed by this shadow process is:
SELECT EXECUTION_ID, STATUS, STATUS_DETAIL FROM MGMT_JOB_EXEC_SUMMARY
WHERE JOB_ID = :B3 AND
TARGET_LIST_INDEX = :B2 AND EXPE
CTED_START_TIME = :B1
This query is also shown at the dbconsole as the most intensive cpu usage query.
There is a << Bug 7182962 >> being worked on this.The bug7182962is cLOS/ed as duplicate of internal unpublished bug7119851.
Solution
Following patch is available for 11.1.0.7 database control:
Patch 7119851 -SLOW DB STARTUP PERFORMANCE DUE TO SKIP QUERY RUN BY SYSMAN
Workaround:
1. Stop the dbconsole
./emctl stop dbconsole
2. Login as a sysman user and restart the provisioning daemon by running the below procedures:
SQL> execute MGMT_PAF_UTL.STOP_DAEMON
SQL> execute MGMT_PAF_UTL.START_DAEMON
3. start the dbconsole
./emctl start dbconsole
注意:em系统是oracle的一个企业管理界面,我们是用不到的,因此,执行了solution中的“emctl stop dbconsole ”和“execute MGMT_PAF_UTL.STOP_DAEMON ”步骤,而不执行剩下的启动步骤。
至此,问题解决。
2.8 数据文件误删除了解决方法
数据文件误删了,解决方法:
1)startup mount
归档模式下
alter database datafile 'D:/datafile/test.dbf' offline
非归档模式下
alter database datafile 'D:/datafile/test.dbf' offline drop
2) alter database open
2.9 调整oracle内核参数
参数 |
建议值 |
文件 |
semmsl |
250 |
/proc/sys/kernel/sem |
semmns |
32000 |
|
semopm |
100 |
|
semmni |
128 |
|
shmmax |
1/2的内存大小 |
/proc/sys/kernel/shmmax |
shmmni |
4096 |
/proc/sys/kernel/shmmni |
shmall |
2097152 |
/proc/sys/kernel/shmall |
file-max |
512 * PROCESSES |
/proc/sys/fs/file-max |
ip_local_port_range |
1024~65000 |
/proc/sys/net/ipv4/ip_local_port_range |
rmem_default |
262144 |
/proc/sys/net/core/rmem_default |
rmem_max |
4194304 |
/proc/sys/net/core/rmem_max |
wmem_default |
262144 |
/proc/sys/net/core/wmem_default |
wmem_max |
262144 |
/proc/sys/net/core/wmem_max |
操作步骤
以root用户登录。
查看semmsl、semmns、semopm和semmni的值。
# /sbin/sysctl -a | grep sem
系统显示如下信息:
kernel.sem = 250 32000 100 128
查看shmall、shmmax和shmmni的值。
# /sbin/sysctl -a | grep shm
系统显示如下信息:
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 2147483648
查看file-max的值。
# /sbin/sysctl -a | grep file-max
系统显示如下信息:
fs.file-max = 65536
查看ip_local_port_range的值。
# /sbin/sysctl -a | grep ip_local_port_range
系统显示如下信息:
net.ipv4.ip_local_port_range = 1024 65000
查看rmem_default、rmem_max、wmem_default和wmem_max的值。
# /sbin/sysctl -a | grep net.core.rmem
# /sbin/sysctl -a | grep net.core.wmem
系统显示如下信息:
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem-default = 262144
----结束
后续处理
如果系统内核参数值不正确,修改内核参数值。
以root用户登录。
修改系统内核参数。
# vi /etc/sysctl.conf
/etc/sysctl.conf的内容如下:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range =1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
同步系统内核参数到内存中,使修改生效。
# sysctl -p
以上系统内核参数的设置仅在当前有效,要使系统重启后保留设置。则需要使系统启动时优先读取/etc/sysctl.conf文件。
# /sbin/chkconfig boot.sysctl on
----结束
2.10 新建ORACLE用户时如果密码校验需要复杂密码
新建ORACLE用户时报如下错误:
SQL> create user zbacdb identified by zbacdb;
create user zbacdb identified by zbacdb
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20001: Password length less than 8
解决方法:
sqlplus / as sysdba
alter profile default limit PASSWORD_VERIFY_FUNCTION null;
2.11 Undo表空间无法自动释放,导致数据库更新失败
修改方法:
Ø 连接数据库:
oracle@mdsp01:~> sqlplus "/as sysdba"
Ø 检查数据库是否已经配置
SQL> show parameter _smu_debug_mode;
SQL> show parameter _undo_autotune;
Ø 修改配置
SQL> alter system set "_smu_debug_mode"=33554432;
SQL> alter system set "_undo_autotune"=false;
Ø 检查数据库是否已经配置
SQL> show parameter _smu_debug_mode;
SQL> show parameter _undo_autotune;
执行完成后可以使用show parameter +参数名查看是否修改成功
1)
Set _smu_debug_mode=33554432
2) Set_undo_autotune = false
2.12 怎么查看Oracle字符集是否正确
SQL> select * from nls_database_parameters where parameter=upper('NLS_CHARACTERSET');
PARAMETER------------------------------VALUE--------------------------------------------------------------------------------NLS_CHARACTERSETAL32UTF8
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')----------------------------------------------------AMERICAN_AMERICA.AL32UTF8
说明:
执行上面两个命令,数据库字符集的取值都为“AL32UTF8”,表明数据库字符集设置正确。
如果数据库字符集检查不正确,请重新安装数据库。
2.13 导入数据库用户的时候报错rollback segment已经超过最大扩展了,怎么解决
报错如下:
IMP-00003: ORACLE error 604 encountered
ORA-00604: error occurred at recursive SQL level 1
ORA-01628: max # extents (32765) reached for rollback segment_SYSSMU7_1303807983$
可以使用如下命令创建:
CREATE PUBLIC ROLLBACK SEGMENT R01 TABLESPACE RBS STORAGE (initial 10M NEXT 5M OPTIMAL 20M MINEXTENTS 3 MAXEXTENTS 100);
也可以使用命令使segment变成不受限制的大小:
alter rollback segment "_SYSSMU32$" storage(maxextents unlimited);
2.14 怎么迁移oracle表空间数据的路径?how to change data file path?
我想把数据库文件迁移一下;
比如把/home/oracle/cbp_workdbs1.dbf
迁移到/oracle/dbs/cbp_workdbs1.dbf
有没有什么方法?
方法:
showdown immediate;
startup mount;
alter database rename file '/home/oracle/cbp_workdbs1.dbf' to '/oracle/dbs/cbp_workdbs1.dbf'
alter database open;
select name from v$datafile;
要保证/oracle目录下空间足够大
2.15 怎么恢复oracle数据库中的数据
数据库用户中使用如下命令:
flashback table VFIELD_DICT_EXT_S to timestamp to_timestamp('2011-09-08 19:20:00','yyyy-mm-dd hh24:mi:ss');
将VFIELD_DICT_EXT_S表数据恢复到2011年9月8日19:20:00
alter table TS_DBFIELDCATALOG enable row movement;
flashback table TS_DBFIELDCATALOG to timestamp systimestamp - interval '5' hour;
2.16 怎么解决锁表
select t1.SID,t1.SERIAL#,t1.USERNAME from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID;
查看锁表的用户的session,
然后用:
alter system kill session ‘SID,SERIAL’;
select object_id,session_id,locked_mode
from v$locked_object;
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
2.16 数据库被锁,使用plsql解锁
如果报Re-connecting database(hycdrdb) failed: ORA-28000: the account is locked数据库被锁,可能是oracle数据库密码被修改了,但是配置文件中没有修改,导致数据库连接不上,解决方法:去后台把密码修改掉。然后去把数据库解锁:
以system用户登录plsql;密码也是system,如果密码不对,去后台oracle修改。
右键点击被锁的数据库:
弹出来的对话框中,如果Account locked前面被钩了,说明被锁了,把钩去掉即可。
2.16 修改最大连接数
alter system set processes=500 scope=spfile;
2.16 oracle的sys用户默认密码
oracle@z106735C4c16g150g33:~> sqlplus sys as sysdba;
SQL*Plus: Release 11.1.0.7.0 - Production on Mon Jul 16 18:08:38 2012
Copyright (c) 1982, 2008, Oracle. All rights reserved.
Enter password: change_on_install
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
或者直接:
sqlplus sys/change_on_install as sysdba
2.16 服务器oracle占用内存太大
SQL>alter system set MEMORY_TARGET=2g scope=spfile;
SQL> alter system set MEMORY_MAX_TARGET=2g scope=spfile;
SQL> alter system set SGA_MAX_SIZE=2g scope=spfile;
SQL>alter system set sga_target=2000m scope=spfile;
oracle占内存太大,通过如下方法进行调整,重启oracle之后即可
2.16 oracle监听无法停止
停止监听lsnrctl stop时报如下错误:
TNS-01189: The listener could not authenticate the user错误
解决方法:
用TNS-01189作为关键字搜索,搜到了一篇文章[ID 285439.1],从各方面的信息来看,估计就是这个原因了。Oracle的解释是该错误是由于LSNRCTL与tnslsnr进程通信验证失败造成的,但是导致错误的原因未知(汗~~,看来又是个BUG了)。受影响的版本从10.1.0.2到11.2.0.2。当然Oracle也提供了解决方案,就是在listener.ora加入
(ADDRESS=(PROTOCOL=IPC)(KEY=ANYTHING))
但是要确保该行是在ADDRESS LIST的第一行。
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = ocg1011)(PORT = 1521))
)
)
红色为加入的
2.16 oracle占内存太大,通过如下方法进行调整
SQL>alter system set MEMORY_TARGET=2g scope=spfile;
SQL> alter system set MEMORY_MAX_TARGET=2g scope=spfile;
SQL> alter system set SGA_MAX_SIZE=2g scope=spfile;
SQL>alter system set sga_target=2000m scope=spfile;
oracle占内存太大,通过如下方法进行调整,重启oracle之后即可
2.16 执行sqlplus,lsnrctl报命令找不到
$ lsnrctl start
ksh: lsnrctl: not found.
应该是环境变量设置不对,找到命令的路径,然后跟环境变量对比一下,找出差异,修改下就好了
find . -name lsnrctl
还有另外一个可能,由于是新服务器,每次首次登陆都需要先source一下.profile才可以用,
解决方法:
在/etc/profile中添加:source $HOME/.profile -----$HOME是oracle用户的家目录,例如oralce用户家目录是/opt/oracle
vi /etc/profile
添加:
source /opt/oracle/.profile
相关推荐
1. **Oracle数据库基础知识**:Oracle数据库系统是一个多用户、支持网络环境的关系数据库管理系统,它使用SQL语言进行数据查询和管理。其核心组件包括数据块、表空间、段、区、表、索引等。 2. **cracle工具**:...
8. **数据库安全**:权限管理、角色分配、审计功能和加密技术是Oracle数据库安全的基础,确保数据安全不被未经授权的访问。 9. **集群技术**:Oracle RAC(Real Application Clusters)允许多个节点共享同一数据库...
这份"Oracle必备FAQ中文手册"涵盖了Oracle数据库的关键领域,包括PL/SQL编程、架构体系、备份与恢复、性能调整、网络配置以及操作系统相关的知识。下面将详细阐述这些领域的关键知识点。 1. **PL/SQL**: PL/SQL是...
"ORACLE_FAQ(2).rar_oracle"这个压缩包文件显然是针对Oracle数据库使用者提供的一份常见问题解答集,特别是"复件 ORACLE应用常见傻瓜问题1000问(之二).doc"文档,可能包含了大量实用的解决策略和技巧。 首先,...
1. **Oracle基础知识**:文件涵盖Oracle数据库的基本概念,如数据模型、数据库架构、表空间、段、对象权限等。对于初学者来说,这是理解Oracle数据库结构和操作的基础。 2. **SQL语言**:Oracle FAQ中可能包含了SQL...
1. **Oracle基础知识**:Oracle数据库系统由多个组件构成,包括数据库服务器、客户端工具、SQL*Plus、PL/SQL等。理解这些组件的作用以及它们如何协同工作是掌握Oracle的基础。 2. **SQL语言**:Oracle数据库使用...
Oracle FAQ 是一个针对Oracle数据库系统常见问题与解答的资源集合,旨在帮助用户更好地理解和使用Oracle。这个压缩包中的"ORACLE+FAQ.chm"文件很可能是一个CHM(MicrosoftCompiled HTML Help)格式的文档,通常包含...
### Oracle DBA FAQ #### 一、Oracle 是什么? Oracle 是一家公司,也是一款数据库服务器软件。作为数据库服务器,Oracle 能够以高度结构化的方式管理数据,允许用户在多用户环境中存储和检索相关数据,使得多个...
理解SQL与PL/SQL的结合使用,是高效开发Oracle应用的基础。 二、Oracle构架体系 Oracle数据库系统由多个组件构成,包括服务器进程、客户端进程、内存结构和磁盘结构。服务器进程如数据库实例(Database Instance)...
### ORACLE之FAQ -- 性能调整 #### 一、性能调整基础知识 在Oracle数据库管理过程中,性能调整是一项至关重要的工作。它不仅涉及到SQL语句的优化,还包括系统配置、索引策略、统计信息收集等多个方面。下面将详细...
### ORACLE之FAQ -- 备份与恢复:深入解析 #### 知识点一:ORACLE备份模式切换 在Oracle数据库中,切换归档模式(Archivelog Mode)与非归档模式(NoArchivelog Mode)是进行备份与恢复的基础步骤之一。归档模式下...
### Oracle之FAQ知识点详解 #### 一、SQL与PL/SQL基础 **1. 使用通配符进行查询** - **问题**: 如何在Oracle中使用通配符`%`和`_`进行模糊查询? - **解答**: 在Oracle中,可以使用`LIKE`操作符配合通配符`%`...
Oracle是世界上最广泛使用的数据库...以上只是Oracle数据库基础知识的一部分,Oracle还包含了更深入的特性,如索引、触发器、游标、存储过程、物化视图、数据库复制、数据库安全等,学习和掌握Oracle需要时间和实践。
本压缩包"oracle开发过程收集_rar"包含了开发者在实际工作中可能遇到的问题记录、Oracle的基础知识,以及一些实用资源,如"OracleFAQ.txt",它可能是从公司内部QQ群共享的宝贵经验。 首先,让我们深入了解一下...
10. **ORACLE技术中国用户讨论组 - Oracle结构与管理 - ORACLE之FAQ,将在不断更新中 - powered by ORACLE USER GROUP.htm**:这是一个社区论坛的网页存档,包含了Oracle用户的讨论和问题解答,可以了解到最新的技术...
本文将深入探讨“Oracle相关资料”中所提及的两个关键知识点:常见问题解答(FAQ)和初学者入门。 首先,我们来看“Oracle_faq.chm”。这个文件通常是一个帮助文档,包含了一系列关于Oracle数据库系统的常见问题...
- **内容覆盖**:这个网站不仅有Oracle数据库的基础知识介绍,还有高级查询技巧、性能优化等方面的深入讨论。 #### 知识点4:DBA Zone - **DBA Zone**:[www.dbazine.com](http://www.dbazine.com) 是另一个专注于...
了解Oracle数据库的架构是学习Oracle数据库的基础。 Sqlplus Sqlplus是Oracle数据库的命令行工具,通过Sqlplus可以执行SQL语句、PL/SQL程序块、运算符、函数等。Sqlplus是Oracle数据库管理和开发的基本工具。 ...
1. **Oracle基础工具简介**: Oracle提供了一系列基础管理工具,如SQL*Plus、企业管理器(EM)、数据泵(Data Pump)、SQL Developer等。SQL*Plus是最基础的命令行工具,用于执行SQL语句和PL/SQL块,进行数据查询、...