全部博文(534)
分类: Oracle
2011-04-22 09:47:53
Oracle数据库任何时候可以处于四种状态之一:
? SHUTDOWN:数据库关闭
? NOMOUNT:例程启动
? MOUNT:例程启动,控制文件打开
? OPEN:例程启动,所有数据文件打开
数据库可以在几种状态之间转变:
? NOMOUNT到MOUNT
ALTER DATABASE MOUNT
? MOUNT到OPEN
ALTER DATABASE OPEN
ALTER SYSTEM ENABLE RESTRICTED SESSION
2.1.3 启动数据库
打开和关闭数据库的各个阶段如下图所示:
前提条件:
首先执行su - Oracle命令进入Oracle目录($提示符)
执行svrmgrl
执行connect internal(如有口令需要输入口令,即connect internal/口令)
1. 启动例程不装载数据库
命令:startup nomount
启动一个实例而没有安装(mount)数据库,这步操作一般在创建数据库和重新创建控制文件时才会用到,到这一步为止,数据库做的操作有:
? 读初始化参数文件initSID.ora
? 创建SGA
? 启动后台进程
? 打开告警文件和跟踪文件
2. 启动例程并装载数据库,但不带开
命令:startup mount
为执行一些特定的维护操作,经常需要启动一个实例并安装(mount)数据库,但不打开数据库。例如,如下操作就需要启动数据库到这一步:
? 为数据文件改名
? 增加、删除或改名重做日志文件
? 启动或停止数据库到归档模式
? 进行完整的数据库恢复
mount一个数据库包括如下几步:
把数据库与已经启动(nomount)的实例联系起来
定位并打开初始化参数CONTROL_FILE指定的控制文件(获取实例锁)
读控制文件获取数据文件和重做日志文件的名字和状态(此时,数据库并不检查这些数据文件和联机重做日志文件是否存在)
3. 启动例程,装载并打开数据库
命令:startup open
数据库正常表明实例已经启动,并且数据库已经安装(mount)和打开,这时所有合法的数据库用户才可连到数据库,并执行典型的数据访问操作。打开一个数据库包括:
打开联机数据文件
打开联机重做日志文件
用此种方式打开数据库,则允许所有合法用户对数据库做联接并执行各种数据库存取操作。
这一步中,ORACLE检查所有的数据文件和联机重做日志文件是否可以被打开,并检查数据库的一致性。对于一些可以自动恢复的错误,后台进程SMON在数据库打开之前将执行恢复操作,对于那些不能自动恢复的错误,打开数据库将失败并报错。
4. 启动例程并限制对数据库访问
命令:startup restrict
用此种方式打开数据库,只允许管理员使用,而不允许一般用户访问,即只有具有create session权限和restricted session系统权限的用户才可以联接到数据库上(只有管理员才有此权限),利用该种方式启动,通常用于执行如下操作:
? 进行结构维护,例如重建索引
? 进行数据库exp或imp
? 进行数据装入(sql * loader)
5. 强制数据库启动
命令:startup force
在用Normal和Immediate选项无法成功关闭数据库,或启动时出错,通常用此种方式打开数据库。
Oracle在关闭数据库时有三个常用选项:normal、immediate、abort。三个选项的关闭过程如下图所示:
前提条件:
首先执行su - Oracle命令进入Oracle目录($提示符)
执行svrmgrl
执行connect internal(如有口令需要输入口令,即connect internal/口令)
1. 在正常情况下关闭数据库
命令:shutdown normal
用该种方式关闭数据库,关闭进程取消所有用户访问数据库,等待直至所有用户完成请求并与服务器脱离,清除缓冲区和重做日志文件并更新数据文件和联机重做日志文件,打开文件锁,完成正在进行的事务,更新文件头,关闭线程、打开数据库实例锁,使控制文件和数据文件同步。简言之,使用normal选项关闭数据库,卸装数据库,并完全关闭实例。该选项是关闭数据库时经常建议的选项。
2. 立即关闭数据库
命令:shutdown immediate
在特定条件下,关闭数据库时可能要选择immediate选项。例如,DBA可能决定在初始化文件中增加PROCESSES参数,如果这需要立即完成,则DBA使用immediate选项。如果使用该选项关闭数据库,则Oracle正在处理的当前SQL语句立即被终止,任何未提交的事务被回滚,数据库被关闭。使用这一选项的唯一缺点是Oracle不等待当前用户断开与数据库的连接,但数据库是连续的,且在下次启动时不需要恢复。
3. 异常中止例程
命令:shutdown abort
当紧急情况发生时,可以用abort选项关闭数据库。如当某个后台进程死掉后,可能导致无法用normal或immediate选项关闭数据库,要用到abort选项。当使用abort选项关闭数据库时,当前SQL语句立即停止,且未提交的事务不回滚,下次启动时要进行实例恢复。
下面介绍SQL*Net运行过程中相关的文件(以UNIX环境中TCP/IP协议为例):
? lsnrctl:放在“${ORACLE_HOME}/bin”目录下,用于启动SQL*Net V2.0监听进程。
? tcpctl和orasrv:放在“/ORACLE_HOME/bin”目录下,用于启动SQL*Net V1.0监听进程。
? listener.ora和tnsnames.ora:放在“/ORACLE_HOME/network/admin”子目录下,是SQL*Net V2正常工作所需的配置文件及整个网络的配置文件。listener.ora是服务器监听进程网络配置文件,tnsnames.ora是客户机与服务器联络所需的网络配置文件。
? config.ora:该文件放置了ORACLE运行的一些参数,与网络有关的有LOCAL_CONNECT,指明缺省访问ORACLE的连接描述符。如在该文件中有一行:
LOCALE_CONNECT = ora
表示缺省连接描述符为ora, 如果运行SQL*Plus时,可省去:
“$ sqlplus 用户名/口令@ora”中的连接描述符“ora:”只输入“$ sqlplus 用户名/口令”即可。
? config.ora文件放在“/ORACLE_HOME/dbs”子目录下。
? TCP/IP的配置文件:与SQL*Net有关的TCP/IP协议配置文件有两个:
/etc/hosts:存放整个网络环境中每个节点的IP地址
/etc/services:存放TCP/IP协议使用的各个端口的地址
oracle建库及常用的操作:
启动数据库
dbstart
系统管理员登陆数据库
sqlplus ‘/ as sysdba’
进入数据库SQL查询
sqlplus /nolog
查看监听的状态
lsnrctl status
启动监听的状态
lsnrctl start
关闭监听的状态
lsnrctl stop
1. 在正常情况下关闭数据库
shutdown normal
2. 立即关闭数据库
shutdown immediate
3. 异常中止例程
shutdown abort
查看oracle进程
ps -ef |grep oracle
oracle关闭数据库
dbshut
2、 创建一个表空间,数据文件创建在/export/home/自己名字的目录,数据文件100M
CREATE TABLESPACE test LOGGING DATAFILE ‘d:\dev\test.dbf' SIZE 100M;
CREATE TEMPORARY TABLESPACE test_tmp tempfile '/export/home/test_tmp.dbf' SIZE 100M;
3、 创建用户,表空间使用自己创建的表空间。
create user test identified by test default tablespace test profile default;
grant create session,create table to test;
grant create view to test;
grant create sequence to test;
grant UNLIMITED TABLESPACE to test;
commit;
4、 连接到自己创建的用户上
Sql>Connect user/password
5、 创建表
CREATE TABLE EMP
(EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2));
5、在表中插入数据
INSERT INTO EMP VALUES
(7369, 'SMITH', 'CLERK', 7902,
TO_DATE('17-12-1980', 'DD-MM-YYYY'), 800, NULL, 20);
INSERT INTO EMP VALUES
(7499, 'ALLEN', 'SALESMAN', 7698,
TO_DATE('20-02-1981', 'DD-MM-YYYY'), 1600, 300, 30);
INSERT INTO EMP VALUES
(7521, 'WARD', 'SALESMAN', 7698,
TO_DATE('22-02-1981', 'DD-MM-YYYY'), 1250, 500, 30);
INSERT INTO EMP VALUES
(7566, 'JONES', 'MANAGER', 7839,
TO_DATE('02-04-1981', 'DD-MM-YYYY'), 2975, NULL, 20);
INSERT INTO EMP VALUES
(7654, 'MARTIN', 'SALESMAN', 7698,
TO_DATE('28-09-1981', 'DD-MM-YYYY'), 1250, 1400, 30);
6、 修改表中数据update
7、 删除表中一条数据delete from
8、 查找表中一条数据 select
9、 删除表 drop table
10、删除用户 drop user test cascade;
11、删除表空间 drop tablespace test including contents and datafiles;
1)创建表空间
drop tablespace smsc_center including contents;
create tablespace smsc_center datafile '/dev/rlv_dbsmsc1' size 2000M reuse;
alter tablespace smsc_center add datafile '/dev/rlv_dbsmsc2' size 2000M reuse;
(动态扩充表空间)
2、建立用户
drop user smsc cascade;
create user smsc identified by oracle default tablespace smsc_center profile default;
grant dba to smsc;
grant unlimited tablespace to smsc;
commit;
3、连接刚建立的用户上,创建表(sm_histable0101、ms_usertable)
SQL>connect smsc/oracle
SQL>create table ms_usertable
(MSISDN varchar2(21) NOT NULL ,
SubName varchar2(21) NULL ,
UserSex number(3) NULL ,
UserAddr varchar2(41) NULL ,
UserPass varchar2(9) NULL ,
MSType number(3) NULL ,
TON number(3) NULL ,
NPI number(3) NULL ,
Service number(3) NULL ,
SMFlag number(3) NULL ,
OCOS number(10) NULL ,
TCOS number(10) NULL ,
ExpireTime number(10) NULL,
RegDateTime varchar2(21) NULL,
Schedulemode number(3) NULL
)
TABLESPACE SMSC_CENTER;
4、建立存储过程 process
5、建立任务 job
补充:
1、错误码解释 ora-15241 $oerr ora 15421
tns-12542 $oerr tns 12542
imp-00013 $oerr imp 00013
2、倒表命令
exp smsc/oracle tables=sm_histable0426 file=sm_histable0426 log=sm_histable0426
imp smsc/oracle file=sm_histable0426 log=sm_histable0426 tables=sm_histable0426 ignore=y
3、保存查询结果
SQL> spool /home/oracle/text.txt
SQL>select * from V$tablespace;
SQL> spool off
4、建立、删除裸设备
mklv -y 'lv92_system' -t 'raw' datavg 256 [256*8(pp size)=2048]
rmlv -f 'lv92_system'
5、命令
select orgaddr,destaddr from sm_histable0920 where error_code='48';
查询0920从源地址到目的地址错误码为48的数据
select * from sm_histable1228 where destaddr like'8613%' and orgaddr like'8613'%;
count(*) 查询1228从源地址8613发往目的地址8613的所有数据
analyze table sm_histable1228 compute statistics for all indexes (优化表索引)
truncate table sm_histable1228; 清除表中所有数据,保留表结构,不可恢复数据
delete from sm_histable1228; 没有commit前可以,用rollback命令回滚。
desc ms_usertable 查看表结构
select status from gv$instance; 查询实例是否启动
select * from all_users; 查询系统拥有哪些用户
select * from tab; 查询当前用户下的所有对象
show user 查询当前连接用户
show sga
select * from dual;
select * from V$NLS_PARAMETERS; 查询字符集相关
seletc * from V$tablespace; 查询所有的表空间
select userenv('language') from dual;
SQL>create table test(id number(3));
SQL>insert into test values (1);
SQL>insert into test values (2);
SQL>commit
SQL>delete from test where id=1;
SQL>rolback 没有commit前可以,用rollback命令回滚。
update ms_usertable set ocos='100' tcos='200' where ... ; 要表中有数据才可以
删除表 drop table
删除用户 drop user test cascade;
删除表空间 drop tablespace test including contents and datafiles;
select username,count(*) from v$session group by username
假设表a中有100条记录,b为表a中的一个字段.
那么查询显示表a中按字段b排序的91-100条记录语句该怎么写?
查旬81-90条的记录语句怎么写?
查找m-n条记录的语句又怎么写呢(m
SELECT ROWNUM,其它字段
FROM (SELECT * FROM a ORDER BY b )
WHERE ROWNUM >=m AND ROWNUM <= n;
==============================================================================
一、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^C
??
??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$ro
==============================================================================
oracl常用SQL语句
1、 查看当前数据库版本信息
select * from product_component_version;
select * from v$version;
2、 授权与取消
grant 权限(如sysdba) to 用户名;
revoke 权限(如sysdba) from 用户名;
3、 查看数据库中哪些用户被授予了sysdba和/或sysoper权限
select * from v$pwfile_users;
4、 更改用户密码
alter user 用户名 identified by 新密码;
5、启动实例,装载并打开数据库
startup;
6、启动实例,不装载数据库
startup nomount;
7、启动并装载数据库
startup mount
8、迫使实例启动
startup force
9、打开一个关闭的数据库
alter database open
10、以只读模式打开数据库
alter database open read only
11、用读写模式打开数据库
alter database open read write
12、查看所有表
select * from user_all_tables;
13、查看实例名
select instance_name from v$instance;
14、查看数据库全名
select * from global_name;
15、查看表空间
select * from user_tablespaces;
16、查看某表创建的时间
select object_name,created from user_objects;
17、查看同义词
select * from user_synonyms
18、查看当前数据库状态
select open_mode from v$database;
19、更改为只读
alter database open read only;
20、查看所有用户信息
select username,profile,account_status from dba_users;
21、查看当前用户的角色
select * from user_role_privs;
22、查看当前用户的系统权限
select * from user_sys_privs;a
23、查看当前用户的表权限
select * from user_tab_privs;
24、设为禁止
alter system quiesce restricted;
25、
select * from dept;
mklv -t raw -y data_libs_084 vgnewora2 129
mklv -t raw -y data_libs_085 vgnewora2 129
mklv -t raw -y data_libs_086 vgnewora2 129
mklv -t raw -y data_libs_087 vgnewora2 129
mklv -t raw -y data_libs_088 vgnewora2 129
mklv -t raw -y data_libs_089 vgnewora2 129
mklv -t raw -y data_libs_090 vgnewora2 129
mklv -t raw -y data_libs_091 vgnewora2 129
mklv -t raw -y data_libs_092 vgnewora2 129
mklv -t raw -y data_libs_093 vgnewora2 129
mklv -t raw -y data_libs_094 vgnewora2 129
mklv -t raw -y data_libs_095 vgnewora2 129
mklv -t raw -y data_libs_096 vgnewora2 129
mklv -t raw -y data_libs_097 vgnewora2 129
chown -R oracle:dba /dev/rdata_libs_082
chown -R oracle:dba /dev/rdata_libs_083
chown -R oracle:dba /dev/rdata_libs_084
chown -R oracle:dba /dev/rdata_libs_085
chown -R oracle:dba /dev/rdata_libs_086
chown -R oracle:dba /dev/rdata_libs_087
chown -R oracle:dba /dev/rdata_libs_088
chown -R oracle:dba /dev/rdata_libs_089
chown -R oracle:dba /dev/rdata_libs_090
chown -R oracle:dba /dev/rdata_libs_091
chown -R oracle:dba /dev/rdata_libs_092
chown -R oracle:dba /dev/rdata_libs_093
chown -R oracle:dba /dev/rdata_libs_094
chown -R oracle:dba /dev/rdata_libs_095
chown -R oracle:dba /dev/rdata_libs_096
chown -R oracle:dba /dev/rdata_libs_097
转自: