Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3519150
  • 博文数量: 534
  • 博客积分: 11595
  • 博客等级: 上将
  • 技术积分: 5785
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-22 17:00
文章分类

全部博文(534)

文章存档

2015年(4)

2014年(27)

2013年(15)

2012年(38)

2011年(36)

2010年(85)

2009年(63)

2008年(142)

2007年(124)

分类: 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

转自:

阅读(2688) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~