修改密碼方法:
1.SQL> grant connect to USRNAME identified by USRPWD ;
2.SQL> alter user USRNAME identified by USRPWD ;
3.SQL> passWord USRNAME ;
更改 USRNMAE 的口令
舊口令:××××××
新口令:××××××
重新鍵入新口令:××××××
修改成Oracle認證方法:
1.修改參數文件中
remote_login_passwordfile=EXCLUSIVE 或SHARED
2.修改/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=50
comment ='temporaty change on'
scope = memoryspfileboth ;
alter session set
CONCAT('Good', 'String') GoodString
SUBSTR('String',1,3) Str
LENGTH('String') 6
INSTR('String', 'r') 3
LPAD(sal,10,'*') ******5000
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','12345') itpub
2 from dual;
ITPUB
--------------------------------------------
This is s53on4 tri1ning of itpu2 in B5ijing!
Floor
SQL> select floor(4.55) from dual;
FLOOR(4.55)
-----------
4
Ceil
SQL> select ceil(4.55) from dual;
CEIL(4.55)
----------
5
ROUND: 4舍5入到指定的小數位
ROUND(45.926, 2) 45.93
TRUNC: 將值截斷到指定的小數位
TRUNC(45.926, 2) 45.92
MOD: 返回相除后的余數
MOD(1600, 300) 100
select trunc(sysdate, 'D') - 3 from dual;
trunc(sysdate, 'D'), 截取到本周的第一天(0:00)
trunc(sysdate, 'M'), 截取到本月的第一天(0:00)
trunc(sysdate, 'DD'), 截取到本日的0:00
trunc(sysdate,'yyyy')得到今年的第一天的0:00.
十進制與十六進制
EYGLE@vilen> select to_char(2463,'xxxx') from dual;
TO_CH
-----
99f
已選擇 1 行。
十六進制與十進制
EYGLE@vilen> select to_number('99f','xxxx') from dual;
TO_NUMBER('99F','XXXX')
-----------------------
2463
SQL> select ename,sal,
2 case job WHEN 'MANAGER' THEN 1.1*sal
3 WHEN 'ANALYST' THEN 1.2*SAL
4 WHEN 'CLERK' THEN 1.5*SAL
5 ELSE sal END "NEW_SAL"
6 from emp;
ENAME SAL NEW_SAL
---------- ---------- ----------
SMITH 800 1200
ALLEN 1600 1600
WARD 1250 1250
JONES 2975 3272.5
MARTIN 1250 1250
BLAKE 2850 3135
CLARK 2450 2695
SCOTT 3000 3600
KING 5000 5000
TURNER 1500 1500
ADAMS 1100 1650
JAMES 950 1425
FORD 3000 3600
MILLER 1300 1950
SQL> SELECT job, sal,
2 DECODE(job, 'ANALYST' SAL*1.1,
3 'CLERK', SAL*1.15,
4 'MANAGER', SAL*1.20,
5 SAL)
6 REVISED_SALARY
7 FROM emp;
JOB SAL REVISED_SALARY
--------- --------- --------------
PRESIDENT 5000 5000
MANAGER 2850 3420
MANAGER 2450 2940
將空值轉換為實際的值
數據格式可以是日期,字符,數字
數據類型必須匹配
NVL(comm,0)
NVL(hiredate,'01-JAN-97')
NVL(job,'No Job Yet')
NVL2(eXPr1,expr2,expr3)
假如expr1不為Null,返回expr2,假如expr1為Null,返回expr3。
expr1可以為任何數據類型
NULLIF(expr1,expr2)
比較兩個表達式,假如相等返回空值,假如不等返回第一個值。
COALESCE(expr1,expr2,...,exprn)
返回表達式列表里的第一個非空表達式
錯誤:
在啟動數據庫時出現ORA-01157,ORA-01110或操作系統級錯誤例如ORA-07360,
在關閉數據庫(使用shutdown normal或shutdown immediate) 時將導致錯誤ORA
-01116,ORA-01110以及操作系統級錯誤ORA-07368
解決:
以下有兩種解決方案:
1.用戶的表空間可以被輕易地重建
即最近導出的對象是可用的或表空間中的對象可以被輕易地重建等.在這種情況下,最簡單的方法是offline并刪除該數據文件,刪除表空間并重建表空間以及所有的對象.
svrmgrl> startup mount
svrmgrl> alter database datafile filename offline drop;
svrmgrl> alter database open;
svrmgrl> drop tablespace tablespace_name including contents;
重建表空間及所有對象.
2.用戶的表空間不能夠被輕易地重建
在大多數情況下,重建表空間是不可能及太辛勞的工作.方法是倒備份及做介質恢復.假如您的系統運行在NOARCHIVELOG模式下,則只有丟失的數據在online redo log中方可被恢復。
步驟如下:
1)Restore the lost datafile from a backup
2)svrmgrl> startup mount
3)svrmgrl> select v1.group#,member,sequence#,first_change#
> from v$log v1,v$logfile v2
> where v1.group#=v2.group#;
4)假如數據庫運行在NOARCHIVELOG模式下則:
svrmgrl> select file#,change# from v$recover_file;
假如 CHANGE# 大于最小的FIRST_CHANGE#則數據文件可以被恢復。假如 CHANGE# 小于最小的FIRST_CHANGE#則數據文件不可恢復。 恢復最近一次的全備份或采用方案一.
5)svrmgrl> recover datafile filename;
6)確認恢復成功
7)svrmgrl> alter database open resetlogs;
3.只讀表空間無需做介質恢復,只要將備份恢復即可.唯一的例外是:
表空間在最后一次備份后被改為read-write 模式
表空間在最后一次備份后被改為read-only 模式
在這種情況下,均需進行介質恢復
二、臨時表空間
臨時表空間并不包含真正的數據,恢復的方法是刪除臨時表空間并重建即可.
三、系統表空間
假如備份不可用,則只能采用重建數據庫的方法
四、回滾表空間
有兩種情況:
1、數據庫已經完全關閉(使用shutdown immediate或shutdown命令)
1) 確認數據庫完全關閉
2) 修改init.ora文件,注釋"rollback-segment"
3) svrmgrl> startup restrict mount
4) svrmgrl> alter database datafile filename offline drop;
5) svrmgrl> alter database open;
基于出現的結果:
"statement processed" 轉(7)
"ORA-00604,ORA-00376,ORA-01110"轉(6)
6) svrmgrl> shutdown immediate
修改init.ora文件,增加如下一行:
_corrupted_rollback_segments = (,...)
svrmgrl> startup restrict
7) svrmgrl> drop tablespace tablespace_name including contents;
8) 重建表空間及回滾段
9) svrmgrl> alter system disable restricted session;
10) 修改init.ora文件
2、數據庫未完全關閉(數據庫崩潰或使用shutdown abort命令關閉數據庫)
1) 恢復備份
2) svrmgrl> startup mount
3) svrmgrl> select file#,name,status from v$datafile;
svrmgrl> alter database datafile filename online;
4) svrmgrl> select v1.group#,member,sequence#,first_change#
> from v$log v1,v$logfile v2
> where v1.group#=v2.group#;
5) svrmgrl> select file#,change# from v$recover_file;
見一方案2-4
6) svrmgrl> recover datafile filename;
7) svrmgrl> alter database open;
3、數據庫處于打開狀態
1) 刪除回滾段和表空間
2) 重建表空間和回滾段
五、控制文件恢復
1.所有的控制文件均被破壞
將備份的控制文件拷貝至原目錄下
對于RAW DEVICE,則:
dd if='con.bak' of='/dev/rdrd/drd1' seek=128
2.并非所有的控制文件均被破壞用其他的控制文件啟動數據庫。
3. 數據文件上所存儲的表
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 0
then set it larger than 0
job_queue_processes=1
問題描述
執行如下語句
select session_id,object_name from v$locked_object a,dba_objects b
where a.object_id=b.object_id
error: ora-03212 Temporary Segment cannt be cteated in locally-managed tablespace.
更改為sys 用戶 以dba登錄,可以查詢.
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
RECOVER DATABASE;
ALTER DATABASE OPEN;
查看表大??!
select segment_name,(bytes/1024)/1024'M' 大小,
((BLOCKS*DB_BLOCK_SIZE)/1024)/1024'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;
如何將數據庫中被鎖表解鎖
作者: 來自: 閱讀次數: 18 [大 中 小]
--------------------------------------------------------------------------------
我們在操作數據庫的時候,有時候會由于操作不當引起數據庫表被鎖定,這么我們經常不知所措,不知怎么給這些表解鎖,在pl/sql Developer工具的的菜單“tools”里面的“sessions”可以查詢現在存在的會話,但是我們很難找到那個會話被鎖定了,想找到所以被鎖的會話就更難了,下面這叫查詢語句可以查詢出所以被鎖的會話。如下:
SELECT sn.username, m.SID,sn.SERIAL#, m.TYPE,
DECODE (m.lmode,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl.',
4, 'Share',
5, 'S/Row Excl.',
6, 'Exclusive',
lmode, LTRIM (TO_CHAR (lmode, '990'))
) lmode,
DECODE (m.request,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl.',
4, 'Share',
5, 'S/Row Excl.',
6, 'Exclusive',
request, LTRIM (TO_CHAR (m.request, '990'))
) request,
m.id1, m.id2
FROM v$session sn, v$lock m
WHERE (sn.SID = m.SID AND m.request != 0) --存在鎖請求,即被阻塞
OR ( sn.SID = m.SID --不存在鎖請求,但是鎖定的對象被其他會話請求鎖定
AND m.request = 0
AND lmode != 4
AND (id1, id2) IN (
SELECT s.id1, s.id2
FROM v$lock s
WHERE request != 0 AND s.id1 = m.id1
AND s.id2 = m.id2)
)
ORDER BY id1, id2, m.request;
通過以上查詢知道了sid和 SERIAL#就可以開殺了
alter system kill session 'sid,SERIAL#';
在SQLPLUS里:
1.不顯示 行頭
set heading off pages 0
2.不顯示行數信息
set feedback off
3。不在屏幕上顯示結果
set termout off
1.由于該問題由oarcle工程師定位為無法恢復,并在網上進行了求助也每人能解決,所以
我可以方下包袱,去大膽的嘗試新辦法,按照我對數據庫的框架理解去尋求辦法。
2.因為無法聯機的表空空間為用戶表空間,所以不影響數據庫系統的啟動,所以
通過 :SQL>startup mount;
SQL>alter database open;啟動數據庫
3.我查看了sys.col#,sys.obj#表,想從表中得到關于datafile0016的信息,但沒有能找
到我認為需要的信息;
4.后來我查看了sys.file#,發現了所有數據文件的記錄,然后我找到對應的file0016的記錄
,想通過刪除該記錄來屏蔽表空間啟動時的數據文件的完整性檢測,于是現對sys.file#進
行了備份,然后刪除了file0016對應的記錄。
5.此時執行SQL>alter database tablespace ts_user online;
提示數據庫已被修改,我驚喜的發現表空間被聯機成功了。
由于相應的數據文件在這之前已經損壞,而且該數據文件已經被設置成了offline,并且局方在數據庫關閉后,在mount狀態下直接對該文件所在表空間進行了offline操作,所以現在假如再通過“alter database datafile filename offline drop”已經不起作用,因為此時的表空間默認的狀態為offline,該數據文件與其所在表空間(聯機或脫機)具有一致性。所以此時假如想啟動該表空間,只能通過屏蔽數據文件的完整性檢查! 數據庫業務表空間聯機失敗 數據庫業務表空間聯機失敗
1.由于該問題由oarcle工程師定位為無法恢復,并在網上進行了求助也每人能解決,所以我可以方下包袱,去大膽的嘗試新辦法,按照我對數據庫的框架理解去尋求辦法。2.因為無法聯機的表空空間為用戶表空間,所以不影響數據庫系統的啟動,所以通過 :SQL>startup mount;SQL>alter database open;啟動數據庫3.我查看了sys.col#,sys.obj#表,想從表中得到關于datafile0016的信息,但沒有能找到我認為需要的信息;4.后來我查看了sys.file#,發現了所有數據文件的記錄,然后我找到對應的file0016的記錄,想通過刪除該記錄來屏蔽表空間啟動時的數據文件的完整性檢測,于是現對sys.file#進行了備份,然后刪除了file0016對應的記錄。5.此時執行SQL>alter database tablespace ts_user online;提示數據庫已被修改,我驚喜的發現表空間被聯機成功了。
"/dev/rlvdata0016"文件需要介質恢復,表空間聯機失??!