ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup SVRMGR>quit b、关闭ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>shutdown SVRMGR>quit 启动oracle9i数据库命令: $ sqlplus /nolog SQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> connect / as sysdba Connected to an idle instance. SQL> startup ORACLE instance started.
2、在双机环境下 要想启动或关闭ORACLE系统必须首先切换到root用户,如下 su - root a、启动ORACLE系统 hareg -y oracle b、关闭ORACLE系统 hareg -n oracle Oracle数据库有哪几种启动方式 说明: 有以下几种启动方式: 1)、startup nomount 非安装启动,这种方式启动下可执行:重建控制文件、重建数据库 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。 2)、startup mount dbname 安装启动,这种方式启动下可执行: 数据库日志归档、 数据库介质恢复、 使数据文件联机或脱机, 重新定位数据文件、重做日志文件。 执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置, 但此时不对数据文件和日志文件进行校验检查。 3)、startup open dbname 先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件, 这种方式下可访问数据库中的数据。 4)、startup,等于以下三个命令 startup nomount alter database mount alter database open 5)、startup restrict 约束方式启动 这种方式能够启动数据库,但只允许具有一定特权的用户访问 非特权用户访问时,会出现以下提示: ERROR: ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION权限的用户使用 6)、startup force 强制启动方式 当不能关闭数据库时,可以用startup force来完成数据库的关闭 先关闭数据库,再执行正常启动数据库命令 7)、startup pfile=参数文件名 带初始化参数文件的启动方式 先读取参数文件,再按参数文件中的设置启动数据库 例:startup pfile=E:Oracleadminoradbpfileinit.ora 8)、startup EXCLUSIVE
二、用户如何有效地利用数据字典
ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生,随着数据库的变化而变化, 体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。 数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视图等。 我们不能手工修改数据字典里的信息。 很多时候,一般的ORACLE用户不知道如何有效地利用它。
dictionary 全部数据字典表的名称和解释,它有一个同义词dict dict_column全部数据字典表里字段名称和解释 如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句: SQL>select * from dictionary where instr(comments,‘index‘)>0; 如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句:
SQL>select column_name,comments from dict_columns where table_name=‘USER_INDEXES‘; 依此类推,就可以轻松知道数据字典的详细名称和解释,不用查看ORACLE的其它文档资料了。
下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。
1、用户
查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs;
2、表
查看用户下所有的表 SQL>select * from user_tables; 查看名称包含log字符的表 SQL>select object_name,object_id from user_objects where instr(object_name,‘LOG‘)>0; 查看某表的创建时间 SQL>select object_name,created from user_objects where object_name=upper(‘&table_name‘); 查看某表的大小 SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper(‘&table_name‘); 查看放在ORACLE的内存区里的表 SQL>select table_name,cache from user_tables where instr(cache,‘Y‘)>0;
3、索引
查看索引个数和类别
SQL>select index_name,index_type,table_name from user_indexes order by table_name; 查看索引被索引的字段 SQL>select * from user_ind_columns where index_name=upper(‘&index_name‘); 查看索引的大小 SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper(‘&index_name‘);
4、序列号
查看序列号,last_number是当前值 SQL>select * from user_sequences;
5、视图
查看视图的名称
SQL>select view_name from user_views; 查看创建视图的select语句 SQL>set view_name,text_length from user_views; SQL>set long 2000; 说明:可以根据视图的text_length值设定set long的大小 SQL>select text from user_views where view_name=upper(‘&view_name‘);
6、同义词
查看同义词的名称
SQL>select * from user_synonyms;
7、约束条件 查看某表的约束条件 SQL>select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper(‘&table_name‘); SQL>select c.constraint_name,c.constraint_type,cc.column_name from user_constraints c,user_cons_columns cc where c.owner = upper(‘&table_owner‘) and c.table_name = upper(‘&table_name‘) and c.owner = cc.owner and c.constraint_name = cc.constraint_name order by cc.position; 8、存储函数和过程 查看函数和过程的状态 SQL>select object_name,status from user_objects where object_type=‘FUNCTION‘; SQL>select object_name,status from user_objects where object_type=‘PROCEDURE‘; 查看函数和过程的源代码 SQL>select text from all_source where owner=user and name=upper(‘&plsql_name‘);
三、查看数据库的SQL
1、查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name; 2、查看表空间物理文件的名称及大小 select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name; 3、查看回滚段名称及大小 select segment_name, tablespace_name, r.status, (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent, max_extents, v.curext CurExtent From dba_rollback_segs r, v$rollstat v Where r.segment_id = v.usn(+) order by segment_name ; 4、查看控制文件 select name from v$controlfile; 5、查看日志文件 select member from v$logfile; 6、查看表空间的使用情况 select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_space group by tablespace_name; SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE" FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME; 7、查看数据库库对象 select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status; 8、查看数据库的版本 Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)=‘Oracle‘; 9、查看数据库的创建日期和归档方式 Select Created, Log_Mode, Log_Mode From V$Database;
四、ORACLE用户连接的管理
用系统管理员,查看当前数据库有几个用户连接: SQL> select username,sid,serial# from v$session; 如果要停某个连接用 SQL> alter system kill session ‘sid,serial#‘; 如果这命令不行,找它UNIX的进程数 SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr; 说明:21是某个连接的sid数 然后用 kill命令杀此进程号。
五、SQL*PLUS使用
a、近入SQL*Plus
$sqlplus 用户名/密码 退出SQL*Plus SQL>exit b、在sqlplus下得到帮助信息 列出全部SQL命令和SQL*Plus命令 SQL>help 列出某个特定的命令的信息 SQL>help 命令名 c、显示表结构命令DESCRIBE SQL>DESC 表名 d、SQL*Plus中的编辑命令 显示SQL缓冲区命令 SQL>L 修改SQL命令 首先要将待改正行变为当前行 SQL>n 用CHANGE命令修改内容 SQL>c/旧/新 重新确认是否已正确 SQL>L 使用INPUT命令可以在SQL缓冲区中增加一行或多行 SQL>i SQL>输入内容 e、调用外部系统编辑器 SQL>edit 文件名 可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行 DEFINE_EDITOR=vi f、运行命令文件 SQL>START test SQL>@test 常用SQL*Plus语句 a、表的创建、修改、删除 创建表的命令格式如下: create table 表名(列说明列表); 为基表增加新列命令如下: ALTER TABLE 表名 ADD(列说明列表) 例:为test表增加一列Age,用来存放年龄 sql>alter table test 小编还为您整理了以下内容,可能对您也有帮助:
Oracle笔记-优化策略与工具
第 章 优化策略与工具
标识问题
我的方法
绑定变量与分析(再次)
不使用绑定变量将增加语句分析 除了消耗CPU时间外 还会增加字典高速缓存上的闩锁
显示会话等待的事件 V$SESSION_EVENT 具体事件名和含义可以参考Oracle Reference Manual的附录Oracle Wait Events
CURSOR_SHARING
CURSOR_SHARING参数缺省为EXACT 若指定为FORCE 则优化器可能将语句中所有的常数转换为绑定变量 虽然减少了语句分析 但是也会带来如下副作用
优化器可供利用的信息可能减少 从而改变执行路径 例如条件中对于某个特定值索引有较好的选择性 改为绑定变量时优化器并不会发现这一点
查询输出格式发生变化 虽然返回的数据长度不变 但列的长度可能改变 例如对于SELECT id tom name from emp name应该为VARCHAR ( ) 但是由于 tom 被改为绑定变量 则可能name的显示长度变为
查询计划更难评估 由于语句的改变 EXPLAIN PLAN看到的查询与数据库看到的可能不一致 从而使AUTOTRACE等的输出与实际执行路径不一致
因此 完善的应用系统不应当依靠CURSOR_SHARING来提高效率 仅能作为权宜之计
SQL_TRACE TIMED_STATISTICS与TKPROF
TIMED_STATISTICS并不会对系统产生过大负担 因此建议设置为TRUE
启动跟踪
SQL_TRACE可在系统或会话级激活 激活后跟踪文件将产生至init ora参数USER_DUMP_DEST(专用服务器)或 BACKGROUND_DUMP_DEST(MTS)指定的目录 而文件大小通过MAX_DUMP_FILE_SIZE控制 其设置有如下三种方法
仅数值 以OS块为单位
数值+K/M 指定文件绝对大小
UNLIMITED 无上限
一般只需要设置 M就足够了
激活SQL_TRACE的几种常用方式如下
ALTER SESSION SET SQL_TRACE=TRUE|FALSE
SYS DBMS_SYSTEM SET_SQL_TRACE_IN_SESSION 这里我们需要指定SID和SERIAL#(参考V$SESSION)
ALTER SESSION SET EVENTS 可获得更详细的信息
此外也可通过DBMS_SUPPORT包 相当于EVENTS跟踪的一个界面 但此包需要Oracle人员支持 非标配
随着WEB服务方式的普及 往往一个数据库会话很短 难以单独跟踪 对此 我们可以根据用户 在数据库级建立触发器
CREATE OR REPLACE TRIGGER logon_trigger
AFTER LOGON ON DATABASE
BEGIN
IF ( USER= TKYTE ) THEN
EXECUTE IMMEDIATE ALTER SESSION SET EVENTS TRACE NAME CONTEXT FOREVER LEVEL ;
END IF;
END;/ 使用并解析TKPROF输出
激活SQL_TRACE后 通过如下查询检查SPID
SELECT a spid FROM v$process a v$session b
WHERE a addr = b paddr
AND b audsid = userenv( sessionid )
此SPID就包含在跟踪文件的文件名中
UNIX系统中 若你不在Oracle的管理组中 则生成的跟踪文件所在目录可能无法访问 此时需要设定init ora参数_trace_files_public = true
TKPROF语法 TKPROF * trc * txt
其他用法可以直接运行TKPROF查看 一般常用选项就是 sort 可以根据某些参数值排序
对跟踪文件输出的一些解释
i 行
PARSE阶段 包括了软分析(在SHARED_POOL中找到语句)和硬分析
EXECUTE阶段 对SELECT几乎为空 对UPDATE则几乎是全部工作的体现
FETCH阶段 对SELECT是几乎所有的工作 对UPDATE则为空
ii 列
COUNT 事件发生的次数
CPU 消耗的CPU时间(CPU秒)
ELAPSED 总体运行时间
DISK 磁盘物理I/O
QUERY 一致读模式访问的块数 也包括了从回滚段读取的块数
CURRENT 访问的当前信息数据块(而不是一致读模式) 例如SELECT时读取数据字典内容 修改时也需要访问数据字典内容以写
ROWS 所涉及的行数
需要注意的现象
i 高的PARSE COUNT/EXECUTE COUNT(接近 %) 且EXECUTE COUNT大于
即执行语句时分析的次数 如果过高 可能是软分析也过多了 对一个会话 应该是分析一次反复执行
ii 对几乎所有SQL EXECUTE COUNT都是
可能没有使用绑定变量 在一个真实应用中 应该很少看到不同的SQL 同一个SQL应执行多次
iii CPU和ELAPSED时间相差较大
说明花了很长时间等待一个事件 例如磁盘I/O 锁等
iv (FETCH COUNT)/(ROWS FETCHED)比例高
没有很好的使用批量提取 批量提取数据的方法是和语言/API相关的 例如Pro* C中需要使用prefetch=NN预编译 Java/JDBC下可以调用SETROWPREFETCH方法 PL/SQL可以在SELECT INTO中直接使用BULK COLLECT 而SQL* PLUS缺省为每次取 行
v 极大的DISK COUNT
较难推断 但若DISK COUNT = QUERY + CURRENT MODE BLOCK COUNT 则说明几乎所有数据都来自磁盘 此时需要考虑SGA大小和此查询效率
vi 极大的QUERY COUNT或CURRENT COUNT
SQL工作量很大 需要注意
EXPLAIN PLAN问题
跟踪文件中显示的是真正执行的路径 TKPROF也支持EXPLAIN=XXX/XXX选项 不建议使用 其输出是转换跟踪文件当时优化器选择的执行路径 并是利用数据库的EXPLAIN工具 与真实路径时不完全一致的
使用与解析原始跟踪文件
EVENTS跟踪
ALTER SESSION SET EVENTS trace name context forever level N
N= 同标准SQL_TRACE
N= 增加获得绑定变量值
N= 增加获得查询级的等待事件
N= 增加获得绑定变量值和查询级的等待事件
原始跟踪文件分段解析
文件头含有时间 数据库版本 OS版本 实例名等
APPNAME mod= %s mh=%lu act= %s ah=%lu
mod
传入DBMS_APPLICATION_INFO的模块名
mh
模块哈希值
act
传入DBMS_APPLICATION_INFO的动作
ah
动作哈希值
Parsing in Cursor #%d dep=%d uid=%ld oct=%d lid=%ld tim=%ld hv=%ld ad= %s
Cursor #
游标号 也可以用此值获知应用最大打开的游标数
len
下面SQL语句的长度
dep
SQL语句的递归(recursive)深度
uid
当前方案的用户ID 注意 这并不一定和后面的lid一致 因为可以用
alter session set current_schema来修改分析时的方案
oct
Oracle命令类型(Oracle Command Type)
lid
用于安全性检查访问权限的用户ID
tim
定时器 / 秒
ha
SQL语句的哈希ID
ad
V$SQLAREA中此SQL语句的ADDR列
EXEC Cursor# c=%d e=%d p=%d cr=%d mis=%d r=%d dep=%d og=%d tim=%d
Cursor #
游标号
c
CPU时间 / 秒
e
流逝(Elapsed)时间 / 秒
p
物理读
cr
一致(QUERY模式)读(逻辑I/O)
cu
当前(Current)模式读(逻辑I/O)
mis
字典缓存中的游标不命中数 说明由于过期已从共享池中清除或从未进入共享池等 而不得不分析此语句
r
处理的行数
dep
SQL语句的递归深度
og
优化器目标 =ALL ROWS =FIRST ROWS =RULE =CHOOSE
tim
定时器
与EXEC段类似的还有(即取代 EXEC )
PARSE
分析一个语句
FETCH
从一个游标取出数据行
UNMAP
用于显示在不需要时从中间结果释放临时段
SORT UMAP
同UNMAP 指排序段
WAIT Cursor# nam= %s ela=%d p =%ul p =%ul p =%ul
Cursor#
游标号
nam
等待事件名
ela
流逝时间 / 秒
p p p
等待事件特定的参数
以上为文件头与ALTER SESSION出现的跟踪信息 此后开始出现运行的SQL语句
BIND段
cursor#
游标号
bind N
绑定位置 从 开始
dty
数据类型
mxl
绑定变量最大长度
mal
最大数组长度(当使用数组绑定或BULK操作时)
scl
数值范围(scale)
pre
精度(precision)
oacflg
内部标记 若此值为奇数 则绑定变量可能为NULL(允许为NULL)
oacfl
内部标记续
size
缓冲区大小
offset
用于逐片(piecewise)绑定
bfp
绑定地址
bln
绑定缓冲区大小
avl
真实值长度
flag
内部标记
value
绑定值的字符串表示(如果可能 会是一个十六进制mp)
其中dty SELECT text FROM ALL_VIEWS WHERE view_name = USER_VIEWS 可看到一个将dty数值转换为字符串表示的函数
此后我们可以看到WAIT段 即真正的等待事件
对于ENQUEUE事件 实际就是锁 可用以下函数(传入参数为p )判断类型
CREATE OR REPLACE FUNCTION enqueue_decode(l_p in number) return varchar
AS
l_str varchar ( );
BEGIN
SELECT CHR(BITAND(l_p ) / ) ||
CHR(BITAND(l_p ) / ) || ||
DECODE(BITAND(l_p )
No lock
No lock
Row Share
Row Exclusive
Share
Share Row Excl
Exclusive )
INTO l_str
FROM DUAL;
RETURN l_str;
END;
XCTEND(事务边界)段记录了提交等
rlbk
回滚标记 提交 回滚
rd_only
只读标记 变化提交或回滚 事务只读
STAT段记录了运行时SQL真正的执行计划
cursor #
游标号
id
执行计划行号
cnt
查询计划中流经此步骤的行数
pid
此步骤的父ID
pos
执行计划中的位置
obj
访问的对象的对象ID
op
操作的文本描述
PARSE ERROR段
len
SQL语句长度
dep
SQL语句递归深度
uid
分析的方案
oct
Oracle命令类型
lid
权限方案ID
tim
定时器
err
ORA错误代码
ERROR段
cursor #
游标数
err
ORA错误代码
tim
定时器
DBMS_PROFILER
StatsPack
V$表
V$EVENT_NAME
说明事件名和p p p 三个参数
V$FILESTAT和V$TEMPSTAT
说明系统I/O概况
V$LOCK
说明系统锁的情况 但注意Oracle并不在外部保存行锁 此视图可以找到TM(DML Enqueue)锁 即说明产生了行锁
V$MYSTAT
说明当前会话的统计信息 需要V_$STATNAME(不用V$STATNAME 只是V_$STATNAME的一个同义词)和V_$MYSTAT上的SELECT权限
CREATE VIEW MY_STATS AS
SELECT a name b value
FROM V$STATNAME a V$MYSTAT b
WHERE a statistic# = b statistic#
V$OPEN_CURSOR
记录所有会话打开的游标 由于Oracle也会缓存已关闭的游标 因此此视图中也会包含已关闭的游标信息
V$PARAMETER
说明了所有的init ora参数
V$SESSION
记录数据库的每个会话 需要对V_$SESSION的SELECT权限
V$SESSION_EVENT
说明会话的事件情况
V$SESSION_LONGOPS
记录CBO认为执行时间超过 秒的命令及进展
V$SESSION_WAIT
记录所有正在等待某事件的会话及已等待时间
V$SESSTAT
类似V$MYSTAT 但显示所有会话
V$SESS_IO
说明会话的I/O信息
V$SQL和V$SQLAREA
记录SQL信息 建议使用V$SQL V$SQLAREA是从V$SQL合并而来的视图 代价较高 对已经繁忙的系统是一个负担
V$STATNAME
说明了统计号到统计名的映射
V$SYSSTAT
记录实例层面的统计信息 当数据库关闭时才清空 也是StatsPack很多数据的来源
V$SYSTEM_EVENT
lishixin/Article/program/Oracle/201311/16750oracle怎么导入dmp文件
关于dmp文件我们用的还是比较多的,dmp文件它是作为oracle导入和导出表使用的文件格式,今天就将dmp文件导出和导入进行学习。
dmp文件导出
dmp文件导出用的比较多的一般是三种,他们分别是:导出整个数据库实例下的所有数据、导出指定用户的所有表、导出指定表。
这里已我的数据库为例,进行介绍,我的Oracle数据库实例为"ORACLE",查看自己数据库实例可以从"任务管理器-->服务"中进行查看,如下图
打开命令行:
1,将数据库ORACLE完全导出,用户名system密码manager 导出到c:chu.dmp中
exp system/manager@ORACLE file=c:chu.dmp full=y
2,将数据库中RFD用户与,JYZGCX用户的表导出
exp system/manager@ORACLE file=d:chu.dmpowner=(RFD,JYZGCX)
3,将数据库中的表T_USER、T_ROLE导出
expJYZGCX/JYZGCX@ORACLEfile= d:datanewsmgnt.dmp tables=(T_USER,T_ROLE)
上面的system为用户名,manager为密码,ORACLE为数据库实例名,其实不一定非的用system用户,只要是拥有管理员权限的用户都可以。
dmp文件导入
1,打开“开始”-->输入cmd—> sqlplus /nolog;
2,输入 conn / as sysdba管理员账户登录;
3,需要创建表空间,如果我们知道需要导入的数据库的表空间直接创建就可以,如果不不知道,也没有关系,我们可以用txt打开dmp文件,使用快捷键ctrl+F,查找tablespace,就可以找到这个dmp文件所对应数据库的表空间,然后创建我们找到的表空间就可以;
步,不创建的表空间,创建用户,并分配权限;
5,打开“开始”-->输入cmd(注意:这里是cmd窗口,不是sqlplus窗口!!!),输入以下语句:“imp kang/123456@localhost/ORACLEfile="C:chu.dmp"full=y ignore=y”
上述语句说明如下:
kang是创建的登录数据库用户名;
123456是登录数据库的密码;
localhost:代表当前数据库的地址是本机,如果是远程导入,替换成对应的ip地址就行
ORACLE:是实例名称)
file:后面的是你当前dmp文件存放的路径
full=y,这个貌似是全部
ignore=y,忽略一些错误
备注:关于数据库实例、表空间、用户等基本概念和创建的语句可参考前面的文章“Oracle学习——扫盲篇”
小结
本篇文章主要讲述了,oracle数据导出和导入的具体步骤,其中导入dmp文件的时候即便不知道表空间、用户名和密码也可以进行导入。
如何杀死oracle死锁进程
方法一:Oracle的死锁非常令人头疼,总结了一些点滴经验作为学习笔记 1.查哪个过程被锁 查V$DB_OBJECT_CACHE视图: SELECT*FROMV$DB_OBJECT_CACHEWHEREOWNER='过程的所属用户'ANDLOCKS!='0'; 2. 查是哪一个SID,通过SID可知道是哪个SESSION. 查V$ACCESS视图:
方法一:Oracle的死锁非常令人头疼,总结了一些点滴经验作为学习笔记
1.查哪个过程被锁
查V$DB_OBJECT_CACHE视图:
SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND LOCKS!='0';
2. 查是哪一个SID,通过SID可知道是哪个SESSION.
查V$ACCESS视图:
SELECT * FROM V$ACCESS WHERE OWNER='过程的所属用户' AND NAME='刚才查到的过程名';
3. 查出SID和SERIAL#
查V$SESSION视图:
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID'
查V$PROCESS视图:
SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR';
4. 杀进程
(1).先杀ORACLE进程:
ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';
(2).再杀操作系统进程:
KILL -9 刚才查出的SPID
或
ORAKILL 刚才查出的SID 刚才查出的SPID
方法二:
经常在oracle的使用过程中碰到这个问题,所以也总结了一点解决方法:)
1)查找死锁的进程:
sqlplus "/as sysdba"
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PRO
CESS FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;
2)kill掉这个死锁的进程:
alter system kill session ‘sid,serial#’; (其中sid=l.session_id)
3)如果还不能解决,
select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr;
其中sid用死锁的sid替换。
exit
ps -ef|grep spid
其中spid是这个进程的进程号,kill掉这个Oracle进程。
oracle查看text文件内容有哪些命令
1.create user username identified by password;//建用户名和密码oracle ,oracle
2.grant connect,resource,dba to username;//授权 grant connect,resource,dba,sysdba to username;
3.connect username/password//进入。
4.select table_name,column_name from user_tab_columns where table_name='mview_log';//查询表中的表名,字段名等等。
5. 如何执行脚本SQL文件? SQL>@PATH/filename.sql;
6.Oracle oledb 提供者在command中执行多条SQL语句与SQL SERVER有少许差别,SQL Server只需使用";"分割多条SQL语句,而Oracle需要遵守ORACLE调用规范,即除分号分割外,还需以begin /end;包围语句体.
使用C#描述应如下所示:
this.oleDbCommand1.CommandText = "begin INSERT INTO GROUP_INFO (GROUP_ID, GROUP_NAME) VALUES (1, \'2\'); INSERT INTO GROUP_INFO(GROUP_ID, GROUP_NAME) VALUES (2, \'2\'); end;";
7.查询用户下的所有表 select distinct table_name from user_tab_columns;
8.如何搜索出前N条记录?Select a.*,rownum from (select * from cardkind order by cardkind ) a where rownum<n
9.查找用户下的所有表:select * from tab;
2、显示当前连接用户
SQL> show user
3、查看系统拥有哪些用户
SQL> select * from all_users;
4、新建用户并授权
SQL> create user a identified by a;(默认建在SYSTEM表空间下)
SQL> grant connect,resource to a;
5、连接到新用户
SQL> conn a/a
6、查询当前用户下所有对象
SQL> select * from tab;
7、建立第一个表
SQL> create table a(a number);
8、查询表结构
SQL> desc a
9、插入新记录
SQL> insert into a values(1);
10、查询记录
SQL> select * from a;
11、更改记录
SQL> update a set a=2;
12、删除记录
SQL> delete from a;
13、回滚
SQL> roll;
SQL> rollback;
14、提交
SQL> commit;
select * from
(select t.*,dense_rank() over (order by cardkind) rank from cardkind t)
where rank = 2;
46. 如何在字符串里加回车?
select 'Welcome to visit'||chr(10)||'www.CSDN.NET' from al ;
47. 中文是如何排序的?
Oracle9i之前,中文是按照二进制编码进行排序的。
在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值
SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序
48. Oracle8i中对象名可以用中文吗?
可以
49. 如何改变WIN中SQL*Plus启动选项?
SQL*PLUS自身的选项设置我们可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中设置。
50. 怎样修改oracel数据库的默认日期?
alter session set nls_date_format='yyyymmddhh24miss';
OR
可以在init.ora中加上一行
nls_date_format='yyyymmddhh24miss'
51. 如何将小表放入keep池中?
alter table xxx storage(buffer_pool keep);
52. 如何检查是否安装了某个patch?
check that oraInventory
53. 如何使select语句使查询结果自动生成序号?
select rownum,COL from table;
54. 如何知道数据裤中某个表所在的tablespace?
select tablespace_name from user_tables where table_name='TEST';
select * from user_tables中有个字段TABLESPACE_NAME,(oracle);
select * from dba_segments where …;
55. 怎么可以快速做一个和原表一样的备份表?
create table new_table as (select * from old_table);
55. 怎么在sqlplus下修改procere?
select line,trim(text) t from user_source where name ='A' order by line;
56. 怎样解除PROCEDURE被意外锁定?
alter system kill session ,把那个session给杀掉,不过你要先查出她的session id
or
把该过程重新改个名字就可以了。
57. SQL Reference是个什么东西?
是一本sql的使用手册,包括语法、函数等等,oracle官方网站的文档中心有下载.
58. 如何查看数据库的状态?
unix下
ps -ef | grep ora
windows下
看服务是否起来
是否可以连上数据库
59. 请问如何修改一张表的主键?
alter table aaa
drop constraint aaa_key ;
alter table aaa
add constraint aaa_key primary key(a1,b1) ;
60. 改变数据文件的大小?
用 ALTER DATABASE .... DATAFILE .... ;
手工改变数据文件的大小,对于原来的 数据文件有没有损害。
61. 怎样查看ORACLE中有哪些程序在运行之中?
查看v$sessions表
62. 怎么可以看到数据库有多少个tablespace?
select * from dba_tablespaces;
63. 如何修改oracle数据库的用户连接数?
修改initSID.ora,将process加大,重启数据库.
64. 如何查出一条记录的最后更新时间?
可以用logminer 察看
65. 如何在PL/SQL中读写文件?
UTL_FILE包允许用户通过PL/SQL读写操作系统文件。
66. 怎样把"&"放入一条记录中?
insert into a values (translate ('at{&}t','at{}','at'));
67. EXP 如何加QUERY参数?
EXP USER/PASS FILE=A.DMP TABLES(BSEMPMS)
QUERY='"WHERE EMP_NO=\'S09394\'\" ﹔
68. 关于oracle8i支持简体和繁体的字符集问题?
ZHS16GBK可以支
69. Data Guard是什么软件?
就是Standby的换代产品
70. 如何创建SPFILE?
SQL> connect / as sysdba
SQL> select * from v$version;
SQL> create pfile from spfile;
SQL> CREATE SPFILE FROM PFILE='E:\ora9i\admin\eygle\pfile\init.ora';
文件已创建。
SQL> CREATE SPFILE='E:\ora9i\database\SPFILEEYGLE.ORA' FROM
PFILE='E:\ora9i\admin\eygle\pfile\init.ora';
文件已创建。
71. 内核参数的应用?
shmmax
含义:这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了
最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。
设置方法:0.5*物理内存
例子:Set shmsys:shminfo_shmmax=10485760
shmmin
含义:共享内存的最小大小。
设置方法:一般都设置成为1。
例子:Set shmsys:shminfo_shmmin=1:
shmmni
含义:系统*享内存段的最大个数。
例子:Set shmsys:shminfo_shmmni=100
shmseg
含义:每个用户进程可以使用的最多的共享内存段的数目。
例子:Set shmsys:shminfo_shmseg=20:
semmni
含义:系统中semaphore identifierer的最大个数。
设置方法:把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大
的那个processes的那个值加10。
例子:Set semsys:seminfo_semmni=100
semmns
含义:系统中emaphores的最大个数。
设置方法:这个值可以通过以下方式计算得到:各个Oracle实例的initSID.ora里边的
processes的值的总和(除去最大的Processes参数)+最大的那个Processes×2+10×
Oracle实例的个数。
例子:Set semsys:seminfo_semmns=200
semmsl:
含义:一个set中semaphore的最大个数。
设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。
例子:Set semsys:seminfo_semmsl=-200
72. 怎样查看哪些用户拥有SYSDBA、SYSOPER权限?
SQL>conn sys/change_on_install
SQL>select * from V_$PWFILE_USERS;
73. 如何单独备份一个或多个表?
exp 用户/密码 tables=(表1,…,表2)
74. 如何单独备份一个或多个用户?
exp system/manager owner=(用户1,用户2,…,用户n) file=导出文件
75. 如何对CLOB字段进行全文检索?
SELECT * FROM A WHERE dbms_lob.instr(a.a,'K',1,1)>0; 76. 如何显示当前连接用户?
SHOW USER
77. 如何查看数据文件放置的路径 ?
col file_name format a50
SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files
order by file_id;
78. 如何查看现有回滚段及其状态 ?
SQL> col segment format a30
SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE _ID,STATUS FROM
DBA_ROLLBACK_SEGS
79. 如何改变一个字段初始定义的Check范围?
SQL> alter table xxx drop constraint constraint_name;
之后再创建新约束:
SQL> alter table xxx add constraint constraint_name check();
80. Oracle常用系统文件有哪些?
通过以下视图显示这些文件信息:v$database,v$datafile,v$logfile v$controlfile
v$parameter;
81. 内连接INNER JOIN?
Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no;
82. 如何外连接?
Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no(+);
Select a.* from bsempms a,bsdptms b wherea.dpt_no(+)=b.dpt_no;
83. 如何执行脚本SQL文件?
SQL>@$PATH/filename.sql;
84. 如何快速清空一个大表?
SQL>truncate table table_name;
85. 如何查有多少个数据库实例?
SQL>SELECT * FROM V$INSTANCE;
86. 如何查询数据库有多少表?
SQL>select * from all_tables;
87. 如何测试SQL语句执行所用的时间?
SQL>set timing on ;
SQL>select * from tablename;
88. CHR()的反函数是?
ASCII()
SELECT CHAR(65) FROM DUAL;
SELECT ASCII('A') FROM DUAL;
89. 字符串的连接
SELECT CONCAT(COL1,COL2) FROM TABLE ;
SELECT COL1||COL2 FROM TABLE ;
90. 怎么把select出来的结果导到一个文本文件中?
SQL>SPOOL C:\ABCD.TXT;
SQL>select * from table;
SQL >spool off;
91. 怎样估算SQL执行的I/O数 ?
SQL>SET AUTOTRACE ON ;
SQL>SELECT * FROM TABLE;
OR
SQL>SELECT * FROM v$filestat ;
可以查看IO数
92. 如何在sqlplus下改变字段大小?
alter table table_name modify (field_name varchar2(100));
改大行,改小不行(除非都是空的)
93. 如何查询某天的数据?
select * from table_name where trunc(日期字段)=to_date('2003-05-02','yyyy-mm-
dd');
94. sql 语句如何插入全年日期?
create table BSYEAR (d date);
insert into BSYEAR
select to_date('20030101','yyyymmdd')+rownum-1
from all_objects
where rownum <= to_char(to_date('20031231','yyyymmdd'),'ddd');
95. 如果修改表名?
alter table old_table_name rename to new_table_name;
96. 如何取得命令的返回状态值?
sqlcode=0
97. 如何知道用户拥有的权限?
SELECT * FROM dba_sys_privs ;
98. 从网上下载的ORACLE9I与市场上卖的标准版有什么区别?
从功能上说没有区别,只不过oracle公司有明文规定;从网站上下载的oracle产品不得用于
商业用途,否则侵权。
99. 怎样判断数据库是运行在归档模式下还是运行在非归档模式下?
进入dbastudio,历程--〉数据库---〉归档查看。
100. sql>startup pfile和ifile,spfiled有什么区别?
pfile就是Oracle传统的初始化参数文件,文本格式的。
ifile类似于c语言里的include,用于把另一个文件引入
spfile是9i里新增的并且是默认的参数文件,二进制格式
startup后应该只可接pfile
101. 如何搜索出前N条记录?
SELECT * FROM empLOYEE WHERE ROWNUM < n ORDER BY empno;
102. 如何知道机器上的Oracle支持多少并发用户数?
SQL>conn internal ;
SQL>show parameter processes ;
103. db_block_size可以修改吗?
一般不可以﹐不建议这样做的。
104. 如何统计两个表的记录总数?
select (select count(id) from aa)+(select count(id) from bb) 总数 from al;
105. 怎样用Sql语句实现查找一列中第N大值?
select * from
(select t.*,dense_rank() over (order by sal) rank from employee)
where rank = N;
106. 如何在给现有的日期加上2年?(
select add_months(sysdate,24) from al;
107. USED_UBLK为负值表示什么意思?
It is "harmless".
108. Connect string是指什么?
应该是tnsnames.ora中的服务名后面的内容
109. 怎样扩大REDO LOG的大小?
建立一个临时的redolog组,然后切换日志,删除以前的日志,建立新的日志。
110. tablespace 是否不能大于4G?
没有*.
111. 返回大于等于N的最小整数值?
SELECT CEIL(N) FROM DUAL;
112. 返回小于等于N的最小整数值?
SELECT FLOOR(N) FROM DUAL;
113. 返回当前月的最后一天?
SELECT LAST_DAY(SYSDATE) FROM DUAL;
114. 如何不同用户间数据导入?
IMP SYSTEM/MANAGER FILE=AA.DMP FROMUSER=USER_OLD TOUSER=USER_NEW ROWS=Y INDEXES=Y
115. 如何找数据库表的主键字段的名称?
SQL>SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and
table_name='TABLE_NAME';
116. 两个结果集互加的函数?
SQL>SELECT * FROM BSEMPMS_OLD INTERSECT SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD UNION SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD UNION ALL SELECT * FROM BSEMPMS_NEW;
117. 两个结果集互减的函数?
SQL>SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW;
118. 如何配置Sequence?
建sequence seq_custid
create sequence seq_custid start 1 incrememt by 1;
建表时:
create table cust
{ cust_id smallint not null,
...}
insert 时:
insert into table cust
values( seq_cust.nextval, ...)
日期的各部分的常用的的写法
119>.取时间点的年份的写法:
SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL;
120>.取时间点的月份的写法:
SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL;
121>.取时间点的日的写法:
SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL;
122>.取时间点的时的写法:
SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL;
123>.取时间点的分的写法:
SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL;
124>.取时间点的秒的写法:
SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL;
125>.取时间点的日期的写法:
SELECT TRUNC(SYSDATE) FROM DUAL;
126>.取时间点的时间的写法:
SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL;
127>.日期,时间形态变为字符形态
SELECT TO_CHAR(SYSDATE) FROM DUAL;
oracle查看text文件内容有哪些命令
1.create user username identified by password;//建用户名和密码oracle ,oracle
2.grant connect,resource,dba to username;//授权 grant connect,resource,dba,sysdba to username;
3.connect username/password//进入。
4.select table_name,column_name from user_tab_columns where table_name='mview_log';//查询表中的表名,字段名等等。
5. 如何执行脚本SQL文件? SQL>@PATH/filename.sql;
6.Oracle oledb 提供者在command中执行多条SQL语句与SQL SERVER有少许差别,SQL Server只需使用";"分割多条SQL语句,而Oracle需要遵守ORACLE调用规范,即除分号分割外,还需以begin /end;包围语句体.
使用C#描述应如下所示:
this.oleDbCommand1.CommandText = "begin INSERT INTO GROUP_INFO (GROUP_ID, GROUP_NAME) VALUES (1, \'2\'); INSERT INTO GROUP_INFO(GROUP_ID, GROUP_NAME) VALUES (2, \'2\'); end;";
7.查询用户下的所有表 select distinct table_name from user_tab_columns;
8.如何搜索出前N条记录?Select a.*,rownum from (select * from cardkind order by cardkind ) a where rownum<n
9.查找用户下的所有表:select * from tab;
2、显示当前连接用户
SQL> show user
3、查看系统拥有哪些用户
SQL> select * from all_users;
4、新建用户并授权
SQL> create user a identified by a;(默认建在SYSTEM表空间下)
SQL> grant connect,resource to a;
5、连接到新用户
SQL> conn a/a
6、查询当前用户下所有对象
SQL> select * from tab;
7、建立第一个表
SQL> create table a(a number);
8、查询表结构
SQL> desc a
9、插入新记录
SQL> insert into a values(1);
10、查询记录
SQL> select * from a;
11、更改记录
SQL> update a set a=2;
12、删除记录
SQL> delete from a;
13、回滚
SQL> roll;
SQL> rollback;
14、提交
SQL> commit;
select * from
(select t.*,dense_rank() over (order by cardkind) rank from cardkind t)
where rank = 2;
46. 如何在字符串里加回车?
select 'Welcome to visit'||chr(10)||'www.CSDN.NET' from al ;
47. 中文是如何排序的?
Oracle9i之前,中文是按照二进制编码进行排序的。
在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值
SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序
48. Oracle8i中对象名可以用中文吗?
可以
49. 如何改变WIN中SQL*Plus启动选项?
SQL*PLUS自身的选项设置我们可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中设置。
50. 怎样修改oracel数据库的默认日期?
alter session set nls_date_format='yyyymmddhh24miss';
OR
可以在init.ora中加上一行
nls_date_format='yyyymmddhh24miss'
51. 如何将小表放入keep池中?
alter table xxx storage(buffer_pool keep);
52. 如何检查是否安装了某个patch?
check that oraInventory
53. 如何使select语句使查询结果自动生成序号?
select rownum,COL from table;
54. 如何知道数据裤中某个表所在的tablespace?
select tablespace_name from user_tables where table_name='TEST';
select * from user_tables中有个字段TABLESPACE_NAME,(oracle);
select * from dba_segments where …;
55. 怎么可以快速做一个和原表一样的备份表?
create table new_table as (select * from old_table);
55. 怎么在sqlplus下修改procere?
select line,trim(text) t from user_source where name ='A' order by line;
56. 怎样解除PROCEDURE被意外锁定?
alter system kill session ,把那个session给杀掉,不过你要先查出她的session id
or
把该过程重新改个名字就可以了。
57. SQL Reference是个什么东西?
是一本sql的使用手册,包括语法、函数等等,oracle官方网站的文档中心有下载.
58. 如何查看数据库的状态?
unix下
ps -ef | grep ora
windows下
看服务是否起来
是否可以连上数据库
59. 请问如何修改一张表的主键?
alter table aaa
drop constraint aaa_key ;
alter table aaa
add constraint aaa_key primary key(a1,b1) ;
60. 改变数据文件的大小?
用 ALTER DATABASE .... DATAFILE .... ;
手工改变数据文件的大小,对于原来的 数据文件有没有损害。
61. 怎样查看ORACLE中有哪些程序在运行之中?
查看v$sessions表
62. 怎么可以看到数据库有多少个tablespace?
select * from dba_tablespaces;
63. 如何修改oracle数据库的用户连接数?
修改initSID.ora,将process加大,重启数据库.
64. 如何查出一条记录的最后更新时间?
可以用logminer 察看
65. 如何在PL/SQL中读写文件?
UTL_FILE包允许用户通过PL/SQL读写操作系统文件。
66. 怎样把"&"放入一条记录中?
insert into a values (translate ('at{&}t','at{}','at'));
67. EXP 如何加QUERY参数?
EXP USER/PASS FILE=A.DMP TABLES(BSEMPMS)
QUERY='"WHERE EMP_NO=\'S09394\'\" ﹔
68. 关于oracle8i支持简体和繁体的字符集问题?
ZHS16GBK可以支
69. Data Guard是什么软件?
就是Standby的换代产品
70. 如何创建SPFILE?
SQL> connect / as sysdba
SQL> select * from v$version;
SQL> create pfile from spfile;
SQL> CREATE SPFILE FROM PFILE='E:\ora9i\admin\eygle\pfile\init.ora';
文件已创建。
SQL> CREATE SPFILE='E:\ora9i\database\SPFILEEYGLE.ORA' FROM
PFILE='E:\ora9i\admin\eygle\pfile\init.ora';
文件已创建。
71. 内核参数的应用?
shmmax
含义:这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了
最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。
设置方法:0.5*物理内存
例子:Set shmsys:shminfo_shmmax=10485760
shmmin
含义:共享内存的最小大小。
设置方法:一般都设置成为1。
例子:Set shmsys:shminfo_shmmin=1:
shmmni
含义:系统*享内存段的最大个数。
例子:Set shmsys:shminfo_shmmni=100
shmseg
含义:每个用户进程可以使用的最多的共享内存段的数目。
例子:Set shmsys:shminfo_shmseg=20:
semmni
含义:系统中semaphore identifierer的最大个数。
设置方法:把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大
的那个processes的那个值加10。
例子:Set semsys:seminfo_semmni=100
semmns
含义:系统中emaphores的最大个数。
设置方法:这个值可以通过以下方式计算得到:各个Oracle实例的initSID.ora里边的
processes的值的总和(除去最大的Processes参数)+最大的那个Processes×2+10×
Oracle实例的个数。
例子:Set semsys:seminfo_semmns=200
semmsl:
含义:一个set中semaphore的最大个数。
设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。
例子:Set semsys:seminfo_semmsl=-200
72. 怎样查看哪些用户拥有SYSDBA、SYSOPER权限?
SQL>conn sys/change_on_install
SQL>select * from V_$PWFILE_USERS;
73. 如何单独备份一个或多个表?
exp 用户/密码 tables=(表1,…,表2)
74. 如何单独备份一个或多个用户?
exp system/manager owner=(用户1,用户2,…,用户n) file=导出文件
75. 如何对CLOB字段进行全文检索?
SELECT * FROM A WHERE dbms_lob.instr(a.a,'K',1,1)>0; 76. 如何显示当前连接用户?
SHOW USER
77. 如何查看数据文件放置的路径 ?
col file_name format a50
SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files
order by file_id;
78. 如何查看现有回滚段及其状态 ?
SQL> col segment format a30
SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE _ID,STATUS FROM
DBA_ROLLBACK_SEGS
79. 如何改变一个字段初始定义的Check范围?
SQL> alter table xxx drop constraint constraint_name;
之后再创建新约束:
SQL> alter table xxx add constraint constraint_name check();
80. Oracle常用系统文件有哪些?
通过以下视图显示这些文件信息:v$database,v$datafile,v$logfile v$controlfile
v$parameter;
81. 内连接INNER JOIN?
Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no;
82. 如何外连接?
Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no(+);
Select a.* from bsempms a,bsdptms b wherea.dpt_no(+)=b.dpt_no;
83. 如何执行脚本SQL文件?
SQL>@$PATH/filename.sql;
84. 如何快速清空一个大表?
SQL>truncate table table_name;
85. 如何查有多少个数据库实例?
SQL>SELECT * FROM V$INSTANCE;
86. 如何查询数据库有多少表?
SQL>select * from all_tables;
87. 如何测试SQL语句执行所用的时间?
SQL>set timing on ;
SQL>select * from tablename;
88. CHR()的反函数是?
ASCII()
SELECT CHAR(65) FROM DUAL;
SELECT ASCII('A') FROM DUAL;
89. 字符串的连接
SELECT CONCAT(COL1,COL2) FROM TABLE ;
SELECT COL1||COL2 FROM TABLE ;
90. 怎么把select出来的结果导到一个文本文件中?
SQL>SPOOL C:\ABCD.TXT;
SQL>select * from table;
SQL >spool off;
91. 怎样估算SQL执行的I/O数 ?
SQL>SET AUTOTRACE ON ;
SQL>SELECT * FROM TABLE;
OR
SQL>SELECT * FROM v$filestat ;
可以查看IO数
92. 如何在sqlplus下改变字段大小?
alter table table_name modify (field_name varchar2(100));
改大行,改小不行(除非都是空的)
93. 如何查询某天的数据?
select * from table_name where trunc(日期字段)=to_date('2003-05-02','yyyy-mm-
dd');
94. sql 语句如何插入全年日期?
create table BSYEAR (d date);
insert into BSYEAR
select to_date('20030101','yyyymmdd')+rownum-1
from all_objects
where rownum <= to_char(to_date('20031231','yyyymmdd'),'ddd');
95. 如果修改表名?
alter table old_table_name rename to new_table_name;
96. 如何取得命令的返回状态值?
sqlcode=0
97. 如何知道用户拥有的权限?
SELECT * FROM dba_sys_privs ;
98. 从网上下载的ORACLE9I与市场上卖的标准版有什么区别?
从功能上说没有区别,只不过oracle公司有明文规定;从网站上下载的oracle产品不得用于
商业用途,否则侵权。
99. 怎样判断数据库是运行在归档模式下还是运行在非归档模式下?
进入dbastudio,历程--〉数据库---〉归档查看。
100. sql>startup pfile和ifile,spfiled有什么区别?
pfile就是Oracle传统的初始化参数文件,文本格式的。
ifile类似于c语言里的include,用于把另一个文件引入
spfile是9i里新增的并且是默认的参数文件,二进制格式
startup后应该只可接pfile
101. 如何搜索出前N条记录?
SELECT * FROM empLOYEE WHERE ROWNUM < n ORDER BY empno;
102. 如何知道机器上的Oracle支持多少并发用户数?
SQL>conn internal ;
SQL>show parameter processes ;
103. db_block_size可以修改吗?
一般不可以﹐不建议这样做的。
104. 如何统计两个表的记录总数?
select (select count(id) from aa)+(select count(id) from bb) 总数 from al;
105. 怎样用Sql语句实现查找一列中第N大值?
select * from
(select t.*,dense_rank() over (order by sal) rank from employee)
where rank = N;
106. 如何在给现有的日期加上2年?(
select add_months(sysdate,24) from al;
107. USED_UBLK为负值表示什么意思?
It is "harmless".
108. Connect string是指什么?
应该是tnsnames.ora中的服务名后面的内容
109. 怎样扩大REDO LOG的大小?
建立一个临时的redolog组,然后切换日志,删除以前的日志,建立新的日志。
110. tablespace 是否不能大于4G?
没有*.
111. 返回大于等于N的最小整数值?
SELECT CEIL(N) FROM DUAL;
112. 返回小于等于N的最小整数值?
SELECT FLOOR(N) FROM DUAL;
113. 返回当前月的最后一天?
SELECT LAST_DAY(SYSDATE) FROM DUAL;
114. 如何不同用户间数据导入?
IMP SYSTEM/MANAGER FILE=AA.DMP FROMUSER=USER_OLD TOUSER=USER_NEW ROWS=Y INDEXES=Y
115. 如何找数据库表的主键字段的名称?
SQL>SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and
table_name='TABLE_NAME';
116. 两个结果集互加的函数?
SQL>SELECT * FROM BSEMPMS_OLD INTERSECT SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD UNION SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD UNION ALL SELECT * FROM BSEMPMS_NEW;
117. 两个结果集互减的函数?
SQL>SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW;
118. 如何配置Sequence?
建sequence seq_custid
create sequence seq_custid start 1 incrememt by 1;
建表时:
create table cust
{ cust_id smallint not null,
...}
insert 时:
insert into table cust
values( seq_cust.nextval, ...)
日期的各部分的常用的的写法
119>.取时间点的年份的写法:
SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL;
120>.取时间点的月份的写法:
SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL;
121>.取时间点的日的写法:
SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL;
122>.取时间点的时的写法:
SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL;
123>.取时间点的分的写法:
SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL;
124>.取时间点的秒的写法:
SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL;
125>.取时间点的日期的写法:
SELECT TRUNC(SYSDATE) FROM DUAL;
126>.取时间点的时间的写法:
SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL;
127>.日期,时间形态变为字符形态
SELECT TO_CHAR(SYSDATE) FROM DUAL;
oracle笔记-动态SQL
第 章 动态SQL
为何使用动态SQL
实现动态SQL有两种方式 DBMS_SQL和本地动态SQL(EXECUTE IMMEIDATE)
主要从以下方面考虑使用哪种方式
是否知道涉及的列数和类型
DBMS_SQL包括了一个可以 描述 结果集的存储过程(DBMS_SQL DESCRIBE_COLUMNS) 而本地动态SQL没有
是否知道可能涉及的绑定变量数和类型
DBMS_SQL允许过程化的绑定语句的输入 而本地动态SQL需要在编译时确定
是否使用 数组化 操作(Array Processing)
DBMS_SQL允许 而本地动态SQL基本不可以 但可以用其他方式实现(对查询可用FETCH BULK COLLECT INTO 对INSERT等 可用一个BEGIN … END块中加循环实现)
是否在同一个会话中多次执行同一语句
DBMS_SQL可以分析一次执行多次 而本地动态SQL会在每次执行时进行软分析
是否需要用REF CURSOR返回结果集
仅本地动态SQL可用REF CURSOR返回结果集
如何使用动态SQL
DBMS_SQL
调用OPEN_CURSOR获得一个游标句柄
调用PARSE分析语句 一个游标句柄可以用于多条不同的已分析语句 但一个时间点仅一条有效
调用BIND_VARIABLE或BIND_ARRAY来提供语句的任何输入
若是一个查询(SELECT语句) 调用DIFINE_COLUMN或DEFINE_ARRAY来告知Oracle如何返回结果
调用EXECUTE执行语句
若是一个查询 调用FETCH_ROWS来读取数据 可以使用COLUMN_VALUE从SELECT列表根据位置获得这些值
否则 若是一个PL/SQL块或带有RETURN子句的DML语句 可以调用VARIABLE_VALUE从块中根据变量名获得OUT值
调用CLOSE_CURSOR
注意这里对任何异常都应该处理 以关闭游标 防止泄露资源
本地动态SQL
EXECUTE IMMEDIATE 语句
[INTO {变量 变量 … 变量N | 记录体}]
[USING [IN | OUT | IN OUT] 绑定变量 … 绑定变量N]
[{RETURNING | RETURN} INTO 输出 [ … 输出N]…]
注意本地动态SQL仅支持弱类型REF CURSOR 即对于REF CURSOR 不支持BULK COLLECT
最后说明
lishixin/Article/program/Oracle/201311/18948oracle存储过程传入一个字符串参数'1,2,3,4,5,6,7,8',如何分割并转为数字?
create or replace type type_split as table of varchar2(50); --创建一个 type ,如果为了使split函数具有通用性,请将其size 设大些。x0dx0ax0dx0a--创建functionx0dx0acreate or replace function splitx0dx0a(x0dx0a p_list varchar2,x0dx0a p_sep varchar2 := ','x0dx0a) return type_split pipelinedx0dx0a isx0dx0a l_idx pls_integer;x0dx0a v_list varchar2(50) := p_list;x0dx0abeginx0dx0a loopx0dx0a l_idx := instr(v_list,p_sep);x0dx0a if l_idx > 0 thenx0dx0a pipe row(substr(v_list,1,l_idx-1));x0dx0a v_list := substr(v_list,l_idx+length(p_sep));x0dx0a elsex0dx0a pipe row(v_list);x0dx0a exit;x0dx0a end if;x0dx0a end loop;x0dx0a return;x0dx0aend split;x0dx0ax0dx0a使用:x0dx0a select * from table(split('1,2,3,4,5,6,7,8'x0dx0a,','));x0dx0a然后就可以通过“,”来分割数字了