熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

網友經驗:學習oracle快速入門隨筆

2022-06-13   來源: Oracle 
修改密碼方法
SQL>; grant connect to USRNAME identified by USRPWD ;
SQL>; alter user USRNAME identified by USRPWD ;
SQL>; password USRNAME ;
  更改 USRNMAE 的口令
  舊口令××××××
  新口令××××××
  重新鍵入新口令××××××

修改成oracle認證方法

修改參數文件中
  remote_login_passwordfile=EXCLUSIVE 或SHARED
修改/home/network/admin/SQLNETORA 文件
  增加 sqlnetauthentication_services=(NFS)

ORACLE_SID是操作系統級的參數
INSTANCE_NAME是數據庫級的參數
SPFILE 是服務器參數文件
PFILE 是文本參數文件
create pfile=/oracle/testora from spfile ;
show parameter spfile ; 後如果VALUE值是零則沒有使用spfile
啟動數據庫是可以指定是用pfile還是用spfile啟動 如下
startup pfile=/oracle/testora


show parameter instance
show parameter db

alter system set job_queue_processes=
comment =temporaty change on
scope = memory|spfile|both ;


alter session set

CONCAT(Good String)   GoodString
SUBSTR(String)       Str      
LENGTH(String)                    
INSTR(String r)                
LPAD(sal*)           ******

union
union all
minus 第一個查詢減去第二個查詢
intersect 交集

SQL>; select replace(itpub oracleoracletraining)  itpub from dual
    /

ITPUB

itpub training


Translate
        SQL>; select translate(This is second trianing of itpub in Beijing!abcde) itpub
    from dual;

ITPUB

This is son trining of itpu in Bijing!

Floor
SQL>; select floor() from dual;

FLOOR()

         
Ceil
SQL>; select ceil() from dual;
CEIL()

         

ROUND:                入到指定的小數位
ROUND( )                                               
TRUNC:                        將值截斷到指定的小數位
TRUNC( )                                                  
MOD:                                返回相除後的余數
MOD( )                                                          

select trunc(sysdate D) from dual;

trunc(sysdate D) 截取到本周的第一天(:)
trunc(sysdate M) 截取到本月的第一天(:)
trunc(sysdate DD) 截取到本日的:
trunc(sysdateyyyy)得到今年的第一天的:

十進制與十六進制
EYGLE@vilen>; select to_char(xxxx) from dual;

TO_CH

  f

已選擇
十六進制與十進制
EYGLE@vilen>; select to_number(fxxxx) from dual;

TO_NUMBER(FXXXX)

                  


SQL>; select enamesal
    case job WHEN MANAGER THEN *sal
             WHEN ANALYST THEN *SAL
             WHEN CLERK   THEN *SAL
    ELSE sal END NEW_SAL
    from emp;

ENAME             SAL    NEW_SAL

SMITH                   
ALLEN                  
WARD                   
JONES                 
MARTIN                 
BLAKE                  
CLARK                  
SCOTT                  
KING                   
TURNER                 
ADAMS                  
JAMES                   
FORD                   
MILLER                 

SQL>; SELECT job sal
           DECODE(job ANALYST  SAL*
                       CLERK   SAL*
                       MANAGER SAL*
                                  SAL)
                  REVISED_SALARY
    FROM   emp;
JOB             SAL REVISED_SALARY

PRESIDENT                 
MANAGER                   
MANAGER                   


將空值轉換為實際的值
數據格式可以是日期字符數字
數據類型必須匹配
NVL(comm)
NVL(hiredateJAN)
NVL(jobNo Job Yet)

NVL(exprexprexpr)

如果expr不為Null返回expr如果expr為Null返回expr
expr可以為任何數據類型

NULLIF(exprexpr)
比較兩個表達式如果相等返回空值如果不等返回第一個值

COALESCE(exprexprexprn)
返回表達式列表裡的第一個非空表達式

錯誤:

在啟動數據庫時出現ORAORA或操作系統級錯誤例如ORA
  在關閉數據庫(使用shutdown normal或shutdown immediate) 時將導致錯誤ORA
  ORA以及操作系統級錯誤ORA

解決:

以下有兩種解決方案:

用戶的表空間可以被輕易地重建

即最近導出的對象是可用的或表空間中的對象可以被輕易地重建等在這種情況下最簡單的方法是offline並刪除該數據文件刪除表空間並重建表空間以及所有的對象

svrmgrl>; startup mount
  svrmgrl>; alter database datafile filename offline drop;
  svrmgrl>; alter database open;
  svrmgrl>; drop tablespace tablespace_name including contents;
  重建表空間及所有對象

用戶的表空間不能夠被輕易地重建

在大多數情況下重建表空間是不可能及太辛苦的工作方法是倒備份及做介質恢復如果您的系統運行在NOARCHIVELOG模式下則只有丟失的數據在online redo log中方可被恢復

步驟如下:

)Restore the lost datafile from a backup
  )svrmgrl>; startup mount
  )svrmgrl>; select vgroup#membersequence#first_change#
   >; from v$log vv$logfile v
   >; where vgroup#=vgroup#;
  )如果數據庫運行在NOARCHIVELOG模式下則:
   svrmgrl>; select file#change# from v$recover_file;
   如果 CHANGE# 大於最小的FIRST_CHANGE#則數據文件可以被恢復如果 CHANGE# 小於最小的FIRST_CHANGE#則數據文件不可恢復 恢復最近一次的全備份或采用方案一
  )svrmgrl>; recover datafile filename;
  )確認恢復成功
  )svrmgrl>; alter database open resetlogs;

只讀表空間無需做介質恢復只要將備份恢復即可唯一的例外是:

表空間在最後一次備份後被改為readwrite 模式
  表空間在最後一次備份後被改為readonly 模式
  在這種情況下均需進行介質恢復

臨時表空間

臨時表空間並不包含真正的數據恢復的方法是刪除臨時表空間並重建即可

系統表空間

如果備份不可用則只能采用重建數據庫的方法

回滾表空間

有兩種情況:

數據庫已經完全關閉(使用shutdown immediate或shutdown命令)

) 確認數據庫完全關閉
  ) 修改initora文件注釋rollbacksegment
  ) svrmgrl>; startup restrict mount
  ) svrmgrl>; alter database datafile filename offline drop;
  ) svrmgrl>; alter database open;
   基於出現的結果:
   statement processed 轉()
   ORAORAORA轉()
  ) svrmgrl>; shutdown immediate
   修改initora文件增加如下一行:
   _corrupted_rollback_segments = ()
   svrmgrl>; startup restrict
  ) svrmgrl>; drop tablespace tablespace_name including contents;
   重建表空間及回滾段
  ) svrmgrl>; alter system disable restricted session;
  ) 修改initora文件

數據庫未完全關閉(數據庫崩潰或使用shutdown abort命令關閉數據庫)

) 恢復備份
  ) svrmgrl>; startup mount
  ) svrmgrl>; select file#namestatus from v$datafile;
   svrmgrl>; alter database datafile filename online;
  ) svrmgrl>; select vgroup#membersequence#first_change#
   >; from v$log vv$logfile v
   >; where vgroup#=vgroup#;
  ) svrmgrl>; select file#change# from v$recover_file;
   見一方案
  ) svrmgrl>; recover datafile filename;
  ) svrmgrl>; alter database open;

數據庫處於打開狀態

) 刪除回滾段和表空間
  ) 重建表空間和回滾段

控制文件恢復                     

.所有的控制文件均被破壞

將備份的控制文件拷貝至原目錄下
  對於RAW DEVICE則:
  dd if=conbak of=/dev/rdrd/drd seek=

.並非所有的控制文件均被破壞用其他的控制文件啟動數據庫

數據文件上所存儲的表
select asegment_name from dba_extents adba_data_files b
where afile_id = bfile_id
and bfile_name = 文件名全路徑
and asegment_type = TABLE

job不能自動運行
check db parameters

job_queue_processes

if it set to
then set it larger than

job_queue_processes=

問題描述

執行如下語句
select session_idobject_name from v$locked_object adba_objects b
where aobject_id=bobject_id

error:   ora Temporary Segment cannt be cteated in locallymanaged tablespace

更改為sys 用戶 以dba登錄可以查詢


SHUTDOWN IMMEDIATE
STARTUP MOUNT
RECOVER DATABASE
ALTER DATABASE OPEN

查看表大小!
select segment_name(bytes/)/||M 大小
     ((BLOCKS*DB_BLOCK_SIZE)/)/||M占用空間
   from dba_segments
    where  segment_name =
db_block_size 是參數

查詢未提交事務
select username SID|||| SERIAL# ses TSTATUS START_TIME RNNAME USED_UBLK USED_UREC
from v$transaction T v$session S v$rollstat RS v$rollname RN
where TSES_ADDR = SSADDR
and TXIDUSN = RSUSN
and RNUSN = RSUSN
order by USED_UBLK;

  我們在操作數據庫的時候有時候會由於操作不當引起數據庫表被鎖定這麼我們經常不知所措不知怎麼給這些表解鎖在pl/sql Developer工具的的菜單tools裡面的sessions可以查詢現在存在的會話但是我們很難找到那個會話被鎖定了想找到所以被鎖的會話就更難了下面這叫查詢語句可以查詢出所以被鎖的會話如下

SELECT   snusername mSIDsnSERIAL# mTYPE
         DECODE (mlmode
                  None
                  Null
                  Row Share
                  Row Excl
                  Share
                  S/Row Excl
                  Exclusive
                 lmode LTRIM (TO_CHAR (lmode ))
                ) lmode
         DECODE (mrequest
                  None
                  Null
                  Row Share
                  Row Excl
                  Share
                  S/Row Excl
                  Exclusive
                 request LTRIM (TO_CHAR (mrequest ))
                ) request
         mid mid
    FROM v$session sn v$lock m
   WHERE (snSID = mSID AND mrequest != )         存在鎖請求即被阻塞
      OR (    snSID = mSID                         不存在鎖請求但是鎖定的對象被其他會話請求鎖定
          AND mrequest =
          AND lmode !=
          AND (id id) IN (
                        SELECT sid sid
                          FROM v$lock s
                         WHERE request != AND sid = mid
                               AND sid = mid)
         )
ORDER BY id id mrequest;

通過以上查詢知道了sid和 SERIAL#就可以開殺了
   alter system kill session sidSERIAL#;

在SQLPLUS裡
不顯示 行頭
set heading off pages

不顯示行數信息
set feedback off

不在屏幕上顯示結果
set termout off


由於該問題由oarcle工程師定位為無法恢復並在網上進行了求助也每人能解決所以
我可以方下包袱去大膽的嘗試新辦法按照我對數據庫的框架理解去尋求辦法
因為無法聯機的表空空間為用戶表空間所以不影響數據庫系統的啟動所以
通過 SQL>;startup mount;
       SQL>;alter database open;啟動數據庫
我查看了l#sysobj#表想從表中得到關於datafile的信息但沒有能找
到我認為需要的信息
後來我查看了sysfile#發現了所有數據文件的記錄然後我找到對應的file的記錄
想通過刪除該記錄來屏蔽表空間啟動時的數據文件的完整性檢測於是現對sysfile#進
行了備份然後刪除了file對應的記錄
此時執行SQL>;alter database tablespace ts_user online;
提示數據庫已被修改我驚喜的發現表空間被聯機成功了

由於相應的數據文件在這之前已經損壞而且該數據文件已經被設置成了offline並且局方在數據庫關閉後在mount狀態下直接對該文件所在表空間進行了offline操作所以現在如果再通過alter database datafile filename offline drop已經不起作用因為此時的表空間默認的狀態為offline該數據文件與其所在表空間(聯機或脫機)具有一致性所以此時如果想啟動該表空間只能通過屏蔽數據文件的完整性檢查!   數據庫業務表空間聯機失敗   數據庫業務表空間聯機失敗

由於該問題由oarcle工程師定位為無法恢復並在網上進行了求助也每人能解決所以我可以方下包袱去大膽的嘗試新辦法按照我對數據庫的框架理解去尋求辦法因為無法聯機的表空空間為用戶表空間所以不影響數據庫系統的啟動所以通過 SQL>;startup mount;SQL>;alter database open;啟動數據庫我查看了l#sysobj#表想從表中得到關於datafile的信息但沒有能找到我認為需要的信息後來我查看了sysfile#發現了所有數據文件的記錄然後我找到對應的file的記錄想通過刪除該記錄來屏蔽表空間啟動時的數據文件的完整性檢測於是現對sysfile#進行了備份然後刪除了file對應的記錄此時執行SQL>;alter database tablespace ts_user online;提示數據庫已被修改我驚喜的發現表空間被聯機成功了
/dev/rlvdata文件需要介質恢復表空間聯機失敗!


From:http://tw.wingwit.com/Article/program/Oracle/201311/18996.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.