您的位置:首页 > 数据库 > Oracle

oracle 学习笔记1

2012-04-11 16:17 369 查看
当前系统时间?
SQL> select sysdate from dual;
SYSDATE
--------------
22-3月 -12
打开数据库时间:
SQL> set timing on ------sql执行时间
SQL> set time on -------行时间
23:00:13 SQL>
修改用户密码?
23:02:26 SQL> password
更改 SYS 的口令
旧口令:
新口令:
重新键入新口令:
23:04:04 SQL> alter user scott identified by tiger;
用户已更改。
已用时间: 00: 00: 00.14
查询用户的表?
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
DEPT
EMP
BONUS
SALGRADE
SQL语句执行顺序?
1--from
2--where
3--group by
4--having
5--select
6--order by

启动数据库监听命令?
lsnctrl
启动配置监听命令?
netca
查看使用的是那个数据库?
SQL> select name from v$database;
NAME
---------
TEST
查看控制文件?
SQL> select * from dict where table_name='V$CONTROLFILE';
TABLE_NAME
------------------------------
COMMENTS
----------------------------------------------------------
V$CONTROLFILE
Synonym for V_$CONTROLFILE
SQL> show parameter control_files;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string E:\WINSERVER\OCP11G\CONTROL01.
CTL, E:\WINSERVER\OCP11G\CONTR
OL02.CTL, E:\WINSERVER\OCP11G\
CONTROL03.CTL
数据文件改成离线?
SQL> alter database datafile 'E:\WINSERVER\OCP11G\UNDOTBS01.DBF' offline;
在线?
SQL> alter database datafile 'E:\WINSERVER\OCP11G\UNDOTBS01.DBF' online;
查看临时表空间?
SQL> select name from v$tempfile
2 ;
NAME
-----------------------------------
E:\WINSERVER\OCP11G\TEMP01.DBF

v$*和dba_*的区别?
两者不是一个东西,v$*是动态的内容比dba_*更加全。在一个dba_*只有数据库处于open时候才可用,而v$*数据库在mount状态时即可用。
redo和logfile区别联系:重做日志文件在一定条件下写入联机重做日志文件
创建重做日志文件?
SQL>alter database add logfile group 4 ('E:\WINSERVER\OCP11G\REDO001.LOG',
'E:\WINSERVER\OCP11G\REDO002.LOG') size 50m
删除?
SQL> alter database drop logfile group 4;
数据库已更改。
注意只是数据库中查不到了,彻底的删除要在所在目录下删除!
重做日志添加成员?
SQL>alter database add logfile member 4 ('E:\WINSERVER\OCP11G\REDO001.LOG',
'E:\WINSERVER\OCP11G\REDO002.LOG') size 50m
删除成员?
SQL>alter database add logfile member 4 ('E:\WINSERVER\OCP11G\REDO001.LOG',
'E:\WINSERVER\OCP11G\REDO002.LOG') size 50m
如果数据库处于 force logging 状态时,ddl语句附加nologging子句或是dml语句指定hint append 也不起作用,那么怎么查看是不是该状态呢?
SQL> select force_logging from v$database;
FOR
---
NO
怎么更改呢?
SQL> alter database force logging;
数据库已更改。
SQL> alter database no force logging;
数据库已更改。
查看是否是归档日志文件?
SQL> archive log list;
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 4
当前日志序列 6
改变其为存档模式?
该路径:
SQL> alter system set log_archive_dest_1='E:\WINSERVER\OCP11G\';
alter system set log_archive_dest_1='E:\WINSERVER\OCP11G\'
*
第 1 行出现错误:
ORA-32017: 更新 SPFILE 时失败
ORA-16179: 不允许使用 SPFILE 对 "log_archive_dest_1" 进行增量更改
更改:
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 535662592 bytes
Fixed Size 1348508 bytes
Variable Size 226495588 bytes
Database Buffers 301989888 bytes
Redo Buffers 5828608 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 5
下一个存档日志序列 7
当前日志序列 7
D:\Documents and Settings\Administrator>rman target /
恢复管理器: Release 11.1.0.7.0 - Production on 星期五 3月 23 22:27:38 2012
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到目标数据库: OCP11G (DBID=3548052968)
RMAN> backup database format 'e:\bak_%U';
启动 backup 于 23-3月 -12
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=125 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00001 名称=E:\WINSERVER\OCP11G\SYSTEM01.DBF
输入数据文件: 文件号=00002 名称=E:\WINSERVER\OCP11G\SYSAUX01.DBF
输入数据文件: 文件号=00003 名称=E:\WINSERVER\OCP11G\UNDOTBS01.DBF
输入数据文件: 文件号=00004 名称=E:\WINSERVER\OCP11G\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 23-3月 -12
通道 ORA_DISK_1: 已完成段 1 于 23-3月 -12
段句柄=E:\BAK_01N6KIJE_1_1 标记=TAG20120323T223006 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:35
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 23-3月 -12
通道 ORA_DISK_1: 已完成段 1 于 23-3月 -12
段句柄=E:\BAK_02N6KIME_1_1 标记=TAG20120323T223006 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 23-3月 -12
显示输出信息?
set serveroutput on
网络文件中的tnsnames.ora中定义的服务名连接数据库?
D:\Documents and Settings\Administrator>sqlplus scott/tiger @opc11g as sysdba
SQL*Plus: Release 11.1.0.7.0 - Production on 星期日 3月 25 22:15:07 2012
Copyright (c) 1982, 2008, Oracle. All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SP2-0310: 无法打开文件 "opc11g.sql"
SQL> show user
USER 为 "SCOTT"
看看tnsnames.ora文件中的服务名是不是opc11g.sql :
OCP11G = ---------------------------------看到了吧!
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xianyang-08b919)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ocp11g)
)
)
注意了:如果是简易的连接那么就不需要tnsnames.ora文件了。
特殊情况下使用(-)继续符?
SQL> select 200 -
> 100 from dual;
select 200 100 from dual
*
第 1 行出现错误:
ORA-00923: 未找到要求的 FROM 关键字
SQL> select 200 -
> - 100 from dual
2 ;
200-100
----------
100
SQL> select 200 - -
> 100 from dual;
到底输入命令那种方式结束呢?
本地命令copy、compute、rem、linesize直接回车即可;服务器执行的sql以;或/结束;所有的pl/sql类命令以/结束。

200-100
----------
100
两种写法请看清楚有空格的地方一定不要忽视呀!
desc product_user_profile表的查看?
SQL> desc product_user_profile;
名称 是否为空? 类型
----------------------------------------- -------- -----------------------
PRODUCT NOT NULL VARCHAR2(30)
USERID VARCHAR2(30)
ATTRIBUTE VARCHAR2(240)
SCOPE VARCHAR2(240)
NUMERIC_VALUE NUMBER(15,2)
CHAR_VALUE VARCHAR2(240)
DATE_VALUE DATE
LONG_VALUE LONG
常用命令查找及解析帮助?
SQL> help index
Enter Help [topic] for help.
@ COPY PAUSE SHUTDOWN
@@ DEFINE PRINT SPOOL
/ DEL PROMPT SQLPLUS
ACCEPT DESCRIBE QUIT START
APPEND DISCONNECT RECOVER STARTUP
ARCHIVE LOG EDIT REMARK STORE
ATTRIBUTE EXECUTE REPFOOTER TIMING
BREAK EXIT REPHEADER TTITLE
BTITLE GET RESERVED WORDS (SQL) UNDEFINE
CHANGE HELP RESERVED WORDS (PL/SQL) VARIABLE
CLEAR HOST RUN WHENEVER OSERROR
COLUMN INPUT SAVE WHENEVER SQLERROR
COMPUTE LIST SET XQUERY
CONNECT PASSWORD SHOW
详细:
SQL> help show
SHOW
----
Shows the value of a SQL*Plus system variable, or the current
SQL*Plus environment. SHOW SGA requires a DBA privileged login.
SHO[W] option
where option represents one of the following terms or clauses:
system_variable
ALL
BTI[TLE]
ERR[ORS] [{FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY | TRIGGER
| VIEW | TYPE | TYPE BODY | DIMENSION | JAVA CLASS} [schema.]name]
LNO
PARAMETERS [parameter_name]
PNO
RECYC[LEBIN] [original_name]
REL[EASE]
REPF[OOTER]
REPH[EADER]
SGA
SPOO[L]
SPPARAMETERS [parameter_name]
SQLCODE
TT[ITLE]
USER
查看sql错误日志?
SQL> set errorlogging
SP2-0265: errorlogging 必须设置为 ON 或 OFF
SQL> set errorlogging on
SQL> show errorlogging
errorlogging is ON TABLE SYS.SPERRORLOG
可以查看SYS.SPERRORLOG文件。
表头的打开?
SQL> ttitle on
SQL> show ttitle
ttitle ON 为下一条 SELECT 语句的前几个字符
过程的结束和执行?
SQL> begin
2 dbms_output.put_line('hello');
3 end;
4 .
SQL> /
PL/SQL 过程已成功完成。
SQL> set serveroutput on
SQL> /
hello
格式输出?
SQL> col ename format a10
SQL> col sal format l9999.99
SQL> select ename,sal from emp where empno=7788;
ENAME SAL
---------- ------------------
SCOTT ¥3000.00
运行os命令?

SQL> host dir d:\
驱动器 D 中的卷没有标签。
卷的序列号是 3419-97BE
d:\ 的目录
2011-03-16 14:45 <DIR> 2010
2010-11-23 12:55 25 BoxDialog.txt
2002-11-29 23:07 <DIR> Documents and Settings
2011-03-05 22:24 <DIR> http
2011-03-09 17:07 <DIR> Inetpub
2002-11-30 16:15 <DIR> Intel
2011-02-21 17:35 <DIR> Microsoft Visual Studio
2010-11-04 22:08 <DIR> MSDN98
2012-03-18 18:14 <DIR> Program files
2010-11-19 19:40 <DIR> SecureCRT
2011-03-05 22:25 <DIR> SimpleHttpSvr
2010-11-08 23:11 <DIR> sniffer
2012-02-21 11:54 <DIR> temp
2010-11-23 13:41 <DIR> TTPmusic
2011-02-21 17:32 <DIR> vb
2011-11-30 21:28 <DIR> VB98
2012-03-26 13:08 <DIR> WINDOWS
2012-02-16 19:16 <DIR> winserver
2011-03-14 16:53 <DIR> wmpub
2000-07-27 18:00 <DIR> zhandian
1 个文件 25 字节
19 个目录 615,538,688 可用字节
编辑并执行.sql 文件?
SQL> edit f:\mytedit.sql
SQL> @ f:\mytedit.sql
EMPNO ENAME JOB MGR HIREDATE SAL
---------- ---------- --------- ---------- -------------- ------------------
COMM DEPTNO
---------- ----------
7369 SMITH CLERK 7902 17-12月-80 ¥800.00
20
7499 ALLEN SALESMAN 7698 20-2月 -81 ¥1600.00
300 30
7521 WARD SALESMAN 7698 22-2月 -81 ¥1250.00
500 30
定义替代变量?
SQL> define name='scott'
SQL> define name
DEFINE NAME = "scott" (CHAR)
SQL>
注释:remark -- 和
同义词的查询数据字典及其它的同义词?
SQL> select * from dict where table_name='SYN';
TABLE_NAME
------------------------------
COMMENTS
-----------------------------------------------------------
SYN
Synonym for USER_SYNONYMS

不输出多余提示信息?
SQL> set verify off
SQL> declare
2 v_ename varchar2(5);
3 begin
4 select ename into v_ename from emp
5 where empno=&no;
6 dbms_output.put_line('雇员名字'||v_ename);
7 end;
8 .
SQL> /
输入 no 的值: 7788
雇员名字SCOTT
PL/SQL 过程已成功完成。
SQL> ed
已写入 file afiedt.buf
1 declare
2 v_sal number:=&no;
3 v_ename varchar2(5);
4 begin
5 select ename into v_ename from emp where empno=v_sal;
6 dbms_output.put_line('雇员名称'||v_ename);
7* end;
SQL> /
输入 no 的值: 7788
雇员名称SCOTT
PL/SQL 过程已成功完成。

带有异常判断的存储过程?
SQL> declare
2 v_ename varchar2(5);
3 begin
4 select ename into v_ename from emp where empno=&no;
5 dbms_output.put_line('雇员名称'||v_ename);
6 exception
7 when no_data_found then
8 dbms_output.put_line('请输入正确的雇员号!');
9 end;
10 .
SQL> /
输入 no 的值: 65

请输入正确的雇员号!
PL/SQL 过程已成功完成。
选择过程的实现?
SQL> ed
已写入 file afiedt.buf
1 declare
2 sal number:=500;
3 comm number;
4 begin
5 if sal<100 then
6 comm:=0;
7 elsif sal<600 then
8 comm:=sal*0.1;
9 elsif sal<1000 then
10 comm:=sal*0.15;
11 else
12 comm:=sal*0.2;
13 end if;
14 dbms_output.put_line(comm);
15* end;
SQL> /
50
case语句的实现?
SQL> ed
已写入 file afiedt.buf
1 declare
2 v_sal number:=1000;
3 v_tax number;
4 begin
5 case
6 when v_sal<1500 then
7 v_tax:=v_sal*0.03;
8 when v_sal<2500 then
9 v_tax:=v_sal*0.04;
10 when v_sal<3500 then
11 v_tax:=v_sal*0.05;
12 when v_sal<8000 then
13 v_tax:=v_sal*0.08;
14 end case;
15 dbms_output.put_line(v_tax);
16* end;
SQL> /
30
将日期型转换成字符型?
SQL> select to_char(hiredate,'yyyy-mm-dd') from emp;
TO_CHAR(HI
----------
1980-12-17
1981-02-20
1981-02-22
1981-04-02
1981-09-28
1981-05-01
1981-06-09
1987-04-19
1981-11-17
1981-09-08
1987-05-23
TO_CHAR(HI
----------
1981-12-03
1981-12-03
1982-01-23
已选择14行。

中文显示日期型?
SQL> alter session set nls_date_language='simplified chinese';
会话已更改。
SQL> select ename ,hiredate from emp;
ENAME HIREDATE
---------- --------------
SMITH 17-12月-80
ALLEN 20-2月 -81
WARD 22-2月 -81
JONES 02-4月 -81
MARTIN 28-9月 -81
BLAKE 01-5月 -81
CLARK 09-6月 -81
以美式显示时间?
SQL> alter session set nls_date_language='american';
会话已更改。
SQL> select ename ,hiredate from emp;
ENAME HIREDATE
---------- ------------
SMITH 17-DEC-80
ALLEN 20-FEB-81
WARD 22-FEB-81
JONES 02-APR-81
MARTIN 28-SEP-81
BLAKE 01-MAY-81
CLARK 09-JUN-81
SCOTT 19-APR-87
KING 17-NOV-81
TURNER 08-SEP-81
ADAMS 23-MAY-87
以特定格式显示日期?
SQL> alter session set nls_date_format='yyyy"年"mm"月"dd"日"';
会话已更改。
SQL> select ename ,hiredate from emp;
ENAME HIREDATE
---------- --------------
SMITH 1980年12月17日
ALLEN 1981年02月20日
WARD 1981年02月22日
JONES 1981年04月02日
MARTIN 1981年09月28日
BLAKE 1981年05月01日
CLARK 1981年06月09日
SCOTT 1987年04月19日
KING 1981年11月17日
TURNER 1981年09月08日
ADAMS 1987年05月23日
对于NULL值的处理?
不处理的结果是没有对应的值:
SQL> select ename,sal,comm,sal+comm from emp;
ENAME SAL COMM SAL+COMM
---------- ---------- ---------- ----------
SMITH 800
ALLEN 1600 300 1900
WARD 1250 500 1750
JONES 2975
MARTIN 1250 1400 2650
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
TURNER 1500 0 1500
ADAMS 1100
用nvl函数处理空值:
SQL> select ename ,sal,comm,sal+nvl(comm,0) from emp;
ENAME SAL COMM SAL+NVL(COMM,0)
---------- ---------- ---------- ---------------
SMITH 800 800
ALLEN 1600 300 1900
WARD 1250 500 1750
JONES 2975 2975
MARTIN 1250 1400 2650
BLAKE 2850 2850
CLARK 2450 2450
SCOTT 3000 3000
KING 5000 5000
TURNER 1500 0 1500
ADAMS 1100 1100
使用nvl2函数处理空值:
SQL> select ename ,sal,comm,sal+nvl2(comm,sal+comm,sal) from emp;
ENAME SAL COMM SAL+NVL2(COMM,SAL+COMM,SAL)
---------- ---------- ---------- ---------------------------
SMITH 800 1600
ALLEN 1600 300 3500
WARD 1250 500 3000
JONES 2975 5950
MARTIN 1250 1400 3900
BLAKE 2850 5700
CLARK 2450 4900
SCOTT 3000 6000
KING 5000 10000
TURNER 1500 0 3000
ADAMS 1100 2200
连接字符串||和函数concat?
SQL> select ename ||''''||'s job is'||job from emp;
ENAME||''''||'SJOBIS'||JOB
----------------------------
SMITH's job isCLERK
ALLEN's job isSALESMAN
WARD's job isSALESMAN
JONES's job isMANAGER
MARTIN's job isSALESMAN
BLAKE's job isMANAGER
CLARK's job isMANAGER
SCOTT's job isANALYST
KING's job isPRESIDENT
TURNER's job isSALESMAN
ADAMS's job isCLERK
ENAME||''''||'SJOBIS'||JOB
----------------------------
JAMES's job isCLERK
FORD's job isANALYST
MILLER's job isCLERK
已选择14行。
SQL> select concat(concat(ename,'''s salary is '),sal) from emp;
CONCAT(CONCAT(ENAME,'''SSALARYIS'),SAL)
---------------------------------------------------------------
SMITH's salary is 800
ALLEN's salary is 1600
WARD's salary is 1250
JONES's salary is 2975
MARTIN's salary is 1250
BLAKE's salary is 2850
CLARK's salary is 2450
SCOTT's salary is 3000
KING's salary is 5000
TURNER's salary is 1500
ADAMS's salary is 1100
获得ascii码值?
SQL> select ascii('w') from dual;
ASCII('W')
----------
119
怎样得到对应的字符呢?
SQL> select chr(119) from dual;
C
-
w
查看约束的数据字典?
SQL> select * from dict where table_name like '%CONSTRAINTS%';
TABLE_NAME
------------------------------
COMMENTS
--------------------------------------------------------------------------
DBA_CONSTRAINTS
Constraint definitions on all tables
USER_CONSTRAINTS
Constraint definitions on user's own tables
ALL_CONSTRAINTS
Constraint definitions on accessible tables
创建表结构?
SQL> create table mgr_history
2 as select ename,mgr,sal from emp where 1=0
3 /
表已创建。
无条件见的插入?
SQL> insert all
2 into sal_history values(ename,hiredate,sal)
3 into mgr_history values(ename,mgr,sal)
4 select ename,hiredate,mgr,sal from emp;
已创建28行。
有条件的插入?
SQL> insert all
2 when sal>1000 then
3 into sal_history values(ename,hiredate,sal)
4 select ename,hiredate,mgr,sal from emp;
已创建12行。
有条件的第一个插入?
SQL> ed
已写入 file afiedt.buf
1 insert first
2 when sal>3000 then
3 into sal_history values(ename,hiredate,sal)
4* select ename,hiredate,mgr,sal from emp
SQL> /
已创建 1 行。
SQL> select * from sal_history;
ENAME HIREDATE SAL
---------- -------------- ----------
KING 17-11月-81 5000
merge语句的应用?
SQL> create table new as select * from emp where 1=0;
表已创建。
SQL> insert into new(empno,ename)
2 select empno,ename from emp where deptno=10;
已创建3行。
SQL> merge into new n using emp e on (n.empno=e.empno)
2 when matched then update set n.sal=e.sal
3 when not matched then
4 insert (n.empno,n.ename,n.sal,n.comm)
5 values(e.empno,e.ename,e.sal,e.comm);
14 行已合并。
截断表?
SQL> truncate table new;
表被截断。
SQL> select * from new;
未选定行
外连接怎样用?
SQL> select d.dname,e.ename from dept d, emp e
2 where d.deptno=e.deptno(+) and e.deptno(+)=10;
DNAME ENAME
-------------- ----------
ACCOUNTING CLARK
ACCOUNTING MILLER
ACCOUNTING KING
RESEARCH
SALES
OPERATIONS
已选择6行。

左右连接?
SQL> select a.dname,b.ename from dept a right join emp b
2 on a.deptno=b.deptno and a.deptno=10;
DNAME ENAME
-------------- ----------
ACCOUNTING MILLER
ACCOUNTING KING
ACCOUNTING CLARK
JAMES
TURNER
BLAKE
MARTIN
WARD
ALLEN
FORD
ADAMS
DNAME ENAME
-------------- ----------
SCOTT
JONES
SMITH
已选择14行。
SQL> ed
已写入 file afiedt.buf
1 select a.dname,b.ename from dept a left join emp b
2* on a.deptno=b.deptno and a.deptno=10
SQL> /
DNAME ENAME
-------------- ----------
ACCOUNTING CLARK
ACCOUNTING KING
ACCOUNTING MILLER
RESEARCH
SALES
OPERATIONS
已选择6行。
SQL> ed
已写入 file afiedt.buf
1 select a.dname,b.ename from dept a full join emp b
2* on a.deptno=b.deptno and a.deptno=10
SQL> /
DNAME ENAME
-------------- ----------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
ACCOUNTING CLARK
SCOTT
ACCOUNTING KING
TURNER
ADAMS
DNAME ENAME
-------------- ----------
JAMES
FORD
ACCOUNTING MILLER
SALES
OPERATIONS
RESEARCH
已选择17行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle it