修改密碼方法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/SQLNET
ORA 文件
增加 sqlnet
authentication_services=(NFS)
ORACLE_SID是操作系統級的參數
INSTANCE_NAME是數據庫級的參數
SPFILE 是服務器參數文件
PFILE 是文本參數文件
create pfile=
/oracle/test
ora
from spfile ;
show parameter spfile ; 後如果VALUE值是零
則沒有使用spfile
啟動數據庫是可以指定是用pfile還是用spfile啟動 如下
startup pfile=
/oracle/test
ora
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 oracle
oracle
training
) 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 s
on
tri
ning of itpu
in B
ijing!
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(sysdate
yyyy
)得到今年的第一天的
:
十進制與十六進制
EYGLE@vilen>; select to_char(
xxxx
) from dual;
TO_CH
f
已選擇
行
十六進制與十進制
EYGLE@vilen>; select to_number(
f
xxxx
) from dual;
TO_NUMBER(
F
XXXX
)
SQL>; select ename
sal
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(hiredate
JAN
)
NVL(job
No Job Yet
)
NVL
(expr
expr
expr
)
如果expr
不為Null
返回expr
如果expr
為Null
返回expr
expr
可以為任何數據類型
NULLIF(expr
expr
)
比較兩個表達式
如果相等返回空值
如果不等返回第一個值
COALESCE(expr
expr
exprn)
返回表達式列表裡的第一個非空表達式
錯誤:在啟動數據庫時出現ORA
ORA
或操作系統級錯誤例如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 v
group#
member
sequence#
first_change#
>; from v$log v
v$logfile v
>; where v
group#=v
group#;
)如果數據庫運行在NOARCHIVELOG模式下則:
svrmgrl>; select file#
change# from v$recover_file;
如果 CHANGE# 大於最小的FIRST_CHANGE#則數據文件可以被恢復
如果 CHANGE# 小於最小的FIRST_CHANGE#則數據文件不可恢復
恢復最近一次的全備份或采用方案一
)svrmgrl>; recover datafile filename;
)確認恢復成功
)svrmgrl>; alter database open resetlogs;
只讀表空間無需做介質恢復
只要將備份恢復即可
唯一的例外是:
表空間在最後一次備份後被改為read
write 模式
表空間在最後一次備份後被改為read
only 模式
在這種情況下
均需進行介質恢復
二臨時表空間臨時表空間並不包含真正的數據
恢復的方法是刪除臨時表空間並重建即可
三系統表空間如果備份不可用
則只能采用重建數據庫的方法
四回滾表空間有兩種情況:
數據庫已經完全關閉(使用shutdown immediate或shutdown命令)
) 確認數據庫完全關閉
) 修改init
ora文件
注釋
rollback
segment
) svrmgrl>; startup restrict mount
) svrmgrl>; alter database datafile filename offline drop;
) svrmgrl>; alter database open;
基於出現的結果:
statement processed
轉(
)
ORA
ORA
ORA
轉(
)
) svrmgrl>; shutdown immediate
修改init
ora文件
增加如下一行:
_corrupted_rollback_segments = (
)
svrmgrl>; startup restrict
) svrmgrl>; drop tablespace tablespace_name including contents;
重建表空間及回滾段
) svrmgrl>; alter system disable restricted session;
) 修改init
ora文件
數據庫未完全關閉(數據庫崩潰或使用shutdown abort命令關閉數據庫)
) 恢復備份
) svrmgrl>; startup mount
) svrmgrl>; select file#
name
status from v$datafile;
svrmgrl>; alter database datafile filename online;
) svrmgrl>; select v
group#
member
sequence#
first_change#
>; from v$log v
v$logfile v
>; where v
group#=v
group#;
) svrmgrl>; select file#
change# from v$recover_file;
見一方案
) svrmgrl>; recover datafile filename;
) svrmgrl>; alter database open;
數據庫處於打開狀態
) 刪除回滾段和表空間
) 重建表空間和回滾段
五控制文件恢復 .所有的控制文件均被破壞
將備份的控制文件拷貝至原目錄下
對於RAW DEVICE
則:
dd if=
con
bak
of=
/dev/rdrd/drd
seek=
.並非所有的控制文件均被破壞用其他的控制文件啟動數據庫
數據文件上所存儲的表
select a
segment_name from dba_extents a
dba_data_files b
where a
file_id = b
file_id
and b
file_name =
文件名全路徑
and a
segment_type =
TABLE
job不能自動運行
check db parameters
job_queue_processes
if it set to
then set it larger than
job_queue_processes=
問題描述
執行如下語句
select session_id
object_name from v$locked_object a
dba_objects b
where a
object_id=b
object_id
error: ora
Temporary Segment cannt be cteated in locally
managed 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
T
STATUS
START_TIME
RN
NAME
USED_UBLK
USED_UREC
from v$transaction T
v$session S
v$rollstat RS
v$rollname RN
where T
SES_ADDR = S
SADDR
and T
XIDUSN = RS
USN
and RN
USN = RS
USN
order by USED_UBLK;
我們在操作數據庫的時候
有時候會由於操作不當引起數據庫表被鎖定
這麼我們經常不知所措
不知怎麼給這些表解鎖
在pl/sql Developer工具的的菜單
tools
裡面的
sessions
可以查詢現在存在的會話
但是我們很難找到那個會話被鎖定了
想找到所以被鎖的會話就更難了
下面這叫查詢語句可以查詢出所以被鎖的會話
如下
SELECT sn
username
m
SID
sn
SERIAL#
m
TYPE
DECODE (m
lmode
None
Null
Row Share
Row Excl
Share
S/Row Excl
Exclusive
lmode
LTRIM (TO_CHAR (lmode
))
) lmode
DECODE (m
request
None
Null
Row Share
Row Excl
Share
S/Row Excl
Exclusive
request
LTRIM (TO_CHAR (m
request
))
) request
m
id
m
id
FROM v$session sn
v$lock m
WHERE (sn
SID = m
SID AND m
request !=
)
存在鎖請求
即被阻塞
OR ( sn
SID = m
SID
不存在鎖請求
但是鎖定的對象被其他會話請求鎖定
AND m
request =
AND lmode !=
AND (id
id
) IN (
SELECT s
id
s
id
FROM v$lock s
WHERE request !=
AND s
id
= m
id
AND s
id
= m
id
)
)
ORDER BY id
id
m
request;
通過以上查詢知道了sid和 SERIAL#就可以開殺了
alter system kill session
sid
SERIAL#
;
在SQLPLUS裡
不顯示 行頭
set heading off pages
不顯示行數信息
set feedback off
不在屏幕上顯示結果
set termout off
由於該問題由oarcle工程師定位為無法恢復
並在網上進行了求助也每人能解決
所以
我可以方下包袱
去大膽的嘗試新辦法
按照我對數據庫的框架理解去尋求辦法
因為無法聯機的表空空間為用戶表空間
所以不影響數據庫系統的啟動
所以
通過
SQL>;startup mount;
SQL>;alter database open;啟動數據庫
我查看了l#
sys
obj#表
想從表中得到關於datafile
的信息
但沒有能找
到我認為需要的信息
後來我查看了sys
file#
發現了所有數據文件的記錄
然後我找到對應的file
的記錄
想通過刪除該記錄來屏蔽表空間啟動時的數據文件的完整性檢測
於是現對sys
file#進
行了備份
然後刪除了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#
sys
obj#表
想從表中得到關於datafile
的信息
但沒有能找到我認為需要的信息
後來我查看了sys
file#
發現了所有數據文件的記錄
然後我找到對應的file
的記錄
想通過刪除該記錄來屏蔽表空間啟動時的數據文件的完整性檢測
於是現對sys
file#進行了備份
然後刪除了file
對應的記錄
此時執行SQL>;alter database tablespace ts_user online;提示數據庫已被修改
我驚喜的發現表空間被聯機成功了
/dev/rlvdata
文件需要介質恢復
表空間聯機失敗!
From:http://tw.wingwit.com/Article/program/Oracle/201311/18996.html