ORACLE 10 学习笔记-第4课-命令。
1.commit;rollback;
2.select * from dictionary;
describe dba_users;
select * from dba_users;
select name from v$controlfile;
3.
alter database drop logfile group 3
select archiver from v$instance;
alter tablespace userdata read only;
4.
select tablespace_name, file_name,autoextensible from dba_data_files;
alter tablespace user_data add datafile '/u01/oradata/userdata03.dbf' size 200M;
alter database rename file '/u01/oradata/system01.dbf' to '/u03/oradata/system01.dbf';
select segment_name, tablespace_name, extents,blocks
from dba_segments where owner='hr';
5.
select tablespace_name,count(*),max(blocks),sum(blocks)
from dba_free_space group by tablespace_name;
6.
set transaction read only;
set transaction isolation level serializable;
alter system set undo_tablespace=undotbs;
select end_time,begin_time,undoblks from v$undostat;
select department_id, rowid from hr.departments;
7.创建临时表
create global temporary table hr.employe ......
1. select * from emp;
2. select empno, ename, job from emp;
3. select empno 编号, ename 姓名, job 工作 from emp;
4. select job from emp;
5. select distinct job from emp;
6. select distinct empno, job from emp;
说明:因为雇员编号不重复, 所以此时证明所有的列没有重复,所以不能消除掉重复的列.
7. 查询出雇员的编号, 姓名, 工作, 但是显示的格式:编号是: 7369 的雇员, 姓名是: smith, 工作是: clear
select '编号是: ' || empno || '的雇员, 姓名是: ' || ename || ', 工作是: ' || job from emp;
8. 求出每个雇员的姓名及年薪
select ename, sal * 12 income from emp;
9. 求出工资大于 1500 的所有雇员信息
select * from emp where sal > 1500;
10. 查询每月可以得到奖金的雇员信息
select * from emp where comm is not null;
11. 查询没有奖金的雇员信息
select * from emp where comm is null;
12. 查询出基本工资大于 1500 同时可以领取奖金的雇员信息
select * from emp where sal > 1500 and comm is not null;
13. 查询出基本工资大于 1500 或者可以领取奖金的雇员信息
select * from emp where ......
我们知道,在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为:
alter system kill session 'sid,serial#' ;
被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程.
我们发现当一个session被kill掉以后,该session的paddr被修改,如果有多个session被kill,那么多个session的paddr都被更改为相同的进程地址:
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;
SADDR SID SERIAL# PADDR USERNAME STATUS
-------- ---------- ---------- -------- ------------------------------ --------
542E0E6C 11 314 542B70E8 EYGLE INACTIVE
542E5044   ......
author:skate
time:2010/03/16
当系统出现性能瓶颈时,尽量较少不必要的资源消耗,最后就是平衡cpu,内存,io,network等资源,使数据库
可以稳定的运行。
oracle数据库优化的根本是
1.尽量减少资源消耗,例如优化sql,减少sql本身的资源消耗
2.如果无法进一步减少资源的消耗,那就让数据尽量靠近cpu,也就是把数据从硬盘转移到内存(内存的读写速度快)
或者换更快的磁盘
本文就简单总结下如何缓存数据和数据库对象(也就是把数据移向内存,提高内存的命中率,以提高整体io速度)
1.缓存数据
2.缓存数据对象的定义,例如package,procedure,pl/sql和sql(也就是cursor)等
上面说的这两种数据就存在oracle最重要的两个部件中share pool和buffer pool中,提高这两个pool的命中率也提高了
io速度,而io又是当今技术发展最慢,系统的最大的瓶颈。
1. 缓存数据
这里说的oracle数据是占大量存储空间的,不是存在数据库字典里的数据;oracle的数据的类型一般为:
SQL> select se.segment_type from dba_segments se group by se.segment_type;
SEGMENT_TYPE
------------------
LOBINDEX
INDEX PARTITION
TABLE PARTITION
NESTED TABLE
ROLLBA ......
SELECT ID,
col_name,
SUBSTR(col_name, 1, INSTR(col_name || ',', ',', 1, 1) - 1) C1,
SUBSTR(col_name,
INSTR(col_name || ',', ',', 1, 1) + 1,
INSTR(col_name || ',', ',', 1, 2) - INSTR(col_name || ',', ',', 1, 1) - 1) C2,
SUBSTR(col_name,
INSTR(col_name || ',', ',', 1, 2) + 1,
INSTR(col_name || ',', ',', 1, 3) - INSTR(col_name || ',', ',', 1, 2) - 1) C3
from tab_name ......
Oracle lpad 函数:
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://soysky.blogbus.com/logs/43623642.html
Oracle lpad函数将左边的字符串填充一些特定的字符,其语法格式如下:
lpad( string1, padded_length [, pad_string ] )
其中:
string1是需要粘贴字符的字符串;
padded_length是返回的字符串的数量,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成padded_length;pad_string是个可选参数,这个字符串是要粘贴到string1的左边,如果这个参数未写,lpad函数将会在string1的左边粘贴空格。
例如:
lpad('tech', 7); 将返回' tech'
lpad('tech', 2); 将返回'te'
lpad('tech', 8, '0'); 将返回'0000tech'
lpad('tech on the net', 15, 'z'); 将返回 'tech on the net'
lpad('tech on the net', 16, 'z'); 将返回 'ztech on the net'
Lpad(str1,number,str2),简单说这个函数的意思是,如果str1不足number那么多位,则使用str2去补齐左边的空
eg:
SELECT lpad('***', 6, 'orcal') from dual
--结果
orc***
......