Oracle管理及常用基础脚本

来源:互联网 发布:linux下svn服务器搭建 编辑:程序博客网 时间:2024/06/05 09:34

1 性能监控

1. 检测数据库中的事件和等待

 

       SELECT event, total_waits, total_timeouts,time_waited, average_wait

       FROM v$system_event

 

2. 查询会话中的事件和等待时间

 

       select sid, event, total_waits,average_wait

       from v$session_event where sid=10;

      

3. 查询等待进程

 

       SELECT sid, seq#, event, wait_time, state

       FROM v$session_wait;

 

4. 监控全局区的性能

 

       select * from v$sgastat;

 

5. 查询命中率

 

       select gethitratio

       from v$librarycache

       where namespace = 'SQL AREA';

      

6. 当前 sql 语句

       select sql_text, users_executing,

       executions, loads

       from v$sqlarea;

      

7. 查询高速缓存中的命中率

 

       select sum(pins) "Executions", sum(reloads) "Cache Misses",

       sum(reloads)/sum(pins)

       from v$librarycache;

      

8. 查询全局字典中的有效装载次数

 

       select namespace,pins,reloads,invalidations

       from v$librarycache;

 

9. 回滚段的争用情况

 

    select name, waits, gets, waits/gets "Ratio"

    from v$rollstat a, v$rollname b

    where a.usn = b.usn;

 

10. 监控表空间的 I/O 比例

    select df.tablespace_name name,df.file_name "file",f.phyrds pyr,

    f.phyblkrd pbr,f.phywrts pyw, f.phyblkwrt pbw

    from v$filestat f, dba_data_files df

    where f.file# = df.file_id

    order by df.tablespace_name;

11. 监控文件系统的 I/O 比例

    select substr(a.file#,1,2) "#", substr(a.name,1,30) "Name",

    a.status, a.bytes, b.phyrds, b.phywrts

    from v$datafile a, v$filestat b

    where a.file# = b.file#;

 

12. 在某个用户下找所有的索引

    select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name

    from user_ind_columns, user_indexes

    where user_ind_columns.index_name = user_indexes.index_name

    and user_ind_columns.table_name = user_indexes.table_name

    order by user_indexes.table_type, user_indexes.table_name,

user_indexes.index_name, column_position;

 

13. 监控 SGA 中字典缓冲区的命中率

    select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",

    (1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"

    from v$rowcache

    where gets+getmisses <>0

    group by parameter, gets, getmisses;

 

14. 监控 SGA 中共享缓存区的命中率,应该小于 1%

    select sum(pins) "Total Pins", sum(reloads) "Total Reloads",

    sum(reloads)/sum(pins) *100 libcache

    from v$librarycache;

 

    select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent"

    from v$librarycache;

 

15. 显示所有数据库对象的类别和大小

    select count(name) num_instances ,type ,sum(source_size) source_size ,

    sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size,

    sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required

    from dba_object_size

    group by type order by 2;

 

16. 监控 SGA 中重做日志缓存区的命中率,应该小于 1%

    select name, gets, misses, immediate_gets, immediate_misses,

    Decode(gets,0,0,misses/gets*100) ratio1,

    Decode(immediate_gets+immediate_misses,0,0,

    immediate_misses/(immediate_gets+immediate_misses)*100) ratio2

    FROM v$latch WHERE name IN ('redo allocation', 'redo copy');

 

17. 监控内存和硬盘的排序比率,最好使它小于 .10 ,增加 sort_area_size

SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)');

 

18. 监控字典缓冲区

select (sum(pins - reloads)) / sum(pins) "lib cache" from v$librarycache;

    select (sum(gets - getmisses - usage - fixed)) / sum(gets) "row cache" from v$rowcache;

select sum(pins) "executions", sum(reloads) "cache misses while executing" from v$librarycache;

后者除以前者 , 此比率小于 1%, 接近 0% 为好

select sum(gets) "dictionary gets",sum(getmisses) "dictionary cache get misses"

from v$rowcache

 

19. 找 ORACLE 字符集

    select * from sys.props$ where name='NLS_CHARACTERSET';

 

20. 监控 MTS

    select busy/(busy+idle) "shared servers busy" from v$dispatcher;

    此值大于 0.5 时,参数需加大

    select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where type='dispatcher';

    select count(*) from v$dispatcher;

    select servers_highwater from v$mts;

 

    servers_highwater 接近 mts_max_servers 时,参数需加大

 

21. 碎片程度

    select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name

    having count(tablespace_name)>10;

 

    alter tablespace name coalesce;

    alter table name deallocate unused;

 

    create or replace view ts_blocks_v as

    select tablespace_name,block_id,bytes,blocks,'free space' segment_name from dba_free_space

    union all

    select tablespace_name,block_id,bytes,blocks,segment_name from dba_extents;

 

    select * from ts_blocks_v;

 

    select tablespace_name,sum(bytes),max(bytes),count(block_id) from dba_free_space

    group by tablespace_name;

 

    查看碎片程度高的表

 

    SELECT segment_name table_name , COUNT(*) extents

    FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name

    HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name);

 

17. 表、索引的存储情况检查

 

    select segment_name,sum(bytes),count(*) ext_quan from dba_extents where

tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name;

 

    select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&owner'

    group by segment_name;

 

18 、找使用 CPU 多的用户 session

 

    12 是 cpu used by this session

 

    select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value

    from v$session a,v$process b,v$sesstat c

    where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;

 

2 空间管理

1. 察看数据库的大小,和空间使用情况

SQL> col tablespace format a20    -- 在显示中指明列的输出格式

SQL> select b.file_id    -- 文件 ID,

   b.tablespace_name   -- 表空间 ,

   b.file_name      -- 物理文件名 ,

   b.bytes         -- 总字节数 ,

   (b.bytes-sum(nvl(a.bytes,0)))     -- 已使用 ,

   sum(nvl(a.bytes,0))         -- 剩余 ,

   sum(nvl(a.bytes,0))/(b.bytes)*100   -- 剩余百分比

   from dba_free_space a,dba_data_files b

   where a.file_id=b.file_id

   group by b.tablespace_name,b.file_name,b.file_id,b.bytes

   order by b.tablespace_name

   /

   dba_free_space -- 表空间剩余空间状况

dba_data_files -- 数据文件空间占用情况

 

2. 查看现有回滚段及其状态

select segment_name,owner,tablespace_name,segment_id,file_id,status from dba_rollback_segs;

 

3. 表空间大小

select tablespace_name,count(*),sum(blocks),sum(bytes)/1024/1024

from dba_data_files

group by tablespace_name;

 

4. 表空间使用情况

select df.tablespace_name " 表空间名 ",totalspace " 总空间 M",freespace " 剩余空间 M",round((1-freespace/totalspace)*100,2) " 使用率 %"

from  (select tablespace_name,round(sum(bytes)/1024/1024) totalspace

from dba_data_files

group by tablespace_name) df,

(select tablespace_name,round(sum(bytes)/1024/1024) freespace

from dba_free_space

group by tablespace_name) fs

where df.tablespace_name=fs.tablespace_name;

 

5. 删除表空间

select t.name,d.name from v$tablespace t,v$datafile d where t.name='DATA_HOST_A' and t.ts#=d.ts#;alter tablespace DATA_HOST_A offline;

drop tablespace DATA_HOST_A including contents;

6. 查看数据文件的位置

select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;

 

7. 为这个表空间增加一个数据文件

alter tablespace 表空间名 add datafile '/u1/oradata/userdata_002.ora' size 50m;    --Unix

alter tablespace 表空间名 add datafile 'c:/oradata/userdata_002.ora' size 50m;    --Windows NT

 

8. 重新调整数据文件的大小

alter database datafile '/u1/oradata/userdata_001.ora' resize 50M;   --Unix

alter database datafile 'c:/oradata/userdata_002.ora' resize 50M;    --Windows NT

 

9. 临时表空间和排序表空间的使用状态

select substr(vses.username,1,12) "ORA_USER", substr(osuser,1,12) "OS_USER",

substR(sql_text,1,50) "SQL_STMT"

from

V$sqlarea vsql, V$session vses, V$sort_usage vsort

where

vsort.tablespace = 'TEMP' and  vsort.sqladdr=vses.sql_address and vsql.address=vsort.sqladdr

 

select tablespace_name, extent_size, total_extents, used_extents, free_extents, max_used_size

from  v$sort_segment;

 

10. 确定盘区和盘区内容及表或者空间的碎片程度

       select segment_name,exten from  dba_extents -- 确定盘区的内容

desc dba_segments -- 确定段的内容

 

-- 返回了结果表明碎片的严重

select segment_name ,tablespace_name,extents,segment_type from dba_segments where extents>4

 

-- 空间碎片严重程度

select tablespace_name ,count(tablespace_name) from dba_free_space group by tablespace_name

having count(tablespace_name) >10

3 基本知识

1. 为一个事务指定一个回滚段

set transaction use rollback segment rollback_segment_name -- 指定回滚段

 

2. 如何创建和使用光标

       -- 光标的使用

declare @name char(30)

declare @homebase char(40)

declare @style char(20)

declare @arttist_id int

create artist_cursor cursor

for select * from dim_age

open artist_cursor

fetch artist_cursor into @arttist_id,@homebase,@style

while (@@sqlstatus=0)

begin

              print @homebase

              print @style

              print @arttist_id

end

close artist_cursor

deallocate cursor artist_cursor

go

 

3. 如何导出和导入数据

-- 数据导出导入

       exp dss/dss@oralce query=/"where day_id > 12/" tables=(customer) file= d:/sample.dmp log=

       rows=n

       full=y  tables=()  owner=    -- 三种导出方式

 

       imp userid/pwd@oracle_sid fromuser =( dss,dwh) touser =(dss,dwh) dwh file=sample.dmp

 

-- 分区表的到导出 user1.table_name:px  分区 px

exp user_id/pwd@oracle_sid tables=(user1.table_name:px)  file=sample.dmp

 

4. 如何使数据库运行于归档模式

1. 打开 ini.ora 文件

2. 修改文件内容

  log_archive_start = true

  log_archive_dest_1 = "location=D:/Oracle/oradata/ORACLE/archive"

  log_archive_format = %%ORACLE_SID%%T%TS%S.ARC

3. 进入服务管理器输入

  shutdown

  startup mount

  alter database archivelog

  alter database open

此时数据库运行与归档模式下可以查询输入

  archive log list

 

5. 如何做数据库的热备份和恢复

-- 要对数据库做热备份需要数据库运行在归档模式下 :

--  首先使表空间处于备份状态

--  拷贝数据文件

--  使表空间回复到正常状态

--  进入 sqlplus 输入:

      alter tablespace users begin backup ;

      $ copy d:/oracle_home/usr.ora d:/backup/user.dbf;

      alter tablespace users end backup ;

      alter system checkpoint ;

 

-- 恢复数据库需要做如下的步骤:

-- 将映像备份文件拷贝到各个表空间对应的正确的位置

      svrmgrl

      connect internal

      startup mount

      alter database open

      recover database

 

6. 如何查看所有的表和创建结构相同的表

       1 、查看当前所有对象

SQL> select * from tab;

2 、建一个和 a 表结构一样的空表

SQL> create table b as select * from a where 1=2;

SQL> create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2;

 

7. 如何查看当前日期

SQL> select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from dual;

 

8. 如何在用户间复制数据

SQL> copy from user1 to user2 create table2 using select * from table1;

9. 视图中不能使用 order by ,但可用 group by 代替来达到排序目的

SQL> create view a as select b1,b2 from b group by b1,b2;

 

10. 通过授权的方式来创建用户

SQL> grant connect,resource to test identified by test default tablespace users;

 

SQL>alter user test quota 100M on users-- 在指定的表空间中为某个用户分配资源

 

SQL> conn test/test

如果不给用户 connect 和 resource 角色的话那么他们在指定的表空间中将

无法创建对象,比如 create table

 

11. 如何锁定用户的账号和密码

alter user test account unlock/lock;

 

12. 如何在命令行安装

runInstaller -responsefile filename [-silent] [-nowelcome]

13. 如何使用操作系统认证

Set REMOTE_LOGIN_PASSWORDFILE to NONE

CONNECT / AS SYSDBA

CONNECT / AS SYSOPER

 

14. 如何通过密码文件认证

$orapwd file=$ORACLE_HOME/dbs/orapw SID password=admin entries=10

Set REMOTE_LOGIN_PASSWORDFILE to EXCLUSIVE or SHARED

CONNECT INTERNAL/CONNECT

 

15. 如何进行管理例程

STARTUP PFILE=/DISK1/initU15.ora

STARTUP[FORCE][RESTRICT][PFILE=filename][OPEN RECOVER][ database]|MOUNT|NOMOUNT]

 

ALTER DATABASE database MOUNT;

ALTER DATABASE database OPEN READ

ALTER DATABASE database OPEN READ ONLY;

ALTER DATABASE { MOUNT | OPEN }

ALTER DATABASE OPEN [READ WRITE| READ ONLY]

 

16. 如何创建物化视图

       CREATE MATERIALIZED VIEW LOG ON sales

WITH SEQUENCE, ROWID

(prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold)

INCLUDING NEW VALUES;   首先创建视图日志

 

CREATE MATERIALIZED VIEW sum_sales

PARALLEL

BUILD IMMEDIATE

REFRESH FAST ON COMMIT

AS

SELECT s.prod_id, s.time_id,COUNT(*) AS count_grp,SUM(s.amount_sold) AS sum_dollar_sales,

COUNT(s.amount_sold) AS count_dollar_sales,SUM(s.quantity_sold) AS sum_quantity_sales,

COUNT(s.quantity_sold) AS count_quantity_sales

FROM sales s

GROUP BY s.prod_id, s.time_id;    然后创建视图

 

17. 分区表的创建、更改和删除等管理

       -- 创建表空间

create tablespace space_name1 datafile '/oradata/space_name1.dbf' size 100m

 

-- 创建分区表

create table mx_xsmx (cat char(1) , product varchar(20))

partition by range(cat)  有 range  hash   list 三种分区方法

(partition xsmx_01 values less than ('B') tablespace space_name1,

       partition xsmx_02 values less than (maxvalue) tablespace space_name1)

 

-- 添加分区

alter table mx_xsmx add partition xsmx_03 values less than ('Z')

 

-- 将某一个分区割裂

alter table mx_xsmx split partition xsmx_03 at ('G') into (partition xsmx_04,partition xsmx_05)

 

-- 删除分区

alter table mx_xsmx drop partition xsmx_04

alter table mx_xsmx truncate partition xsmx_04

alter table mx_xsmx rename partition xsmx_04 to xsmx_06

alter table mx_xsmx modify partition xsmx_01

storage (next 1m pctincrease 0)

 

-- 分区表的导出 某个分区

exp sales/sales_password tables=mx_xsmx:xsmx_01 rows=Y

file=sales1999_q1.dmp

 

---- 6 、 IMPORT 分区:

---- ORACLE8 的 IMPORT 工具可在表的分区以及导入数据,例如在 2001 年,用户要查看 1999 年的数据, DBA 必须导入 1999 年的数据,使之在线,操作如下: STEP1 、建立表的 1999 年的四个表空间和相应的分区,参照( 2 ); STEP2 、导入数据:

 

oracle$ imp sales/sales_password FILE =sales1999_q1.dmp

TABLES = (sales:sales1999_q1) IGNORE=y

 

 

-- 选择指定的分区来查询结果

select * from mx_xsmx partition (xsmx_04) where DeptNo between 11 and 20

 

-- 对分区表来作索引

create index index_name on table_name(DeptNO 列名 )

local  (partition part1 tablespace space_idx1, partition part2 tablespace space_idx2)

 

18. 创建表的语句中参数的含义

创建表及其参数含义

CREATE TABLE MB_CPZ (

      YWFWDM  VARCHAR2 (4),

      CPZDM   VARCHAR2 (2))

     TABLESPACE DWSDATA

     PCTFREE 10      -- 本参数设置为非零的时候后台 SMON 进程会自动合并相邻的自由范围 .

     PCTUSED 40      -- 为恢复 INSERT 操作而设定的。

     INITRANS 1

     MAXTRANS 255

      STORAGE (

INITIAL 65536   --  初始范围为 65536 个字节就是 64K , oracle 的块大小我们设定为 8K 。这也是 Oracle 给出的默认值

     NEXT 0          --  Oracle 将不会考虑这个设置的值

     MINEXTENTS 1   --  最少 1 个范围

     MAXEXTENTS 2147483645 -- 最大范围 Oracle 将不会考虑这个设置的值

     FREELISTS 1 FREELIST GROUPS 1 )

      NOCACHE; 不放入高速缓存

       [LOGGING|NOLOGGING] 所有的对表的操作都要记入 REDOLOG , ORACLE 建议使用 NOLOGGING ;

 

手动修改表的参数

ALTER TABLE 名称 PCTFREE 20 PCTUSED 50 STOAGE ( MAXEXTENTS 1000 );

 

手工分配空间

ALTER TABLE 名称 ALLOCATE EXTENT ( SIZE 500K DATAFILE '    ' );

 

19. 索引的基本知识

一、索引的分类:

1 、逻辑上:

          单列索引 复合索引   唯一索引 非唯一索引

2 、物理上:

           B-TREE OR BITMAP

           B-TREE ( NORMAL 和反向索引)

二、 CREATE INDEX

CREATE INDEX 名称 ON  表名(列名) PCTFREE 30 STORAGE (。。。。。) TABLESPACE 名称没有定义 PCTUSED :索引是按照一定存储的,如果通过 PCTUSED 允许恢复对 BLOCK 的 INSERT 操作,可能影响 INDEX 的效率。

 

三、建立索引的注意事项

1 、索引对查询性能有提高,但对 DML 语句有影响。

2 、索引也应该放在一个专用的表空间

3 、定义索引的 EXTENT 的大小时, =5*DB BLOCK

4 、建立索引时,应采用 NOLOGGING 方式。

四、修改索引

ALTER INDEX 名称 STORAGE (新值)

 

五、分配空间给索引

1 、 ALTER INDEX 名称 ALLOCATE EXTENT ( SIZE 200K DATAFILE ' 。。 ' )

 

六、重建索引

1 、提高查询性能

2 、当一个索引重建时,老的索引会在新索引建立完成后,被删除。

3 、新索引建立过程中,老的索引仍可用于查询。

4 、硬盘的开销大,

 

七、 DROP 一个索引

DROP INDEX 名称

 

八、信息获取

1 、 DBA_INDEXES: 建索引的参数

2 、 DBA_IND_COLUMNS:

 

 

20.ORACLE 中用户管理

一、 ORACLE 的安全域

1 、 TABLESPACE QUOTAS :表空间的使用定额

2 、 DEFAULT TABLESPACE :默认表空间

3 、 TEMPORARY TABLESPACE :指定临时表空间。

4 、 ACCOUNT LOCKING :用户锁

5 、 RESOURCE LIMITE :资源限制

6 、 DIRECT PRIVILEGES :直接授权

7 、 ROLE PRIVILEGES :角色授权先将应用中的用户划为不同的角色,

二、创建用户时的清单:

1 、选择一个用户名称和检验机制: A ,看到用户名,实际操作者是谁,业务中角色。

2 、选择合适的表空间:

3 、决定定额:

4 、口令的选择:

5 、临时表空间的选择:先建立一个临时表空间,然后在分配。不分配,使用 SYSTEM 表空间

6 、 CREATE USER

7 、授权: A ,用户的工作职能 B ,用户的级别

三、用户的创建:

1 、命令:

CREATE USER 名称 IDENTIFIED BY 口令   DEFAULT TABLESPACE 默认表空间名 TEMPOARAY  TABLESPACE 临时表空间名 QUOTA 15M ON 表空间名

[PASSWORD EXPIRE] :当用户第一次登陆到 ORACLE ,创建时所指定的口令过期失效,强迫用户自己定义一个新口令。 [ACCOUNT LOCK] :加用户锁

QUOTA UNLIMITED ON TABLESPACE :不限制,有多少有多少。

[PROFILE 名称 ] :受 PROFILE 文件的限制。

 

四、如何控制用户口令和用户锁

1 、强迫用户修改口令: ALTER USER 名称 IDENTIFIED BY 新口令 PASSWORD EXPIRE ;

2 、给用户加锁: ALTER USER 名称 ACCOUNT [LOCK|UNLOCK]

3 、注意事项:

A 、所有操作对当前连接无效

B 、 1 的操作适用于当用户忘记口令时。

 

五、更改定额

1 、命令: ALTER USER 名称 QUOTA 0 ON 表空间名

ALTER USER 名字 QUOTA (数值) K|M|UNLIMITED ON 表空间名;

2 、使用方法:

A 、控制用户数据增长

B 、当用户拥有一定的数据,而管理员不想让他在增加新的数据的时候。

C 、当将用户定额设为零的时候,用户不能创建新的数据,但原有数据仍可访问。

 

六、 DROP 一个 USER

1 、 DROP USER 名称   适合于删除一个新的用户

2 、 DROP USER 名称 CASCADE : 删除一个用户,将用户的表,索引等都删除。

3 、对连接中的用户不好用。

 

 

七、信息获取:

1 、 DBA_USERS: 用户名,状态,加锁日期,默认表空间,临时表空间

2 、 DBA_TS_QUOTAS: 用户名,表空间名,定额。

两个表的连接字段: USERNAME

GRANT CREATE SESSION TO 用户名

21.PROFILE 的管理(资源文件的管理)

一、 PROFILE 的管理内容:

1 、 CPU 的时间

2 、 I/O 的使用

3 、 IDLE TIME (空闲时间)

4 、 CONNECT TIME (连接时间)

5 、并发会话数量

6 、口令机制:

 

二、 DEFAULT PROFILE :

1 、所有的用户创建时都会被指定这个 PROFILE

2 、 DEFAULT PROFILE 的内容为空,无限制

 

三、 PROFILE 的划分:

1 、 CALL 级 LIMITE :

            对象是语句:

            当该语句资源使用溢出时:

            A 、该语句终止

            B 、事物回退

            C 、 SESSION 连接保持

2 、 SESSION 级 LIMITE :

            对象是:整个会话过程

            溢出时:连接终止

 

四、如何管理一个 PROFILE

1 、 CREATE PROFILE

2 、分配给一个用户

3 、象开关一样打开限制。

 

五、如何创建一个 PROFILE :

1 、命令: CREATE PROFILE 名称

   LIMIT

     SESSION_PER_USER 2

     CPU_PER_SESSION 1000

     IDLE_TIME 60

     CONNECT_TIME 480

六、限制参数:

       1 、 SESSION 级 LIMITE :

           CPU_PER_SESSION: 定义了每个 SESSION 占用的 CPU 的时间:( 1/100 秒)

       2 、 SESSION_PER_USER: 每个用户的并发连接数

       3 、 CONNECT_TIME: 一个连接的最长连接时间(分钟)

       4 、 LOGICAL_READS_PER_SESSION:  一次读写的逻辑块的数量

       5 、 CALL 级 LIMITE

            CPU_PER_CALL: 每个语句占用的 CPU 时间

            LOGICAL_READS_PER_CALL:

 

七、分配给一个用户:

CREATE USER 名称。。。。。。

       PROFILE 名称

ALTER USER 名称 PROFILE 名称

 

八、打开资源限制:

1 、 RESOURCE_LIMT: 资源文件中含有

2 、 ALTER SYSTEM SET RESOURCE_LIMIT=TRUE ;

3 、默认不打开

 

九、修改 PROFIE 的内容:

1 、 ALTER PROFILE 名称参数      新值

2 、对于当前连接修改不生效。

 

十、 DROP 一个 PROFILE

1 、 DROP PROFILE 名称

            删除一个新的尚未分配给用户的 PROFILE ,

2 、 DROP PROFILE 名称 CASCADE

3 、注意事项

            A 、一旦 PROFILE 被删除,用户被自动加载 DEFAULT PROFILE

            B 、对于当前连接无影响

            C 、 DEFAULT PROFILE 不可以被删除

十一、信息获取:

       1 、 DBA_USERS:

     用户名, PROFILE

       2 、 DBA_PROFILES:

     PROFILE 及各种限制参数的值

每个用户的限制: PROFILE (关键字段)

十二、 PROFILE 的口令机制限制

1 、限制内容

A 、限制连续多少次登录失败,用户被加锁

B 、限制口令的生命周期

C 、限制口令的使用间隔

2 、限制生效的前提:

A  RESOURCE_LIMIT:=TRUE

B  ORACLE/RDBMS/ADMIN/UTLPWDMG.SQL

3 、如何创建口令机制:

CREATE PROFILE 名称

             SESSIONS_PER_USER 

 

  .....

  password_life_time 30

  failed_log_attempts 3

  password_reuse_time 3

4 、参数的含义:

A  FAILED_LOGIN_ATTEMPTS:

                      当连续登陆失败次数达到该参数指定值时,用户加锁

B  PASSWORD_LOCK_TIME: 加锁天数

C  PASSWORD_LIFE_TIME: 口令的有效期(天)

D  PASSWORD_GRACE_TIME: 口令修改的间隔期(天)

E  PASSWORD_REUSE_TIME: 口令被修改后原有口令隔多少天被重新使用。

F  PASSWORD_REUSE_MAX: 口令被修改后原有口令被修改多少次被重新使用。

 

 

22.ORACLE 的权限管理

一授权的两种分类 :

1 SYSTEM 授权 : 允许特定的用户对特定的一类对象做特定的操作 . 可操作的对象 :TABLES,INDEXES,PROCEDURES,SEGMENTS; 系统授权是对某一类对象 .

  GRANT SELECT ANY TABLE TO ZT

 

2 OBJECT( 对象授权 ):

A 允许一个特定的用户对一个特定的对象做特定的操作 . 对象 :TABLE,INDEX,SEGMENT,..

GRANT UPDATE ON EMP TO ZT

 

二系统授权的特点

1 ORACLE 中有超过 80 种以上的 SYSTEM 授权

2 几乎所有的 SYSTEM 授权包含 ANY 关键字

3 SYSTEM 授权 :GRANT 授权

4 SYSTEM 授权 :REVOKE 回收

5 允许用户做系统一级的操作 , 建表空间 , 建 SESSION.

6 最常用的系统授权 :

INDEX:CREATE ANY INDEX

          ALTER ANY INDEX

          DROP ANY INDEX

TABLE:CREATE ANY TABLE

          ALTER .........

          DROP  .........

          SELECT .......

          UPDATE.........

SESSION:CREATE SESSION

        ALTER SESSION

        RESTRICTED SESSION  

TABLESPACE: CREATE TABLESPACE

        ALTER TABLESPACE

        DROP  TABLESPACE

 

三如何授权 :

 

1 命令格式

GRANT CREATE SESSION,SELECT ANY TABLE TO [USERNAME|PUBLIC|ROLE]

 

2 带有转授权限 :

A 转授 : 当 A 用户得到系统授权后 , 如果可以将这个权限授给别人 , 称转授 .

GRANT CREATE SESSION,SELECT ANY TABLE

TO [USERNAME|PUBLIC|ROLE] WITH ADMIN OPTION

 

举例 :

1 SYSTEM->ZT

GRANT CREATE SESSION TO ZT WITH ADMIN OPTION

              ZT 用户可以拥有 CREATE SESSION 权限

2 ZT->OLM

GRANT CREATE SESSION TO OLM,

ZT,OLM 也有了 .

 

四 SYSDBA 和 SYSOPER 系统权限

1  SYSOPER:SYSTEM OPERATOR: 系统操作员

              STARTUP,SHUTDOWN;

ALTER DATABASE[MOUNT|OPEN];

RECOVER TABLESPACE

 

BACKUP  DATABASE

ARCHIVELOG OR NOARCHIVELOG;

2 SYSDBA

SYSTEM DABASE ADMIN: 数据库管理员 ,

SYSOPER WITH ADMIN OPTION

RECOVER DATABASE

CREATE DATABASE

 

五信息获取

DBA_SYS_PRIVS

GRANTEE: 得到权限的人

PRIVILEGE: 得到何种权限

ADMIN OPTION: 是否可以转授

想知道 SCOTT 有多少权限

SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='SCOTT'

 

六回收权限 :

REVOKE 权限 FROM [USERNAME|PUBLIC|ROLE]

举例 :

SYSTEM->ZT(CREATE SESSION  WITH ADMIN OPTION)

ZT->OLM(CREATE SESSION)

 

七对象授权

 

TABLE: ALTER DELETE SELECT UPDATE INSERT

INDEX:DELETE INSERT SELECT UPDATE

CREATE, 对象是已经存在的事物 , 授权者是所有者 .

 

一 , 授权 :

GRANT UPDATE(ENAME) ON EMP TO ZT  WITH GRANT OPTION

二信息获取

1 DBA_TAB_PRIVS:

GRANTEE: 得到者

GRANTOR: 授权者

PRIVILEGE: 权限

GRANTABLE: 是否可以转授

OWNER: 所有者

三 回收对象授权

1 REVOKE 权限 FROM 用户

 

第十五章 : 角色管理

一 , 角色及其特点 :

1, 角色实际上是若干权限的集合体

2,DBA 通过为应用中的不同用户 , 不同职责 , 定义不同的角色 , 可以达到减少工作量的目的 .

3, 角色的使用同授权一样 , 可以用   GRANT 授权 ,REVOKE 回收 .

4, 角色可以象开关一样打开关闭

5, 角色的使用可以提高性能 .

6, 角色的使用可以大大减少工作量

 

 

二 建立角色

1 CREATE ROLE 名

2 CREATE ROLE 名

             IDENTIFIED BY 口令

 

三 修改角色

 

1 ALTER ROLE 名称 IDENTIFIED BY 口令

将没有口令的加一个口令

 

2ALTER ROLE  名称 NOT IDENTIFIED

将有口令的变为没有口令

 

三 分配一个角色

GRANT  ROLE 名 TO 用户名

 

四 回收一个角色

REVOKE ROLE 名 FROM 用户名

 

 

五 如何创建一个默认角色

只有设为默认角色 , 才可以在用户登录时 , 使角色所含有的权限生效

1 ALTER USER SCOTT

DEFAULT ROLE 角色 1, 角色 2

 

2  ATLER USR SCOTT

DEFAULT ROLE ALL

 

3 ALTER USER SCOTT DEFAULT ROLE ALL EXCEPT 角色名

 

4 ALTER USER SCOTT  DEFAULT ROLE NONE

 

六 打开和关闭角色 :

1 SET ROLE 名称

2 SET ROLE IDENTIFIED BY 口令 ,( 建立角色时 , 带口令 )

3 SET  ROLE NONE

 

七 删除角色

              DROP ROLE 名称

 

八 信息获取

              DBA_ROLE:

              DBA_ROLE_PRIVS:

 

九 如何向角色里加权限 :

GRANT 权限 TO 角色名

REVOKE 权限 FROM 角色名

角色 :1 不能跟用户名重复

     2 ROLE 的 ALTER 和其他对象的 ALTER 不一样 ,ROLE 的 ALTER 不能修改 ROLE 的内容 , 只可以修改角色的认证方式

 

23. 如何创建数据库连接 database link

       如果服务器的初始化参数中 global_names 的值为 TRUE 那么就要求你创建的连接名称必须与 SID 相同,如果改成 FALSE 就可以按如下的方式创建了

       create public database link link_name connect to user_name identified by passwd using ‘connecting_string’

       然后可以创建一个同义词为使用方便起见。

create synonyms synonyms_name for @ link_name

 

24. 回滚段的管理

1. 回滚段概述

 

回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。

 

2. 回滚段的作用

 

事务回滚 :当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务( ROLLBACK )时, ORACLE 将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

 

事务恢复 :当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中, ORACLE 将在下次打开数据库时利用回滚来恢复未提交的数据。

 

读一致性 :当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)。当 ORACLE 执行 SELECT 语句时, ORACLE 依照当前的系统改变号( SYSTEMCHANGENUMBER-SCN )来保证任何前于当前 SCN 的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块, ORACLE 将利用回滚段的数据前影像来构造一个读一致性视图。

 

事务级的读一致性

 

ORACLE 一般提供 SQL 语句级( SQLSTATEMENTLEVEL )的读一致性,可以用以下语句来实现事务级的读一致性。

SET TRANSACTION READONLY ;

 

或:

 

SET TANNSACTION SERIALIZABLE ;

 

以上两个语句都将在事务开始后提供读一致性。需要注意的是,使用第二个语句对数据库的并发性和性能将带来影响。

 

3. 回滚段的种类

 

系统回滚段:当数据库创建后,将自动创建一个系统回滚段,该回滚段只用于存放系统表空间中对象的前影像。

 

非系统回滚段:拥有多个表空间的数据库至少应该有一个非系统回滚段,用于存放非系统表空间中对象的数据前影像。非系统回滚段又分为私有回滚段和公有回滚段,私有回滚段应在参数文件的 ROLLBACKSEGMENTS 参数中列出,以便例程启动时自动使其在线( ONLINE )。公有回滚段一般在 OPS ( ORACLE 并行服务器)中出现,将在例程启动时自动在线。

 

DEFERED 回滚段:该回滚段在表空间离线( OFFLINE )时由系统自动创建,当表空间再次在线( ONLINE )时由系统自动删除,用于存放表空间离线时产生的回滚信息。

 

4. 回滚段的使用

 

分配回滚段:当事务开始时, ORACLE 将为该事务分配回滚段,并将拥有最少事务的回滚段分配给该事务。事务可以用以下语句申请指定的回滚段:

 

SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_segment

 

事务将以顺序,循环的方式使用回滚段的区( EXTENTS ),当当前区用满后移到下一个区。几个事务可以写在回滚段的同一个区,但每个回滚段的块只能包含一个事务的信息。

 

例如(两个事务使用同一个回滚段,该回滚段有四个区):

 

1 、事务在进行中,它们正在使用回滚段的第三个区;

 

2 、当两个事务产生更多的回滚信息,它们将继续使用第三个区;

 

3 、当第三个区满后,事务将写到第四个区,当事务开始写到一个新的区时,称为翻转( WRAP );

 

4 、当第四个区用满时,如果第一个区是空闲或非活动(使用该区的所有事务完成而没有活动的事务)的,事务将接着使用第一个区。

 

回滚段的扩张( EXTEND )

 

当当前回滚段区的所有块用完而事务还需要更多的回滚空间时,回滚段的指针将移到下一个区。当最后一个区用完,指针将移到第一个区的前面。回滚段指针移到下一个区的前提是下一个区没有活动的事务,同时指针不能跨区。当下一个区正在使用时,事务将为回滚段分配一个新的区,这种分配称为回滚段的扩展。回滚段将一直扩展到该回滚段区的个数到达回滚段的参数 MAXEXTENTS 的值时为止。

 

回滚段的回收和 OPTIMAL 参数

 

OPTIMAL 参数指明回滚段空闲时收缩到的位置,指明回滚段的 OPTIMAL 参数可以减少回滚段空间的浪费。

5. 创建回滚段

       语法:

CREATE [PUBLIC] ROLLBACK SEGMENT rollback_segment

[TABLESPACE tablespace]

[STORAGE ([INITIAL integer[K|M]] [NEXT integer[K|M]]

[MINEXTENTS integer]

[MAXTENTS {integer|UNLIMITED}]

[OPTIMAL {integer[K|M]|NULL}]) ]

       注:

回滚段可以在创建时指明 PRIVATE 或 PUBLIC ,一旦创建将不能修改。

MINEXTENTS 必须大于等于 2

PCTINCREASE 必须是 0

OPTIMAL 如果要指定,必须大于等于回滚段的初始大小(由 MINEXTENTS 指定)

              建议:

一般情况下, INITIAL=NEXT

设置 OPTIMAL 参数来节约空间的使用

不要设置 MAXEXTENTS 为 UNLIMITED

回滚段应创建在一个特定的回滚段表空间内

 

                     CREATE ROLLBACK SEGMENT rbs01

                     TABLESPACE rbs

                     STORAGE ( INITIAL 100K NEXT 100K MINEXTENTS 10

                     MAXEXTENTS 500 OPTIMAL 1000K);

 

 

 

6. 回滚段的信息

DROP ROLLBACK SEGMENT rbs01; 

查询回滚段的信息

 

所用数据字典: DBA_ROLLBACK_SEGS

 

可以查询的信息:回滚段的标识 (SEGMENT_ID) 、名称 (SEGMENT_NAME) 、所在表空间 (TABLESPACE_NAME) 、类型 (OWNER) 、状态 (STATUS) 。

 

例:

 

SQL>SELECT segment_name,tablespace_name,owner,status FROM dba_rollback_segs;

回滚段的统计信息

 

数据字典: V$ROLLNAME,V$ROLLSTAT

 

SELECT n.name,s.extents,s.rssize,s.optsize,s.hwmsize,s.xacts,s.status

FROM v$rollname n,v$rollstat s

WHERE n.usn=s.usn;

 

回滚段的当前活动事务

 

数据字典: V$SESSION,V$TRANSACTION

 

SQL>SELECT s.username,t.xidusn,t.ubafil,t.ubablk,t.used_ublk

FROM v$session s,v$transaction t

WHERE s.saddr=t.ses_addr;

 

 

4 函数用法

1. 时间函数

select add_months(sysdate,2) from dual

 

select last_day(sysdate) from dual

 

select next_day(sysdate,'FRIDAY') from dual

 

select months_between('19 MAY 95',add_months(sysdate,2)) duration from dual

 

2. 字符函数

select chr(67) from dual

 

select concat('asf','af') /  列 1|| 列 2  from dual

 

select initcap('sample') from dual

 

select lower('SSD')/upper('ssd') from dual

 

select lpad('myname',20,'*') from dual  -- 左边填充指定长度的字符

 

select rpad('myname',20,'*') from dual

 

select ltrim('myname','m') /rtrim('myname','m')  from dual

 

select replace('myname','yn','*') from dual

 

select substr('myname',2,6) from dual

 

select instr('myname','n',1,1) from dual

 

select length('myname') from dual

 

3. 转换函数

select to_char(sysdate)||'Is good day!' from dual

 

select to_number('23') from dual

 

select least(34,567,3,45,1090) / greatest(34,567,3,45,1090) from dual

 

select user from dual -- 查询当前用户

4.decode 函数

       select decode(columnname,'1','first','2','second','other' ) from table_name

-- 如果 columnname 等于 1 那么取 first 值,如果等于 2 取 second 否则等于 other 。实现逻辑控制

 

5. 连接的用法

select last_name, d.dept_id

from employees e

RIGHT OUTER JOIN departments d

ON (e.department_id = d.department_id);

5 常见问题

1 .字符集问题

错误现象:

1 、有的时候,服务器数据先导出,重装服务器,再导入数据,结果,发生数据查询成 ??? 。

2 、有时,服务器设置就有问题,字符集设成单字节了。

错误原因:

一般,是因为字符集设置不对照成的。 如果两台服务器上的字符设置不同就造成数据不能通讯,那么最简单的方法就是将字符集设置成一样的格式。

解决方法:

1 、检查服务器上 Oracle 数据库的字符集

SQL> conn sys/change_on_install

连接成功 .

       

SQL> desc props$

  列名                            可空值否    类型

 ------------------------------- -------- ----

 NAME                            NOT NULL VARCHAR2(30)

 VALUE$                                   VARCHAR2(2000)

 COMMENT$                                 VARCHAR2(2000)

 

SQL> col value$ format a40

SQL> select name,value$ from props$;

 

NAME                           VALUE$

------------------------------ -------------------------

DICT.BASE                      2

NLS_LANGUAGE                   AMERICAN

NLS_TERRITORY                  AMERICA

NLS_CURRENCY                   $

NLS_ISO_CURRENCY               AMERICA

NLS_NUMERIC_CHARACTERS         .,

NLS_DATE_FORMAT                DD-MON-YY

NLS_DATE_LANGUAGE              AMERICAN

NLS_CHARACTERSET               ZHS16GBK

NLS_SORT                       BINARY

NLS_CALENDAR                   GREGORIAN

NLS_RDBMS_VERSION              7.3.4.0.0

GLOBAL_DB_NAME                 ORACLE.WORLD

EXPORT_VIEWS_VERSION           3

 

查询到 14 记录 .

 

NLS_CHARACTERSET 这个参数应该是 ZHS16GBK ,如不是,改为它。

 

SQL*Plus 中修改方法:

SQL> update props$ set value$=' 新字符集 ' where name='NLS_CHARACTERSET';

 

操作系统中修改方法:

connect internal

alter database ORCL character set ZHS16GBK;

alter database ORCL national character set ZHS16GBK;

 

 

2 、检查操作系统级 Oracle 汉字显示的字符集

 

运行 regedit ,定位到:

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE

 

找到以下字符串

NLS_LANG

 

检查是否以下内容,如不是,改之

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

2.回滚段太旧问题

 

 

3 .备份与恢复

一:非归档备份

 
 
执行 testsql1.txt

关闭系统,利用 oracle backup manager 备份数据

打开数据库,执行 testsql2.txt 关闭数据库系统。

删除 ts_test2 文件

重新启动数据库时出现 1157,1110 错误,处理方法:

        1 :利用 oracle recovery manager 恢复数据。

        2:alter database datafile 'd:/orant/database/ts_test2' offline drop;

然后打开数据库即可(丢失 ts_test2 文件内容)。

注意:

        1:alter database datafile 'd:/orant/database/ts_test2' offline 只能在 archivelog

模式下时才可使用。删除文件后,建议把表空间删除后重建。

        2: 删除表空间 drop tablespace ts_test including contents;

        3: 重建表空间

 
 
 
 
二:丢失没有回滚段的非 SYSTEM 数据文件(在归档模式下运行)

 
 
        A :使用 recover database 恢复,要求数据库安装但没有打开,即脱机备份

        B :使用 recover datafile 恢复,要求数据文件要脱机但数据库是打开的

        C :使用 recover tablespace 恢复,要求表空间脱机且数据库是打开的

 
 
问题产生过程:

svrmgrl

connect internal

insert into myinfo values(34,'myname34','no');

.......

commit;

alter system switchlogfile;

shutdown abort

( 删除 ts_test1 文件,拷贝旧的 ts_test1 文件 )

startup

启动时出现如下错误:

ora-01113:file 2 needs media recovery

ora-01110:data file2:d:/orant/database/ts_test1

 
 
恢复方法 A :

        1: startup mount

        2: recover database;

        ( 提示恢复方式,选择 auto 即可 )

        3: alter database open

 
 
恢复方法 B :

        1:startup mount;

        2: alter database archivelog;

        3: alter database datafile 'd:/orant/database/ts_test1' offline

        4: alter database open;

        5: recover datafile 'd:/orant/database/ts_test1'

        ( 提示恢复方式,选择 auto 即可 )

        6: alter database datafile 'd:/orant/database/ts_test1' online

 
 
恢复方法 C :

        1: startup mount;

        2: alter database archivelog;

        3: alter database open;

        ( 提示出现 ora-01113,ora-1110 错误 )

        4: alter database datafile 'd:/orant/database/ts_tes1' offline;

        5: alter database open;

        6: alter tablespace ts_test offline;

        7: recover tablespace ts_test;

        ( 提示恢复方式,选择 auto 即可 )

        8: alter tablespace ts_test online;

 
 
 
 
三:丢失有回滚段的非 SYSTEM 数据文件

如果系统含有其他的回滚段,处理方法等同于非回滚段的处理方法,如果没有其他回滚段

则需要先建立回滚段信息。

产生过程:

        1: svrmgr30

        2: connect internal

        3: create table test(s1 number) tablespace ts_test

        4: select * from test;

        ( 结果为空 )

        5: set transaction use rollback segment tr_rbs;

        (tr_rbs 必须为 online)

        6 : shutdown

        7: 删除 tr_rbs 对应的数据文件,然后拷贝旧的文件到当前目录下。

        8 :重新启动数据库时出现错误

ora-01113:file 2 needs media recovery

ora-01110:data file2:d:/orant/database/ts_rbs

恢复方法:

       1 : svrmgr30

       2: connect internal

       3: startup mount

       4: alter database datafile 'd:/orant/database/ts_rbs' offline;

       5: alter database open;

       6: create rollback segment temp1 tablespace system;

       7: create rollback segment temp2 tablespace system;

       8: alter rollback segment temp1 online;

       9: alter rollback segment temp2 online;

       10: select * from test;

       错误信息 :ora-00376:file 3 cannot be read at this time

       ora_01110:data file d:/orant/database/ts_rbs

       11: recover tablespace tr_rbs

       12: select * from test;

       错误信息:等同 10

       13 : alter tablespace ts_rbs online;

       14: select * from test

       提示信息:没有数据

       15: alter rollabck segment tr_rbs online;

       16: alter rollback segment temp1 offline;

       17: alter rollback segment temp2 offline;

       18: drop rollback segment temp1;

       19: drop rollback segment temp2;

恢复方法也可采用文件恢复的方式进行,处理方法与情况 2 处理方法等同。

 
 
 
 
四:丢失未归档的联机日志文件

产生过程:

       1 : shutdown abort

       2: 删除日志文件 ( 可从 v$logfile 得到日志文件信息 )

       3: 拷贝原日志文件信息

       恢复过程 :

       1 : startup mount

       2: recover database until cancel;

       3: alter database open resetlogs;

       4: shutdown

说明: recover database until change 或 recover database until time 等方法恢复

 
 
五:热备份期间的数据库崩溃

产生过程:

       1: connect internal

       2: startup

       3: archive log list( 处于归档状态并且自动归档为 enabled)

       4: alter tablespace ts_test begin backup;

       5: host

       ( 备份数据文件,如果有多个数据文件,所有数据文件都做备份 )

       6: create table test(c1 number) tablespace ts_test;

       7: insert into test values(1);

       8: commit;

       9: alter system switch logfile;

       10: shutdown abort( 用 shutdown 提示有备份文件,不许 shutdown)

       完成以上工作后,用 startup 命令启动数据时出现 ora-01113 和 ora-01110 错误

 
 
恢复方法 A:

       1: startup mount

       2: alter database datafile 'd:/orant/database/ts_test1' end backup;

       3: alter database datafile 'd:/orant/database/ts_test2' end backup;

       4: alter database open;

       5: select * from test;( 可看到原来已经插入的数据,恢复完成 )

 
 
恢复方法 B:

       1: 删除数据文件 del d:/orant/database/ts_test1 与 ts_test2

       2: 拷贝原来的数据文件 ( 即第 5 步拷贝的数据 )

       3: alter database datafile 'd:/orant/database/ts_test1' end backup;

       alter database datafile 'd:/orant/database/ts_test2' end backup;

       4: recover database

       5: alter database open;

       6: select * from test;( 可看到原来已经插入的数据,恢复完成 )

 
 
说明:当数据库打开时,出现 ora-01113 与 ora-01110 错误,无法判断是由于数据文件丢失或备份引起的

错误,如果想查询是否处于热备份,可查看数据字典 select file#,status from v$backup

 
 
 
 
六:数据文件丢失

产生过程:

       1: connect internal

       2: startup

       3: archive log list( 处于归档状态并且自动归档为 enabled)

       4: 删除一个数据文件 ( 表空间的一个文件 ), 假设为: d:/orant/database/ts_test3

恢复方法:

       1: startup mount

       2: alter database create datafile 'd:/orant/database/ts_test3'

       3: recover datafile 'd:/orant/database/ts_test3'

       4: alter database open;

       5: select * from test;( 测试数据,恢复已完成 )

 

4. 不能登陆 OEM ( Oracle 的企业管理器)

       这是需要首先创建一个资料库,你提供数据库的帐号,然后选择一个表空间。资料库创建完毕用工具登陆 OEM ,初始密码 sysman/oem_temp 提示你修改然后就 OK 了。

 

5. 提示凭证索引集失败

       将 Sqlnet.ora 文件中的验证方式屏蔽掉

6 参数配置

1.      查看基本信息

显示数据库的有关信息

SELECT * from v$database

 

显示实例的信息

select * from v$instance

 

显示所有的参数设置

select * from v$parameter

 

显示版本信息

select * from v$version

 

在 SQLPLUS 下查看一些基本的参数

show parameter 参数名称

SELECT name FROM v$parameter WHERE name LIKE ‘%control%’;

2. 基本全局参数及含义

sga

系统全局区( SGA )是一个分配给 Oracle 的包含一个 Oracle 实例的数据库的控制信息内存段。

    主要包括数据库高速缓存 (the database buffer cache) ,

    重演日志缓存( the redo log buffer ),

    共享池( the shared pool ),

    数据字典缓存( the data dictionary cache )以及其它各方面的信息。

 

db_block_buffers

1 、数据高速缓冲区

2 、访问过的数据都放在这一片内存区域,该参数越大, Oracle 在内存中找到相同数据的可能性就越大,也即加快了查询速度。

3 、 db_block_buffers 以块为单位,假如 DB_BLOCK_SIZE=2K , db_block_buffers=3200 ,则占用内存 =3200*2K=6400K 。

 

share_pool_size

1 、 SQL 共享缓冲池

2 、该参数是库高速缓存和数据字典的高速缓存。

 

log_buffer

1 、重演日志缓冲区

 

sort_area_size

1 、排序区

 

processes

1 、同时连接的进程数

 

global_names

1 、如果“数据库链路名”和它所要连接的“数据库”拥有相同的名字,则设置 global_names = TRUE ,否则,设置 global_names = FALSE

 

db_block_size

1 、数据库块大小

2 、 Oracle 默认块为 2KB ,太小了,因为如果我们有一个 8KB 的数据,则 2KB 块的数据库要读 4 次盘,才能读完,而 8KB 块的数据库只要 1 次就读完了,大大减少了 I/O 操作。

3 、数据库安装完成后,就不能再改变 db_block_size 的值了,只能重新建立数据库并且建库时,要选择手工安装数据库。

 

open_links

1 、同时打开的链接数

 

dml_locks

1 、用户一次可对表设定锁的最大数目

2 、如果有三个用户修改6个表,则需18个 DML 锁来实现并行操作,如果设定 DML_LOCKS 不够大,操作时执行将中断,你可以通过你的应用程序的操作规模和最大的并行使用的用户数来估算系统所需要的 DML_LOCKS 的值,但该值的大小对数据库的其他性能没有影响,所以一般都把它设得很大,远超过实际中可能达到的值,如果在系统运行中经常发生表锁死的现象,就应该考虑加大该值。

 

open_cursors

1 、打开光标数

2 、这个参数可以同时被每个用户进程拥有,这个参数的最大值依操作系统不同而不同。

3 、在创建一个包含很多表的合成视图时,如果此参数很小,则视图创建会不成功。

 

dbwr_io_slaves

1 、后台写进程数

 

7.启动或者停止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:/Oracle/admin/oradb/pfile/init.ora

 

8 、 startup EXCLUSIVE

 

 

有三种关闭方式:

1 、 shutdown normal

   正常方式关闭数据库。

 

2 、 shutdown immediate

   立即方式关闭数据库。

   在 SVRMGRL 中执行 shutdown immediate ,数据库并不立即关闭,

   而是在 Oracle 执行某些清除工作后才关闭(终止会话、释放会话资源),

   当使用 shutdown 不能关闭数据库时, shutdown immediate 可以完成数据库关闭的操作。

 

3 、 shutdown abort

   直接关闭数据库,正在访问数据库的会话会被突然终止,

   如果数据库中有大量操作正在执行,这时执行 shutdown abort 后,重新启动数据库需要很长时间。

 

在 8i 中在命令行输入 svrmgrl 而在 9i 中是 dgmgrl ,然后 connect username/password 现在已经废除了 internal 的内部连接


转自:http://blog.csdn.net/lcj8/archive/2008/06/05/2514903.aspx