oracle系统表v$session、v$sql,v$sqlarea字段中文说明

合集下载

[专题]Oraclesession表和process表字段描述

[专题]Oraclesession表和process表字段描述

[专题]Oracle session表和process表字段描述Oracle session表和process表字段描述Oracle 动态性能表 v$session & v$process1、v$sessionSADDR: session addressSID: session identifier,常用于连接其它列。

SERIAL#: sid 会重用,但是同一个sid被重用时,serial#会增加,不会重复。

AUDSID: audit session id。

可以通过audsid查询当前session的sid。

select sid from v$session where audsid=userenv('sessionid');PADDR: process address,关联v$process的addr字段,可以通过这个字段查处当前session对应操作系统的那个进程的id。

USER#: session's user id。

等于dba_users中的user_id。

Oracle内部进程的user#为0。

USERNAME: session's username。

等于dba_users中的username。

Oracle内部进程的username为空。

COMMAND: session正在执行的SQL Id。

1代表create table,3代表select。

TADDR: 当前的transaction address。

可以用来关联v$transaction的addr字段。

LOCKWAIT: 可以通过这个字段查询出当前正在等待的锁的相关信息。

sid & lockwait与v$lock中的sid & kaddr相对应。

STATUS: 用来判断session状态。

Active:正执行SQL语句。

Inactive:等待操作。

Killed:被标注为删除。

SERVER: server type (dedicated or shared)SCHEMA#: schema user id。

oracle中文乱码解决方法

oracle中文乱码解决方法

oracle中文乱码解决方法oracle中文乱码解决方法1. Oracle数据库设置数据库参数NLS_LANG为使Oracle数据库中存储与显示中文时无乱码问题,可以更改Oracle数据库的数据库参数NLS_LANG,更改该参数为中文字符集,如:simplified Chinese_China.ZHS16GBK,此参数设置会对数据库中的所有字符数据有效。

2. Oracle数据库中多个字符集混用的解决方案一般系统及数据库常用的字符集可能存在多样性,例如全角字符、英文字母、空格等,而Oracle数据库支持了多个字符集,用户可以在数据库中多个字符集混合使用。

例如,用UTF8字符集对中文、英文、全角字符编码;用UTF16字符集对Unicode字符编码;用GBK/GB2312字符集对中文字符编码。

3. 注意SQL语句及字符集的指定为了防止运行SQL语句时出现乱码,应当在SQL语句中指定运行的字符集,如:ALTER SESSION SET NLS_LANGUAGE=AMERICAN_AMERICA.AL32UTF84. 客户端应用指定编码格式对于客户端应用,如sqlplus、PL/SQL开发工具,需要在连接之前指定客户端编码格式以确保传输与显示时无乱码问题,这种解决方案比较常用,在客户端应用中设置NLS_LANG参数,让客户端的中文字符使用Unicode,例如: NLS_LANG = SIMPLIFIED CHINESE_CHINA.UTF8 即可成功连接Oracle数据库解决乱码问题。

5. 数据导入导出中文处理从其他数据库导入Oracle数据库时,应从源数据库中查找出字段编码,在导入时将字段编码转换成Oracle数据库中的字符编码,可以增加数据库中文字符的正常显示。

从Oracle数据库导出数据至其他数据库,应将Oracle 数据库中的字符编码转换成目标数据库的编码方式,以保证导出数据无乱码状况。

6. 中文乱码的原因分析中文乱码的常见原因之一是程序的编码格式未正确设置,将GBK/GB2312等字符集与UTF-8 等Unicode字符集混用,也会出现中文乱码的情况。

Oracle查看执行过的SQL

Oracle查看执行过的SQL

Oracle查看执⾏过的SQLORACLE中可以通过v$session表查看当前有效的session信息,并且可以通过v$session的sql_id或sql_address通过关联查询v$sql查看当前正在执⾏的sql语句;如果想查看session近期执⾏的sql语句,可以通过v$active_session_history表中的sql_id查看近期历史执⾏的sql语句,要求数据库的liberary没有被fresh。

1. SELECT b.sql_text, --content of SQL2. a.machine, --which machine run this code3. ername, a.module, -- the method to run this SQL4. c.sofar / totalwork * 100, --conplete percent5. c.elapsed_seconds, --run time6. c.time_remaining --remain to run time7. FROM v$session a, v$sqlarea b, v$session_longops c8. WHERE a.sql_hash_value = b.hash_value(+) AND a.SID = c.SID(+)9. AND a.serial# = c.serial#(+)10. --AND a.sid=139Oracle 最近执⾏过的sql语句:1. SELECT sql_text, last_load_time2. FROM v$sql3. WHERE last_load_time IS NOT NULL4. ORDER BY last_load_time DESC其它,SELECT sql_text,last_load_time FROM v$sql order by last_load_time desc;SELECT sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text like 'select%' ORDER BY last_load_time DESC;SELECT sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text like 'update%' ORDER BY last_load_time DESC;SELECT sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and last_load_time like' 14-06-09%' ORDER BY last_load_time DESC;监控concurrent 正在执⾏的sql1. SELECT a.sid, a.serial#, b.sql_text2. FROM v$session a, v$sqltext b3. WHERE a.sql_address = b.address4. --AND a.sid = <...>5. ORDER BY b.piece正在执⾏的1. SELECT ername, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT2. FROM v$session a, v$sqlarea b3. where a.sql_address = b.address执⾏过的1. SELECT b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXT2. FROM v$sqlarea b3. WHERE b.FIRST_LOAD_TIME between '2009-10-15/09:24:47' and4. '2009-10-15/09:24:47' order by b.FIRST_LOAD_TIME(此⽅法好处可以查看某⼀时间段执⾏过的sql,并且 SQL_FULLTEXT 包含了完整的 sql 语句)其他1. SELECT OSUSER,PROGRAM,USERNAME,SCHEMANAME,B.Cpu_Time,STATUS,B.SQL_TEXT2. FROM V$SESSION A LEFT JOIN V$SQL B ON A.SQL_ADDRESS=B.ADDRESS AND A.SQL_HASH_VALUE=B.HASH_VALUE ORDER BY b.cpu_time desc1. SELECT address, sql_text, piece2. FROM v$session, v$sqltext3. WHERE address = sql_address4. -- and machine = < you machine name >5. ORDER BY address, piece查找前⼗条性能差的sql1. SELECT * FROM (SELECT PARSING_USER_ID,EXECUTIONS,SORTS,2. COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea3. ORDER BY disk_reads DESC )WHERE ROWNUM<10 ;查看占io较⼤的正在运⾏的session1. SELECT se.sid,se.serial#,pr.SPID,ername,se.status,2. se.terminal,se.program,se.MODULE,se.sql_address,st.event,st.3. p1text,si.physical_reads,4. si.block_changes FROM v$session se,v$session_wait st,5. v$sess_io si,v$process pr WHERE st.sid=se.sid AND st.6. sid=si.sid AND se.PADDR=pr.ADDR AND se.sid>6 AND st.7. wait_time=0 AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC 以sysdba登录sqlplus / as sysdba;执⾏如下sql查看最近3天执⾏的delete和truncate操作SELECT ername,a.program,b.sql_text,mand_type,a.sample_timeFROM dba_hist_active_sess_history aJOIN dba_hist_sqltext bON a.sql_id = b.sql_idJOIN dba_users cON er_id = er_idWHERE a.sample_time BETWEEN SYSDATE - 3 AND SYSDATEAND mand_type IN (7, 85)ORDER BY a.sample_time DESC;搜出结果还算有⽤,虽然都是业务删除,记录下--查询Oracle正在执⾏的sql语句及执⾏该语句的⽤户SELECT b.sid oracleID,ername 登录Oracle⽤户名,b.serial#,spid 操作系统ID,paddr,sql_text 正在执⾏的SQL,b.machine 计算机名FROM v$process a, v$session b, v$sqlarea cWHERE a.addr = b.paddrAND b.sql_hash_value = c.hash_value--查看正在执⾏sql的发起者的发放程序SELECT OSUSER 电脑登录⾝份,PROGRAM 发起请求的程序,USERNAME 登录系统的⽤户名,SCHEMANAME,B.Cpu_Time 花费cpu的时间,STATUS,B.SQL_TEXT 执⾏的sqlFROM V$SESSION ALEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESSAND A.SQL_HASH_VALUE = B.HASH_VALUEORDER BY b.cpu_time DESC--查出oracle当前的被锁对象SELECT l.session_id sid,s.serial#,l.locked_mode 锁模式,l.oracle_username 登录⽤户,l.os_user_name 登录机器⽤户名,s.machine 机器名,s.terminal 终端⽤户名,o.object_name 被锁对象名,s.logon_time 登录数据库时间FROM v$locked_object l, all_objects o, v$session s WHERE l.object_id = o.object_idAND l.session_id = s.sidORDER BY sid, s.serial#;--kill掉当前的锁对象可以为alter system kill session 'sid, s.serial#‘;。

Oraclev_$和v$的解释

Oraclev_$和v$的解释

Oraclev_$和v$的解释以v_$mystat和v$mystat具体说明grant语句中使⽤的v_$mystat和test⽤户访问的v$mystat不⼀样这⾥说⼀下 v$mystat 和 v_$mystat 的区别初始状态下SQL> conn test/testConnected.SQL>select sid from v$mystat where rownum=1;select sid from v$mystat where rownum=1*ERROR at line 1:ORA-00942: table or view does not exist没有赋权限的情况下,提⽰访问的表或者视图不存在,当sys⽤户给test⽤户授权后SQL> conn /as sysdbaConnected.SQL>grant select on v_$mystat to test;Grant succeeded.SQL> conn test/testConnected.SQL>select sid from v$mystat where rownum=1;SID----------15test⽤户就可以访问了,⼤家注意到上⾯两个语句中执⾏的对象并不⼀样,要访问的是v$mystat,⽽授权的是v_$mystat,如果我们直接给v$mystat授权SQL>grant select on v$mystat to test;grant select on v$mystat to test*ERROR at line 1:ORA-02030: can only select from fixed tables/views说明这⾥授权的v$mystat不是固有视图,不能直接授权,实际这⾥test访问的v$mystat是⼀个同义词,sys不能给同义词授权,只能授权给固定的表或视图,同义词在Oracle中可以理解为⼀个对象的别名,有私有和共⽤之分,每个⽤户都可以给⾃⼰的对象创建⾃⼰的同义词,这样创建的同义词只能⾃⼰使⽤。

oracle v$license中文说明

oracle v$license中文说明

Oracle是一家全球领先的企业级数据库公司,其产品占据了大量企业的核心业务系统。

在使用Oracle数据库时,许多用户都会遇到V$LICENSE视图,该视图提供了关于Oracle软件许可的详细信息。

本文将对V$LICENSE视图进行解释,并介绍其相关内容和用途。

1. V$LICENSE视图的作用V$LICENSE视图是Oracle数据库中的一个动态视图,它存储了当前数据库实例的许可信息。

通过查询V$LICENSE视图,用户可以了解当前数据库所使用的Oracle软件的许可类型、版本和许可数量等详细信息。

这对于数据库管理员和许可管理人员来说非常有用,他们可以通过该视图对数据库的许可情况进行监控和管理。

2. V$LICENSE视图的列信息V$LICENSE视图包含了一些列信息,这些列主要用于描述当前数据库实例的许可情况。

以下是V$LICENSE视图的一些常见列信息及其含义:- LICENSE_ID:许可ID,用于标识Oracle软件的许可。

- PRODUCT:许可的产品名称,例如Enterprise Edition、Standard Edition等。

- VERSION:许可的版本号,例如11g、12c、19c等。

- RAC:是否允许使用Real Application Clusters,是一个布尔值。

- RAC_SERVICES:允许使用的Real Application Clusters服务数量。

- RVU:用于IBM Power Systems服务器的许可单位。

- CON_ID:容器ID,用于多租户数据库的许可管理。

3. 如何查询V$LICENSE视图要查询V$LICENSE视图,用户需要连接到Oracle数据库,并以合适的权限登入。

然后使用SQL语句即可查询相应的许可信息。

例如:```sqlSELECT LICENSE_ID, PRODUCT, VERSION, RAC, RAC_SERVICESFROM V$LICENSE;```通过以上的SQL语句,用户可以获取当前数据库实例的许可信息,并进行相应的分析和管理。

oracle v$sql说明

oracle v$sql说明

oracle v$sql说明
Oracle V$SQL是一个动态视图,用于提供有关正在Oracle数据库中执行的SQL语句的信息。

它包含了已经解析但尚未执行的SQL语句的信息,包括SQL文本、执行计划、绑定变量和其他相关信息。

通过查询V$SQL视图,可以了解当前正在执行的SQL语句的情况,有助于性能调优和故障排除。

V$SQL视图中的一些重要列包括SQL_ID(SQL语句的唯一标识符)、SQL_TEXT(SQL语句的文本)、EXECUTIONS(SQL语句执行的次数)、PARSE_CALLS(SQL语句解析的次数)、BUFFER_GETS(从数据库缓存中获取的逻辑读取次数)、ROWS_PROCESSED(SQL语句处理的行数)等。

通过这些列的信息,可以分析SQL语句的执行情况和性能表现。

另外,V$SQL视图还可以与其他动态性能视图结合使用,如
V$SESSION、V$SQL_PLAN等,以获取更全面的SQL执行信息。

通过监视V$SQL视图,可以发现潜在的性能问题,优化SQL语句的执行计划,提高数据库的性能和稳定性。

总之,Oracle V$SQL视图提供了关于数据库中正在执行的SQL
语句的详细信息,对于数据库管理员和开发人员来说是非常有用的工具,可以帮助他们监控和优化数据库性能。

oracle中文乱码解决方法

oracle中文乱码解决方法

oracle中文乱码解决方法
oracle中文乱码解决方法
Oracle中文乱码解决方法
Oracle是一款非常流行的数据库管理系统,但是它有一个比较烦人的问题,就是中文乱码的问题,很多用户反映在使用Oracle时会遇到中文乱码,这让不少用户感到很恼火。

那么,Oracle中文乱码应该如何解决呢?
我们必须确定乱码的原因。

通常,中文乱码的原因有三种:第一种是Oracle数据库编码和程序编码不一致;第二种是Oracle数据库字符集不支持中文;第三种是Oracle数据库表字段设置不正确。

当我们确定了乱码的原因之后,就可以根据具体问题进行解决。

如果是数据库编码和程序编码不一致的问题,我们可以在Oracle数据库中指定编码,这样就可以解决乱码问题;如果是Oracle数据库字符集不支持中文,我们可以在Oracle数据库中添加支持中文的字符集,以解决乱码问题;如果是Oracle数据库表字段设置不正确,我们可以修改表字段的编码,以解决乱码问题。

解决Oracle中文乱码的方法有很多,但是要恰当地识别出乱码的原因,并采取相应的措施,才能有效地解决乱码问题。

因此,当我们遇到Oracle中文乱码问题时,要认真检查,找出乱码的原因,并采取相应措施,解决Oracle中文乱码问题。

Oracle数据库工具中文显示乱码问题的解决

Oracle数据库工具中文显示乱码问题的解决

Oracle 数据库工具中文显示乱码问题的解决Oracle客户端查询工具有时会有查处的结果为中文时不能正常显示,要么为乱码,要么为问号,plsql出现这种问题,以为是版本造成的,用了老的和最新的还是一样,换了另外的数据库工具也一样,但注意一点,数据其实是没有问题的,取出来显示是正常的中文,只是在工具里显示的是问号。

其实问题的原理很简单,就是字符集设置不正确造成的,但如此简单的原理在解决的过程中却会遇到很多麻烦,下面结合我遇到和解决的过程,给朋友们一点思路,说不定你们跟我的问题一样,通过这篇文章不用再折腾了,很快搞定,感觉飘飘……首先讲讲字符集的知识,Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。

ORACLE支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。

它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

影响oracle数据库字符集最重要的参数是NLS_LANG参数。

它的格式如下:NLS_LANG = language_territory.charset它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。

其中:Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。

如:AMERICAN _AMERICA. ZHS16GBK 。

从NLS_LANG 的组成我们可以看出,真正影响数据库字符集的其实是第三部分。

所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

如何查询Oracle的字符集,很多人都碰到过因为字符集不同而使数据导入失败的情况。

这涉及三方面的字符集,一是oracel server 端的字符集,二是oracle client 端的字符集;三是dmp文件的字符集。

在做数据导入的时候,需要这三个字符集都一致才能正确导入。

oracle V$SQLAREA 详解

oracle V$SQLAREA 详解
分享:
-------------------------------
v$sql、v$sqlarea来自、v$sqltext 这三个视图都可以用于查询共享池中已经解析过的SQL语句及其相关信息。
V$SQL中列出了共享SQL区中所有语句的信息,它不包含GROUP BY字句,并且为每一条SQL语句中单独存放一条记录;
EXECUTIONS NUMBER 所有子游标的执行这条语句次数。
USERS_EXECUTING NUMBER 通过子游标执行这条语句的用户数。
LOADS NUMBER 语句被载入和重载入的次数
FIRST_LOAD_TIME VARCHAR2(19) 语句被第一次载入的时间戳。
MODULE VARCHAR2(64) 在第一次解析这条语句是通过调用DBMS_APPLICATION_INFO.SET_MODULE设置的模块名称。
MODULE_HASH NUMBER 模块的Hash值
ACTION VARCHAR2(64) 在第一次解析这条语句是通过调用DBMS_APPLICATION_INFO.SET_ACTION设置的动作名称。
PARSING_SCHEMA_ID NUMBER 第一次解析这条语句所用的schema的ID。
KEPT_VERSIONS NUMBER 所有被DBMS_SHARED_POOL包标识为保持(Keep)状态的子游标数。
ADDRESS RAW(4 | 8) 指向语句的地址
HASH_VALUE NUMBER 这条语句在library cache中hash值。
V$SQLAREA中一条记录显示了一条共享SQL区中的统计信息。它提供了有在内存中、解析过的和准备运行的SQL语句的统计信息;

oracle v$session v$session_wait用途详解

oracle v$session v$session_wait用途详解
v$session 表中比较常用的几个字段说明^_^
select machine,username,count(*) from v$session
group by machine,username
order by machine
统计每个客户端,每个用户的链接数
ccc023 - 193
select * from v$open_cursor where sid = :sid;
d. 查询用户当前的等待信息. 以查看当前的语句为什么这么慢/在等待什么资源.
select * from v$session_wait where sid = :sid ;
e. 查询用户在一段时间内所等待的各种事件的信息. 以了解这个session所遇到的瓶颈^_^
latch free 9 6 15
SQL*Net message from client 835 1380 2215
SQL*Net message to client 2 0 2
db file scattered read 2 0 2
from v$sesstat a,v$statname b
where a.statistic# = b.statistic#
and a.sid = :sid;
b. 查询用户相关的各种io统计信息
select * from v$sess_io where sid = :sid;
c. 查询用户想在正在打开着的游标变量.
9. last_call_et 该session idle的时间, 每3秒中更新一次^_^
10.status 值有两个:active,inactive。
acitve表示会话的sql没有执行完。

v$session字段解释

v$session字段解释

v$session字段解释
v$session是Oracle数据库中的动态性能视图,它提供了关于当前会话(session)的信息。

会话是指应用程序或用户与数据库之间的连接,v$session视图中的字段提供了有关会话的各种信息。

以下是v$session视图中一些常见字段的解释:
1. SID(Session ID),会话的唯一标识符,用于区分不同的会话。

2. SERIAL#(Serial Number),会话的序列号,与SID一起用于唯一标识会话。

3. USERNAME,正在使用会话的用户的用户名。

4. STATUS,会话的状态,例如ACTIVE(活动状态)、INACTIVE(非活动状态)等。

5. OSUSER,启动会话的操作系统用户。

6. MACHINE,启动会话的计算机名称。

7. PROGRAM,启动会话的程序或应用程序名称。

8. SQL_ID,正在执行的SQL语句的唯一标识符。

9. SQL_ADDRESS,正在执行的SQL语句的内存地址。

10. SQL_HASH_VALUE,正在执行的SQL语句的哈希值。

除了上述字段外,v$session视图还包含了许多其他有用的信息,如会话的登录时间、最后活动时间、所使用的数据库实例等。

通过查询v$session视图,可以及时了解当前会话的状态和活动,并对数据库性能进行监控和调优。

总之,v$session字段提供了关于当前会话的各种信息,可以帮助数据库管理员和开发人员监控和管理数据库的性能和活动。

这些信息对于诊断和解决数据库性能问题非常重要,可以帮助用户更好地理解数据库的运行情况。

oracle session 查询语句

oracle session 查询语句

oracle session 查询语句Oracle是一种流行的关系型数据库管理系统,它允许用户在一个或多个会话中访问和操作数据库。

一个会话是指用户与数据库建立的交互连接,Oracle允许用户并发地创建和管理多个会话。

在Oracle中,有几种常用的语句可用于查询和管理会话。

下面是一些常见的Oracle会话查询语句的参考内容。

1. 查询当前会话:在Oracle中,可以使用以下语句查询当前会话的信息:```SELECT sid, serial#, username, machine, programFROM v$sessionWHERE username = '当前用户名';```以上语句将返回当前用户名的会话信息,包括会话ID(sid)、序列号(serial#)、用户名(username)、登录的机器名(machine)和使用的程序(program)。

2. 查询活动会话:可以使用以下语句查询当前所有活动的会话:```SELECT sid, serial#, username, machine, programFROM v$sessionWHERE status = 'ACTIVE';```以上语句将返回当前所有活动的会话信息,包括会话ID(sid)、序列号(serial#)、用户名(username)、登录的机器名(machine)和使用的程序(program)。

3. 查询会话的锁信息:可以使用以下语句查询会话的锁信息:```SELECT sid, serial#, type, mode, object_id, object_nameFROM v$locked_objectWHERE session_id = '当前会话ID';```以上语句将返回指定会话锁定的对象信息,包括会话ID (sid)、序列号(serial#)、锁类型(type)、锁模式(mode)、对象ID(object_id)和对象名称(object_name)。

查询Oracle正在执行和执行过的SQL语句(一) v$session 表的权限处理

查询Oracle正在执行和执行过的SQL语句(一) v$session 表的权限处理

oracle 触发器中用v_$session 问题讨论在非系统用户底下建触发器时引用v$s es s ion记录类型时出现问题错误:“表和视图不存在”但是在pl/s ql 中是可以运行s elect * from v$s es s ion 的v$s ess ion是同义词,v_$s ess ion是视图需要以下处理:可直接授权s ys: grant s elect on v_$s es s ion to yourus er;说明:这是个很好的问题一个普通用户,具有了s elect any d ictionary的权限后,就可以访问任何一个系统视图,包括v$s ess ion,由于dba角色包含了s elect any dictionary的权限,所以你的hospital用户s elect * from v$s es s ion是没问题的但是你在PL/SQL中,要参照一个表rowtype或者在定义curs or的时候使用到某个表,那你得在这个表上有s elect权,尽管你的dba角色有s elect any table的权限,但由于在9i中规定在初始化参数O7_DICTIONARY_ACCESSIBILITY取缺省值(fals e)的情况下,一个用户即使有s elect any tab le的权限,却还是不能访问s ys对象的,除非1 把O7_DICTIONARY_ACCESSIBILITY设置为true,也就是偶说的做法或者2 直接把s ys对象的s elect权授予给这个用户,也就是bit i所说的做法在存储对象中引用字典表(视图)必须单独授权SQL> s elect s ynonym_name,tab le_name from dba_s ynonyms where s ynonym_name like '%SESSION%';SYNONYM_NAME TABLE_NAME------------------------------ ------------------------------V$SESSION V_$SESSIONv$s ess ion是同义词,v_$s ess ion是视图这个问题,本质上,是pl/s ql程序的特点的问题在pl/s ql程序设计一书中有讲到,由于pl/s ql 的编译的一些特性,orac le 采取了角色在存储过程、函数、包等有名pl/s ql 中不起作用的策略,必须直接授权才生效,所以即使有dba角色在存储过程中也是无效的。

Oracle数据库中文乱码问题解决

Oracle数据库中文乱码问题解决
5.重 新 启 动 PLSQL,插 入 数 据 正 常
3.设 置 环 境 变 量 计 算 机 ->属 性 ->高 级 系 统 设 置 ->环 境 变 量 ->新 建 设 置 变 量 名 :NLS_LANG,变 量 值 :第 1步 查 到 的 值 , 我 的 是 AMERICAN_AMERICA.ZHS16GBK
4.去 虚 拟 机 修 改 注 册 表 值 , 修 改 NLS_LANG为 服 务 器 端 查 询 到 的 值 。 修 改 以 后 重 新 启 动 一 下 下 图 所 示 的 两 个后台服务
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
Or器 端 编 码 select userenv('language') from dual; 我 实 际 查 到 的 结 果 为 :AMERICAN_AMERICA.ZHS16GBK 2.执 行 语 句 select * from V$NLS_PARAMETERS , 查 看 第 一 行 中 PARAMETER项 中 为 NLS_LANGUAGE 对 应 的 VALUE项 中 是 否 和 第 一 步 得 到 的 值 一 样 。 如果不是,需要设置环境变量。

oracle 建表中文注释

oracle 建表中文注释

oracle 建表中文注释在Oracle数据库中,我们可以通过SQL语句来创建表,并且可以为表的字段添加中文注释。

在创建表时,可以使用如下的SQL语句来添加中文注释:sql.CREATE TABLE 表名 (。

字段1 数据类型注释 '字段1中文注释',。

字段2 数据类型注释 '字段2中文注释',。

...);在上面的SQL语句中,"表名"是要创建的表的名称,"字段1"、"字段2"等是表的字段名称,数据类型是字段的数据类型,中文注释则是用中文描述字段的含义。

在实际使用时,需要将上面的示例中的"表名"、"字段1"、"字段2"、"数据类型"替换为实际的表名、字段名和数据类型,同时将注释内容替换为实际的中文注释。

举例来说,如果我们要创建一个名为"学生信息"的表,其中包括"学号"和"姓名"两个字段,可以使用如下的SQL语句来添加中文注释:sql.CREATE TABLE 学生信息 (。

学号 NUMBER(10) 注释 '学生的学号',。

姓名 VARCHAR2(50) 注释 '学生的姓名'。

);通过以上的SQL语句,我们就成功地在Oracle数据库中创建了一个名为"学生信息"的表,并为表的字段添加了中文注释。

需要注意的是,在Oracle数据库中,使用注释时需要注意数据库的字符集设置,确保数据库能够正确存储和显示中文字符。

另外,在实际开发中,为了便于维护和团队协作,通常会在创建表时为表和字段添加注释,这样可以让其他开发人员更清晰地了解表和字段的含义,提高代码的可读性和可维护性。

Oracle客户端与plsql查询数据乱码修改成中文的快速解决方法

Oracle客户端与plsql查询数据乱码修改成中文的快速解决方法

Oracle客户端与plsql查询数据乱码修改成中⽂的快速解决⽅法1、查询ORACLE服务器的语⾔、地域和字符集select * from nls_database_paameters;查询结果如下图,NLS_LANGUAGE 表⽰“语⾔”,NLS_TERRITORY 表⽰“地域”,NLS_CHARACTSET 表⽰“字符集”,将他们三个按照“语⾔_地域.字符集”的格式拼接起来,就有了“AMERICAN_AMERICA.ZHS16GBK”。

下⾯正式的来操作:2、添加本地环境变量:NLS_LANG,进⼊我的电脑,属性,⾼级,环境变量,有则修改成下⾯数值没有就添加1项:NLS_LANG="AMERICAN_AMERICA.ZHS16GBK" 2、按下WIN+R(WIN就是带微软图标的那个按键),输⼊:regedit 打开注册表。

要修改本地注册表中的“HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->KEY_OraClient11g_home1”-----右击NLS_LANG——点击——修改——数值数据改为:AMERICAN_AMERICA.ZHS16GBK3、可能很多⼩伙伴是绿⾊的进⼊注册表没有ORACLE这个选项这就令⼈⾮常头疼了。

因为可能是32位的原因,你到注册表的下⾯看看HKEY_LOCAL_MACHINE->SOFTWARE->Wow6432Node看看有没有ORACLE选项,如果还没有那咱就添加⼀个;代码如下建⽴⼆个后缀名为AMERICAN_10g.reg和CHINESE_10g.reg的注册表;内容分别为Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1]"NLS_LANG"="AMERICAN_7ASCII"和Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1]"NLS_LANG"="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"4、我的plsql是安装在这⾥ D:\Program Files\PLSQL Developer》你们下载之后把注册表放在plsql⽬录下⾯运⾏之后,按下WIN+R(WIN就是带微软图标的那个按键),输⼊:regedit 打开注册表。

ORACLE数据库中文字符集与英文字符集的转换

ORACLE数据库中文字符集与英文字符集的转换

摘要:早期,河北邯郸电力公司的应用系统的后台oracle数据库基本采用us7ascii英文字符集,而后期随着中文字符集的加入,现引入oracle数据库大部分采用zhs16gbk中文字符集,导致公司应用系统之间数据交互出现问题。

本文利用oracle数据库参数可临时调整的特性,将英文数据库的用户数据移植过来。

实现了将oracle数据库英文字符集到中文字符集数据库移植,方便统一管理维护。

关键词:oracle、英文字符集、中文字符集1.引言oracle公司是世界上最大的数据库软件公司,与sybase、infomix公司一样,oracle 数据库的应用比较广泛[1]。

河北邯郸电力公司后台应用系统就选用了oracle数据库,在oracle实际应用工作中,由于引入时间先后的原因,应用系统数据库早期主要采用英文字符集us7ascii,而后来又主要采用中文字符集zhs16gbk不同oracle字符集数据库的存在容易造成以下几方面的问题:需要进行0racle客户端字符集的切换;公司内部不同字符集数据库的数据在无法进行正常的数据交互和传递;目前省公司以及省公司其他下属单位安装的oracle数据库均一致为采用的是中文字符集,这样就造成邯郸供电公司与省公司无法进行数据交互。

严重影响了系统的运行效率及省公司应用系统的推广工作。

本人通过对公司前后不同数据库字符集的研究分析,制定了一套实现中文字符集到英文字符集转换的方法,该方法应用到公司应用系统,达到了不同应用系统之间实现资源共享的目标。

2.oracle字符集计算机不仅能处理数值,还能处理诸如文字、非凡符号等其他信息,而计算机本身能直接处理的只有数值信息,所以就要求对这些文字、符号信息进行数值编码,最初的字符集是我们都非常熟悉的ascii,它是用7个二进制位来表示128个字符,而后来随着不同国家、组织的需要,出现了许许多多的字符集,如表示西欧字符的is08859系列的字符集,表示汉字的gb2312—80、gbk等字符集[2]。

oracle系统视图SQL语句整理

oracle系统视图SQL语句整理

oracle系统视图SQL语句整理-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝⼤部分都是视图-- DBA_TABLES意为DBA拥有的或可以访问的所有的关系表。

-- ALL_TABLES意为某⼀⽤户拥有的或可以访问的所有的关系表。

-- USER_TABLES意为某⼀⽤户所拥有的所有的关系表。

-- 当某⼀⽤户本⾝就为数据库DBA时,DBA_TABLES与ALL_TABLES等价。

-- DBA_TABLES >= ALL_TABLES >= USER_TABLES-- 需要注意的是在ORACLE数据库中⼤⼩写是敏感的,⽽此三表中数据默认都是⼤写的,所以在进⾏查询的时候注意⼩写的数据可能会造成数据⽆法查到。

SELECT * FROM dba_views WHERE view_name LIKE 'DBA%';SELECT * FROM dba_views WHERE view_name LIKE 'ALL%';SELECT * FROM dba_views WHERE view_name LIKE 'USER%';SELECT * FROM dba_views WHERE view_name LIKE 'V_$%'; -- 针对某个实例的视图SELECT * FROM dba_views WHERE view_name LIKE 'GV_$%'; -- 全局视图,针对多个实例环境SELECT * FROM dba_views WHERE view_name LIKE 'SESSION%';SELECT * FROM dba_views WHERE view_name LIKE 'INDEX%';SELECT count(1) FROM dba_tables;SELECT count(1) FROM all_tables;SELECT count(1) FROM user_tables;-- V$/GV$开头的绝⼤部分都是V_$/GV_$表的别名SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'V$%';SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'GV$%';-- X$没有对应的X_$SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'X$%';-- ⽐较常⽤的DBA开头的视图有select * from dba_users; --数据库⽤户信息select * from dba_roles; --⾓⾊信息select * from dba_segments; --表段信息select * from dba_extents; --数据区信息select * from dba_objects; --数据库对象信息select * from dba_lobs; --lob数据信息select * from dba_tablespaces; --数据库表空间信息select * from dba_data_files; --数据⽂件设置信息select * from dba_temp_files; --临时数据⽂件信息select * from dba_rollback_segs; --回滚段信息select * from dba_ts_quotas; --⽤户表空间配额信息select * from dba_free_space; --数据库空闲空间信息select * from dba_profiles; --数据库⽤户资源限制信息select * from dba_sys_privs; --⽤户的系统权限信息select * from dba_tab_privs; --⽤户具有的对象权限信息select * from dba_col_privs; --⽤户具有的列对象权限信息select * from dba_role_privs; --⽤户具有的⾓⾊信息select * from dba_audit_trail; --审计跟踪记录信息select * from dba_stmt_audit_opts; --审计设置信息select * from dba_audit_object; --对象审计结果信息select * from dba_audit_session; --会话审计结果信息select * from dba_indexes; --⽤户模式的索引信息-- ⽐较常⽤的ALL开头的视图有select * from all_users; --数据库所有⽤户的信息select * from all_objects; --数据库所有的对象的信息select * from all_def_audit_opts; --所有默认的审计设置信息select * from all_tables; --所有的表对象信息select * from all_indexes; --所有的数据库对象索引的信息select * from all_tab_comments; --查询所有⽤户的表,视图等select * from all_col_comments; --查询所有⽤户的表的列名和注释.select * from all_tab_columns; --查询所有⽤户的表的列名等信息(详细但是没有备注)-- ⽐较常⽤的ALL开头的视图有select * from user_objects; --⽤户对象信息select * from user_source; --数据库⽤户的所有资源对象信息select * from user_segments; --⽤户的表段信息select * from user_tables; --⽤户的表对象信息select * from user_tab_columns; --⽤户的表列信息select * from user_constraints; --⽤户的对象约束信息select * from user_sys_privs; --当前⽤户的系统权限信息select * from user_tab_privs; --当前⽤户的对象权限信息select * from user_col_privs; --当前⽤户的表列权限信息select * from user_col_comments; -- 查询本⽤户的表的列名和注释select * from user_role_privs; --当前⽤户的⾓⾊权限信息select * from user_indexes; --⽤户的索引信息select * from user_ind_columns; --⽤户的索引对应的表列信息select * from user_cons_columns; --⽤户的约束对应的表列信息select * from user_clusters; --⽤户的所有簇信息select * from user_clu_columns; --⽤户的簇所包含的内容信息select * from user_cluster_hash_expressions; --散列簇的信息-- ⽐较常⽤的V$开头的别名有select * from v$database; --数据库信息select * from v$datafile; --数据⽂件信息select * from v$controlfile; --控制⽂件信息select * from v$logfile; --重做⽇志信息select * from v$instance; --数据库实例信息select * from v$log; --⽇志组信息select * from v$loghist; --⽇志历史信息select * from v$sga; --数据库SGA信息select * from v$parameter; --初始化参数信息select * from v$process; --数据库服务器进程信息select * from v$bgprocess; --数据库后台进程信息select * from v$controlfile_record_section; --控制⽂件记载的各部分信息select * from v$thread; --线程信息select * from v$datafile_header; --数据⽂件头所记载的信息select * from v$archived_log; --归档⽇志信息select * from v$archive_dest; --归档⽇志的设置信息select * from v$logmnr_contents; --归档⽇志分析的DML DDL结果信息select * from v$logmnr_dictionary; --⽇志分析的字典⽂件信息select * from v$logmnr_logs; --⽇志分析的⽇志列表信息select * from v$tablespace; --表空间信息select * from v$tempfile; --临时⽂件信息select * from v$filestat; --数据⽂件的I/O统计信息select * from v$undostat; --Undo数据信息select * from v$rollname; --在线回滚段信息select * from v$session; --会话信息select * from v$transaction; --事务信息select * from v$rollstat; --回滚段统计信息select * from v$pwfile_users; --特权⽤户信息select * from v$sqlarea; --当前查询过的sql语句访问过的资源及相关的信息select * from v$sql; --与v$sqlarea基本相同的相关信息select * from v$sysstat; --数据库系统状态信息-- ⽐较常⽤的SESSION开头的视图有select * from session_roles; --会话的⾓⾊信息select * from session_privs; --会话的权限信息-- ⽐较常⽤的INDEX开头的视图有select * from index_stats; --索引的设置和存储信息-- 伪表,参考oracle 中 dual 详解:/ozhouhui/article/details/7935196select * from dual; --系统伪列表信息select sysdate from dual; --可将Sysdate视为⼀个其结果为当前⽇期和时间的函数,在任何可以使⽤Oracle函数的地⽅都可以使⽤Sysdate。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

l RUNTIME_MEMORY: cursor使用的运行时内存总数。
l SQL_TEXT: SQL语句的文本(最大只能保存该语句的前 1000个字符)。
l MODULE,ACTION:使用了 DBMS_APPLICATION_INFO时 session解析第一条 cursor时的信息
HASH_VALUE. ADDRESS V$SESSION SQL_HASH_VALUE, SQL_ADDRESS
示例:已知 hash_value:3111103299,查询 sql语句:
select * from v$sqltext
FROM V$SESSION
WHERE terminal = 'pts/tl' AND machine = 'rgmdbs1' ;
3.查找当前被某个指定 session正在运行的 sql语句。假设 sessionID为 100
select b.sql_text
from v$session a,v$sqlarea b
l MODULE: DBMS_APPLICATION_INFO中设置
下列 V$SESSION列同样可能会被用到:
l ROW_WAIT_OBJ#
l ROW_WAIT_FILE#
l ROW_WAIT_BLOCK#
l ROW_WAIT_ROW#
HASH_VALUE, ADDRESS V$SQLTEXT, V$SQL, V$OPEN_CURSOR HASH_VALUE, ADDRESS
SQL_TEXT V$DB_OBJECT_CACHE NAME
oracle系统表v$session、v$sql字段说明
oracle系统表v$session、v$sql表的列字段说明
在本视图中,每一个连接到数据库实例中的 session都拥有一条记录。包括用户 session及后台进程如 DBWR, LGWR, arcchiver等等。
V$SESSION中的常用列
where a.sql_hashvalue=b. hash_value and a.sid= 1 00
或者
select b.sql_text
from v$session a,v$sqlarea b //v$sqlarea 只包括sql的1000个字符,V$SQLTEXT is all
where a.sql_hash_value = b.HASH_VALUE and a.TERMINAL = 'BackHam';//BackHam is my computer name
l OSUSER:客户端操作系统用户名
l MACHINE:客户端执行的机器
l TERMINAL:客户端运行的终端
l PROCESS:客户端进程的 ID
l PROGRAM:客户端执行的客户端程序
要显示用户所连接 PC的 TERMINAL、 OSUSER,需在该 PC的 ORACLE.INI或 Windows中设置关键字 TERMINAL, USERNAME。
l Killed:被标注为删除
下列各列提供 session的信息,可被用于当一个或多个 combination未知时找到 session。
Session信息
l SID: SESSION标识,常用于连接其它列
l SERIAL#:如果某个 SID又被其它的 session使用的话则此数值自增加 (当一个 SESSION结束,另一个 SESSION开始并使用了同一个 SID)。
Column View Joined Column(s)
HASH_VALUE, ADDRESS V$SESSION SQL_HASH_VALUE, SQL_ADDRESS
SID V$SESSION_WAIT,,V$SESSTAT,,V$LOCK,V$SESSION_EVENT,V$OPEN_CURSOR SID
(SQL_HASH_VALUE, SQL_ADDRESS) V$SQLTEXT, V$SQLAREA, V$SQL (HASH_VALUE, ADDRESS)
l AUDSID:审查 session ID唯一性,确认它通常也用于当寻找并行查询模式
l USERNAME:当前 session在 oracle中的用户名。
Client信息
数据库 session被一个运行在数据库服务器上或从中间服务器甚至桌面通过 SQL*Net连接到数据库的客户端进程启动,下列各列提供这个客户端的信息
V$SQLTEXT中的连接列
Column View Joined Column(s)
HASH_VALUE, ADDRESS V$SQL, V$SESSION HASH_VALUE, ADDRESS
(PREV_HASH_VALUE, PREV_SQL_ADDRESS) V$SQLTEXT, V$SQLAREA, V$SQL (HASH_VALUE, ADDRESS)
TADDR V$TRANSACTION ADDR
where hashvalue= '3111103299'
order by piece
V$SQLAREA
本视图持续跟踪所有 shared pool中的共享 cursor,在 shared pool中的每一条 SQL语句都对应一列。本视图在分析 SQL语句资源使用方面非常重要。
V$SQLAREA中的信息列
V$SQLAREA中的其它常用列 TIME: 语句被解析和执行的 CPU时间
l ELAPSED_TIME: 语句被解析和执行的共用时间
l PARSE_CALLS: 语句的解析调用 (软、硬 )次数
V$SESSION是基础信息视图,用于找寻用户 SID或 SADDR。不过,它也有一些列会动态的变化,可用于检查用户。如例:
SQL_HASH_VALUE, SQL_ADDRESS:这两列用于鉴别默认被 session执行的 SQL语句。如果为 null或 0,那就说明这个 session没有执行任何 SQL语句。 PREV_HASH_VALUE和 PREV_ADDRESS两列用来鉴别被 session执行的上一条语句。
示例:
1.查看消耗资源最多的 SQL:
SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls
l HASH_VALUE: SQL语句的 Hash值。
l ADDRESS: SQL语句在 SGA中的地址。
这两列被用于鉴别 SQL语句,有时,两条不同的语句可能 hash值相同。这时候,必须连同 ADDRESS一同使用来确认 SQL语句。
l PARSING_USER_ID:为语句解析第一条 CURSOR的用户
l VERSION_COUNT:语句 cursor的数量
l KEPT_VERSIONS:
l SHARABLE_MEMORY: cursor使用的共享内存总数
l PERSISTENT_MEMORY: cursor使用的常驻内存总数
PADDR V$PROCESS ADDR
示例:
1.查找你的 session信息
注: V$SQLAREA只包括头 1000个字符。
V$SQLTEXT中的常用列
l HASH_VALUE: SQL语句的 Hash值
l ADDRESS: sql语句在 SGA中的地址
l SQL_TEXT: SQL文本。
l PIECE: SQL语句块的序号
SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS
FROM V$SESSION WHERE audsid = userenv( 'SESSIONID' );
2.当 machine已知的情况下查找 session
SELECT SID, OSUSER, USERNAME, MACHINE, TERMINAL
V$SESSION中的连接列
Column View Joined Column(s)
l EXECUTIONS: 语句的执行次数
l INVALIDATIONS: 语句的 cursor失效次数
l LOADS: 语句载入 (载出 )数量
l ROWS_PROCESSED: 语句返回的列总数
V$SQLAREA中的连接列
Application信息
调用 DBMS_APPLICATION_INFO包以设置一些信息区分用户。这将显示下列各列。
l CLIENT_INFO: DBMS_APPLICATION_INFO中设置
l ACTION: DBMS_APPLICATION_INFO中设置
寻找被指定 session执行的 SQL语句是一个公共需求,如果 session是瓶颈的主要原因,那根据其当前在执行的语句可以查看 session在做些什么。
V$SQLTEXT
本视图包括 Shared pool中 SQL语句的完整文本,一条 SQL语句可能分成多个块被保存于多个记录内。
注意:当使用 SQL*Plus进行选择时,确认你重定义的列宽不小于 11以便看到完整的数值。
STATUS:这列用来判断 session状态是:
l Achtive:正执行 SQL语句 (waiting for/using a resource)
l Inactive:等待操作 (即等待需要执行的 SQL语句 )
相关文档
最新文档