一、ORACLE的启动和关闭
1、在单机环境?br />要想启动或关闭ORACLEpȝ必须首先切换到ORACLE用户Q如?br />su - oracle
a、启动ORACLEpȝ
oracle>svrmgrl
SVRMGR>connect internal
SVRMGR>startup
SVRMGR>quit
b、关闭ORACLEpȝ
oracle>svrmgrl
SVRMGR>connect internal
SVRMGR>shutdown
SVRMGR>quit
启动oracle9i数据库命令:(x)
Q?nbsp;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^C
SQL> startup
ORACLE instance started.
2、在双机环境?br />要想启动或关闭ORACLEpȝ必须首先切换到root用户Q如?br />su Q?nbsp;root
a、启动ORACLEpȝ
hareg Qy oracle
b、关闭ORACLEpȝ
hareg Qn oracle
Oracle数据库有哪几U启动方?br />
说明Q?br />
有以下几U启动方式:(x)
1、startup nomount
非安装启动,q种方式启动下可执行Q重建控制文件、重建数据库
dinit.ora文gQ启动instanceQ即启动SGA和后台进E,q种启动只需要init.ora文g?br />
2、startup mount dbname
安装启动Q这U方式启动下可执行:(x)
数据库日志归档?br />数据库介质恢复?br />使数据文件联机或脱机Q?br />重新定位数据文g、重做日志文件?br />
执行“nomount”Q然后打开控制文gQ确认数据文件和联机日志文g的位|,
但此时不Ҏ(gu)据文件和日志文gq行校验查?br />
3、startup open dbname
先执?#8220;nomount”Q然后执?#8220;mount”Q再打开包括Redo log文g在内的所有数据库文gQ?br />q种方式下可讉K数据库中的数据?br />
4、startupQ等于以下三个命?br />startup nomount
alter database mount
alter database open
5、startup restrict
U束方式启动
q种方式能够启动数据库,但只允许h一定特权的用户讉K
非特权用戯问时Q会(x)出现以下提示Q?br />ERRORQ?br />ORA-01035: ORACLE 只允许具?nbsp;RESTRICTED SESSION 权限的用户?br />
6、startup force
强制启动方式
当不能关闭数据库Ӟ可以用startup force来完成数据库的关?br />先关闭数据库Q再执行正常启动数据库命?br />
7、startup pfile=参数文g?br />带初始化参数文g的启动方?br />先读取参数文Ӟ再按参数文g中的讄启动数据?br />例:(x)startup pfile=E:Oracleadminoradbpfileinit.ora
8、startup EXCLUSIVE
二、用户如何有效地利用数据字典
ORACLE的数据字典是数据库的重要l成部分之一Q它随着数据库的产生而? 随着数据库的变化而变?
体现为sys用户下的一些表和视图。数据字典名U是大写的英文字W?br />
数据字典里存有用户信息、用L(fng)权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视囄?br />我们不能手工修改数据字典里的信息?br />
很多时候,一般的ORACLE用户不知道如何有效地利用它?br />
dictionary 全部数据字典表的名称和解释,它有一个同义词dict
dict_column 全部数据字典表里字段名称和解?br />
如果我们x询跟索引有关的数据字典时Q可以用下面q条SQL语句:
SQL>select * from dictionary where instr(comments,'index')>0;
如果我们想知道user_indexes表各字段名称的详l含义,可以用下面这条SQL语句:
SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES';
依此cLQ就可以L知道数据字典的详l名U和解释Q不用查看ORACLE的其它文档资料了?br />
下面按类别列Z些ORACLE用户常用数据字典的查询用方法?br />
1、用?br />
查看当前用户的缺省表I间
SQL>select username,default_tablespace from user_users;
查看当前用户的角?br /> SQL>select * from user_role_privs;
查看当前用户的系l权限和表权限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;
2、表
查看用户下所有的?br /> SQL>select * from user_tables;
查看名称包含log字符的表
SQL>select object_name,object_id from user_objects
where instr(object_name,'LOG')>0;
查看某表的创建时?br /> SQL>select object_name,created from user_objects where object_name=upper('&table_name');
查看某表的大?br /> SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&table_name');
查看攑֜ORACLE的内存区里的?br /> SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;
3、烦?br />
查看索引个数和类?br /> 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');
查看索引的大?br /> SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&index_name');
4、序列号
查看序列Plast_number是当前?br /> SQL>select * from user_sequences;
5、视?br />
查看视图的名U?br /> SQL>select view_name from user_views;
查看创徏视图的select语句
SQL>set view_name,text_length from user_views;
SQL>set long 2000; 说明Q可以根据视囄text_lengthD定set long 的大?br /> SQL>select text from user_views where view_name=upper('&view_name');
6、同义词
查看同义词的名称
SQL>select * from user_synonyms;
7、约束条?br />
查看某表的约束条?br /> 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、存储函数和q程
查看函数和过E的状?br /> SQL>select object_name,status from user_objects where object_type='FUNCTION';
SQL>select object_name,status from user_objects where object_type='PROCEDURE';
查看函数和过E的源代?br /> SQL>select text from all_source where owner=user and name=upper('&plsql_name');
三、查看数据库的SQL
1、查看表I间的名U及大小
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、查看表I间物理文g的名U及大小
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
3、查看回滚段名称及大?br />
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, vQrollstat v
Where r.segment_id = v.usn(+)
order by segment_name ;
4、查看控制文?br />
select name from vQcontrolfile;
5、查看日志文?br />
select member from vQlogfile;
6、查看表I间的用情?br />
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.SMQTS_AVAIL A,SYS.SMQTS_USED B,SYS.SMQTS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;
7、查看数据库库对?br />
select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status;
8、查看数据库的版?br />
Select version FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';
9、查看数据库的创建日期和归档方式
Select Created, Log_Mode, Log_Mode From VQDatabase;
四、ORACLE用户q接的管?br />
用系l管理员Q查看当前数据库有几个用戯接:(x)
SQL> select username,sid,serial# from vQsession;
如果要停某个q接?br />
SQL> alter system kill session 'sid,serial#';
如果q命令不?扑֮UNIX的进E数
SQL> select pro.spid from vQsession ses,vQprocess pro where ses.sid=21 and ses.paddr=pro.addr;
说明Q?1是某个连接的sid?br />
然后?nbsp;kill 命o(h)杀此进E号?br />
五、SQL*PLUS使用
a、近入SQL*Plus
Qsqlplus 用户?密码
退出SQL*Plus
SQL>exit
b、在sqlplus下得到帮助信?br />列出全部SQL命o(h)和SQL*Plus命o(h)
SQL>help
列出某个特定的命令的信息
SQL>help 命o(h)?br />
c、显Cl构命o(h)DESCRIBE
SQL>DESC 表名
d、SQL*Plus中的~辑命o(h)
昄SQL~冲区命?br />SQL>L
修改SQL命o(h)
首先要将待改正行变ؓ(f)当前?br />SQL>n
用CHANGE命o(h)修改内容
SQL>c/??br />重新认是否已正?br />SQL>L
使用INPUT命o(h)可以在SQL~冲Z增加一行或多行
SQL>i
SQL>输入内容
e、调用外部系l编辑器
SQL>edit 文g?br />可以使用DEFINE命o(h)讄pȝ变量EDITOR来改变文本编辑器的类型,在login.sql文g中定义如下一?br />DEFINE_EDITOR=vi
f、运行命令文?br />SQL>START test
SQL>@test
常用SQL*Plus语句
a、表的创建、修攏V删?br />创徏表的命o(h)格式如下Q?br />create table 表名 Q列说明列表Q;
为基表增加新列命令如下:(x)
ALTER TABLE 表名 ADD Q列说明列表Q?br />例:(x)为test表增加一列AgeQ用来存攑ֹ?br /> sql>alter table test
add QAge number(3)Q;
修改列定义命令如下:(x)
ALTER TABLE 表名
MODIFY Q列?nbsp;数据cdQ?br />例:(x)test表中的Count列宽度加长ؓ(f)10个字W?br /> sql>alter atble test
modify QCounty char(10)Q;
b、将一张表删除语句的格式如下:(x)
DORP TABLE 表名Q?br />例:(x)表删除将同时删除表的数据和表的定?br />sql>drop table test
c、表I间的创建、删?br />
六、ORACLE逻辑备䆾的SH文g
完全备䆾的SH文gQexp_comp.sh
rq=` date +"%m%d" `
su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_compQrq.dmp"
累计备䆾的SH文gQexp_cumu.sh
rq=` date +"%m%d" `
su - oracle -c "exp system/manager full=y inctype=cumulative file=/oracle/export/db_cumuQrq.dmp"
增量备䆾的SH文g: exp_incr.sh
rq=` date +"%m%d" `
su - oracle -c "exp system/manager full=y inctype=incremental file=/oracle/export/db_incrQrq.dmp"
root用户crontab文g
/var/spool/cron/crontabs/root增加以下内容
0 2 1 * * /oracle/exp_comp.sh
30 2 * * 0-5 /oracle/exp_incr.sh
45 2 * * 6 /oracle/exp_cumu.sh
当然q个旉表可以根据不同的需求来改变的,q只是一个例子?br />
七、ORACLE 常用的SQL语法和数据对?br />
一.数据控制语句 (DML) 部分
1.INSERT (往数据表里插入记录的语?
INSERT INTO 表名(字段?, 字段?, ……) VALUES ( ?, ?, ……);
INSERT INTO 表名(字段?, 字段?, ……) SELECT (字段?, 字段?, ……) FROM 另外的表?
字符串类型的字段值必ȝ单引hh, 例如: ’GOOD DAY’
如果字段值里包含单引?#8217; 需要进行字W串转换, 我们把它替换成两个单引号'.
字符串类型的字段Dq定义的长度?x)出? 最好在插入前进行长度校?
日期字段的字D值可以用当前数据库的pȝ旉SYSDATE, _到秒
或者用字符串{换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()q有很多U日期格? 可以参看ORACLE DOC.
q???nbsp;时:分钟:U?nbsp;的格式YYYY-MM-DD HH24:MI:SS
INSERT时最大可操作的字W串长度于{于4000个单字节, 如果要插入更长的字符? 误虑字段用CLOBcd,
Ҏ(gu)借用ORACLE里自带的DBMS_LOBE序?
INSERT时如果要用到?开始自动增长的序列? 应该先徏立一个序列号
CREATE SEQUENCE 序列L(fng)名称 (最好是表名+序列h? INCREMENT BY 1 START WITH 1
MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的长度来? 如果定义的自动增长的序列?nbsp;NUMBER(6) , 最大gؓ(f)999999
INSERT 语句插入q个字段gؓ(f): 序列L(fng)名称.NEXTVAL
2.DELETE (删除数据表里记录的语?
DELETE FROM表名 WHERE 条g;
注意Q删除记录ƈ不能释放ORACLE里被占用的数据块表空? 它只把那些被删除的数据块标成unused.
如果实要删除一个大表里的全部记? 可以?nbsp;TRUNCATE 命o(h), 它可以释攑֍用的数据块表I间
TRUNCATE TABLE 表名;
此操作不可回退.
3.UPDATE (修改数据表里记录的语?
UPDATE表名 SET 字段?=?, 字段?=?, …… WHERE 条g;
如果修改的值N没有赋值或定义? 把原来的记录内Ҏ(gu)为NULL, 最好在修改前进行非I校?
值N过定义的长度会(x)出错, 最好在插入前进行长度校?.
注意事项:
A. 以上SQL语句对表都加上了行?
认完成? 必须加上事物处理l束的命?nbsp;COMMIT 才能正式生效,
否则改变不一定写入数据库?
如果x回这些操? 可以用命?nbsp;ROLLBACK 复原.
B. 在运行INSERT, DELETE ?nbsp;UPDATE 语句前最好估一下可能操作的记录范围,
应该把它限定在较?yu)?nbsp;(一万条记录) 范围?. 否则ORACLE处理q个事物用到很大的回退D?
E序响应慢甚臛_d? 如果记录C十万以上q些操作, 可以把这些SQL语句分段分次完成,
光加上COMMIT 认事物处理.
?数据定义 (DDL) 部分
1.CREATE (创徏? 索引, 视图, 同义? q程, 函数, 数据库链接等)
ORACLE常用的字D늱型有
CHAR 固定长度的字W串
VARCHAR2 可变长度的字W串
NUMBER(M,N) 数字型M是位数总长? N是小数的长度
DATE 日期cd
创徏表时要把较小的不为空的字D|在前? 可能为空的字D|在后?br />
创徏表时可以用中文的字段? 但最好还是用英文的字D名
创徏表时可以l字D加上默认? 例如 DEFAULT SYSDATE
q样每次插入和修Ҏ(gu), 不用E序操作q个字段都能得到动作的时?br />
创徏表时可以l字D加上约束条?br />例如 不允?dng)R?nbsp;UNIQUE, 关键?nbsp;PRIMARY KEY
2.ALTER (改变? 索引, 视图{?
改变表的名称
ALTER TABLE 表名1 TO 表名2;
在表的后面增加一个字D?br />ALTER TABLE表名 ADD 字段?nbsp;字段名描q?
修改表里字段的定义描q?br />ALTER TABLE表名 MODIFY字段?nbsp;字段名描q?
l表里的字段加上U束条g
ALTER TABLE 表名 ADD CONSTRAINT U束?nbsp;PRIMARY KEY (字段?;
ALTER TABLE 表名 ADD CONSTRAINT U束?nbsp;UNIQUE (字段?;
把表攑֜或取出数据库的内存区
ALTER TABLE 表名 CACHE;
ALTER TABLE 表名 NOCACHE;
3.DROP (删除? 索引, 视图, 同义? q程, 函数, 数据库链接等)
删除表和它所有的U束条g
DROP TABLE 表名 CASCADE CONSTRAINTS;
4.TRUNCATE (清空表里的所有记? 保留表的l构)
TRUNCATE 表名;
?查询语句 (SELECT) 部分
SELECT字段?, 字段?, …… FROM 表名1, [表名2, ……] WHERE 条g;
字段名可以带入函?br /> 例如: COUNT(*), MIN(字段?, MAX(字段?, AVG(字段?, DISTINCT(字段?,
TO_CHAR(DATE字段?'YYYY-MM-DD HH24:MI:SS')
NVL(EXPR1, EXPR2)函数
解释:
IF EXPR1=NULL
RETURN EXPR2
ELSE
RETURN EXPR1
DECODE(AAHV1HR1HV2HR2....)函数
解释:
IF AA=V1 THEN RETURN R1
IF AA=V2 THEN RETURN R2
..…
ELSE
RETURN NULL
LPAD(char1,n,char2)函数
解释:
字符char1按制定的位数n昄Q不的位数用char2字符串替换左边的IZ
字段名之间可以进行算术运?br />例如: (字段?*字段?)/3
查询语句可以嵌套
例如: SELECT …… FROM
(SELECT …… FROM表名1, [表名2, ……] WHERE 条g) WHERE 条g2;
两个查询语句的结果可以做集合操作
例如: qUNION(L重复记录), qUNION ALL(不去掉重复记?, 差集MINUS, 交集INTERSECT
分组查询
SELECT字段?, 字段?, …… FROM 表名1, [表名2, ……] GROUP BY字段?
[HAVING 条g] ;
两个以上表之间的q接查询
SELECT字段?, 字段?, …… FROM 表名1, [表名2, ……] WHERE
表名1.字段?nbsp;= 表名2. 字段?nbsp;[ AND ……] ;
SELECT字段?, 字段?, …… FROM 表名1, [表名2, ……] WHERE
表名1.字段?nbsp;= 表名2. 字段?+) [ AND ……] ;
?+)L(fng)字段位置自动补空?br />
查询l果集的排序操作, 默认的排序是升序ASC, 降序是DESC
SELECT字段?, 字段?, …… FROM 表名1, [表名2, ……]
ORDER BY字段?, 字段? DESC;
字符串模p比较的Ҏ(gu)
INSTR(字段? ‘字符?#8217;)>0
字段?nbsp;LIKE ‘字符?’ [‘%字符?’]
每个表都有一个隐含的字段ROWID, 它标记着记录的唯一?
?ORACLE里常用的数据对象 (SCHEMA)
1.索引 (INDEX)
CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] ;
ALTER INDEX 索引?nbsp;REBUILD;
一个表的烦引最好不要超q三?nbsp;(Ҏ(gu)的大表除?, 最好用单字D늃? l合SQL语句的分析执行情?
也可以徏立多字段的组合烦引和Z函数的烦?br />
ORACLE8.1.7字符串可以烦引的最大长度ؓ(f)1578 单字?br />ORACLE8.0.6字符串可以烦引的最大长度ؓ(f)758 单字?br />
2.视图 (VIEW)
CREATE VIEW 视图名AS SELECT …. FROM …..;
ALTER VIEW视图?nbsp;COMPILE;
视图仅是一个SQL查询语句, 它可以把表之间复杂的关系z化.
3.同义?nbsp;(SYNONMY)
CREATE SYNONYM同义词名FOR 表名;
CREATE SYNONYM同义词名FOR 表名@数据库链接名;
4.数据库链?nbsp;(DATABASE LINK)
CREATE DATABASE LINK数据库链接名CONNECT TO 用户?nbsp;IDENTIFIED BY 密码 USING ‘数据库连接字W串’;
数据库连接字W串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定?
数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一?br />
数据库全局名称可以用以下命令查?br />SELECT * FROM GLOBAL_NAME;
查询q端数据库里的表
SELECT …… FROM 表名@数据库链接名;
?权限理 (DCL) 语句
1.GRANT 赋于权限
常用的系l权限集合有以下三个:
CONNECT(基本的连?, RESOURCE(E序开?, DBA(数据库管?
常用的数据对象权限有以下五个:
ALL ON 数据对象? SELECT ON 数据对象? UPDATE ON 数据对象?
DELETE ON 数据对象? INSERT ON 数据对象? ALTER ON 数据对象?br />
GRANT CONNECT, RESOURCE TO 用户?
GRANT SELECT ON 表名 TO 用户?
GRANT SELECT, INSERT, DELETE ON表名 TO 用户?, 用户?;
2.REVOKE 回收权限
REVOKE CONNECT, RESOURCE FROM 用户?
REVOKE SELECT ON 表名 FROM 用户?
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户?, 用户?;
查询数据库中W?3号错误:(x)
select orgaddr,destaddr from sm_histable0116 where error_code='63';
查询数据库中开L(fng)h大提交和最大下发数Q?nbsp;select MSISDN,TCOS,OCOS from ms_usertableQ?br />
查询数据库中各种错误代码的dQ?br />select error_code,count(*) from sm_histable0513 group by error_code order
by error_code;
查询报表数据库中话单l计U类查询?br />select sum(Successcount) from tbl_MiddleMt0411 where ServiceType2=111
select sum(successcount),servicetype from tbl_middlemt0411 group by servicetype

]]>