日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.Oracle管理及常用基础脚本

發布時間:2024/8/26 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Oracle管理及常用基础脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 性能監控

  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 s str(a.file#,1,2) "#", s str(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,uniqness, 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, val 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$q 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_q n 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,s str(a.program,1,40) prog,a.terminal,osuser,val/60/100 val

  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 val desc;

  二 空間管理

  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 incl ing 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 '//oradata/userdata_002.ora' size 50m;    --Unix

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

  8. 重新調整數據文件的大小

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

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

  9. 臨時表空間和排序表空間的使用狀態

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

  s stR(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 qry=\"where day_id > 12\" tables=(customer) file= d:\sample.dmp log=

  rows=n

  full=y? tables=()? owner=??? -- 三種導出方式

  imp fromuser =( dss,dwh) touser =(dss,dwh) dwh file=sample.dmp

  -- 分區表的到導出 user1.table_name:px? 分區 px

  exp tables=(user1.table_name:px)? file=sample.dmp

  4. 如何使數據庫運行于歸檔模式

  1. 打開 ini.ora 文件

  2. 修改文件內容

  log_archive_start = tr

  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 d l;

  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/init5.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 SEQNCE, ROWID

  (prod_id, cust_id, time_id, channel_id, promo_id, q ntity_sold, amount_sold)

  INCL ING NEW VALS;?? 首先創建視圖日志

  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.q ntity_sold) AS sum_q ntity_sales,

  COUNT(s.q ntity_sold) AS count_q ntity_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) , prod t varchar(20))

  partition by range(cat)? 有 range? hash?? list 三種分區方法

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

  partition xsmx_02 vals less than (maxval) tablespace space_name1)

  -- 添加分區

  alter table mx_xsmx add partition xsmx_03 vals 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=TR ;

  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:=TR

  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|P LIC|ROLE]

  2 帶有轉授權限 :

  A 轉授 : 當 A 用戶得到系統授權后 , 如果可以將這個權限授給別人 , 稱轉授 .

  GRANT CREATE SESSION,SELECT ANY TABLE

  TO [USERNAME|P LIC|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|P LIC|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 的值為 TR 那么就要求你創建的連接名稱必須與 SID 相同,如果改成 FALSE 就可以按如下的方式創建了

  create p lic 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 [P LIC] 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 或 P LIC ,一旦創建將不能修改。

  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. afil,t. ablk,t.used_ lk

  FROM v$session s,v$transaction t

  WHERE s.saddr=t.ses_addr;

  4 函數用法

  1. 時間函數

  select add_months(sysdate,2) from d l

  select last_day(sysdate) from d l

  select next_day(sysdate,'FRIDAY') from d l

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

  2. 字符函數

  select chr(67) from d l

  select concat('asf','af') /? 列 1|| 列 2? from d l

  select initcap('sample') from d l

  select lower('SSD')/upper('ssd') from d l

  select lpad('myname',20,'*') from d l? -- 左邊填充指定長度的字符

  select rpad('myname',20,'*') from d l

  select ltrim('myname','m') /rtrim('myname','m')? from d l

  select replace('myname','yn','*') from d l

  select s str('myname',2,6) from d l

  select instr('myname','n',1,1) from d l

  select length('myname') from d l

  3. 轉換函數

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

  select to_number('23') from d l

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

  select user from d l -- 查詢當前用戶

  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)

  VAL$?????????????????????????????????? VARCHAR2(2000)

  COMMENT$???????????????????????????????? VARCHAR2(2000)

  SQL> col val$ format a40

  SQL> select name,val$ from props$;

  NAME?????????????????????????? VAL$

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

  DICT.BASE????????????????????? 2

  NLS_LANG GE?????????????????? AMERICAN

  NLS_TERRITORY????????????????? AMERICA

  NLS_CURRENCY?????????????????? $

  NLS_ISO_CURRENCY?????????????? AMERICA

  NLS_NUMERIC_CHARACTERS???????? .,

  NLS_DATE_FORMAT??????????????? DD-MON-YY

  NLS_DATE_LANG GE????????????? 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 val$=' 新字符集 ' 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 incl ing contents;

  3: 重建表空間

  二:丟失沒有回滾段的非 SYSTEM 數據文件(在歸檔模式下運行)

  A :使用 recover database 恢復,要求數據庫安裝但沒有打開,即脫機備份

  B :使用 recover datafile 恢復,要求數據文件要脫機但數據庫是打開的

  C :使用 recover tablespace 恢復,要求表空間脫機且數據庫是打開的

  問題產生過程:

  svrmgrl

  connect internal

  insert into myinfo vals(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 vals(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 b?r cache) ,

  重演日志緩存( the redo log b?r ),

  共享池( the shared pool ),

  數據字典緩存( the data dictionary cache )以及其它各方面的信息。

  db_block_b?rs

  1 、數據高速緩沖區

  2 、訪問過的數據都放在這一片內存區域,該參數越大, Oracle 在內存中找到相同數據的可能性就越大,也即加快了查詢速度。

  3 、 db_block_b?rs 以塊為單位,假如 DB_BLOCK_SIZE=2K , db_block_b?rs=3200 ,則占用內存 =3200*2K=6400K 。

  share_pool_size

  1 、 SQL 共享緩沖池

  2 、該參數是庫高速緩存和數據字典的高速緩存。

  log_b?r

  1 、重演日志緩沖區

  sort_area_size

  1 、排序區

  processes

  1 、同時連接的進程數

  global_names

  1 、如果“數據庫鏈路名”和它所要連接的“數據庫”擁有相同的名字,則設置 global_names = TR ,否則,設置 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 的內部連接

總結

以上是生活随笔為你收集整理的.Oracle管理及常用基础脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。