oracel 常用操作(一)

查看存儲過程內容:select text from user_source where name =upper('sp_kr_pd_markplan_info')
查看是否調用存儲過程:select * from dgdm_dw.tb_dw_sys_log where table_name='TB_DW_MD_WORKF_MARKPLAN_CUR';
查看分區的命令:從視圖user_tab_partitions  和  user_segments 中可以查詢到

增加新分區命令:alter table table_name add partition partition_name values()
查看存儲過程中含有tb_kr_kpi_nuser_day:select * from user_source t where t.type like '%tb_kr_kpi_nuser_day%'
查看錶結構命令 select dbms_metadata.get_ddl('TABLE','TB_KR_SC_VIP_MON','dgdm_kr') from dual;

查看存儲過程命令 select text from user_source where name =upper('sp_kr_pd_markplan_sta_qqt');
編譯存儲過程 alter procedure sp_kr_pd_markplan_sta_qqt COMPILE;

導出表結構和存儲過程
exp dgdm_ods/dgdm_ods file=dgdm_ods_struct rows=no log=dgdm_ods
...
關鍵是rows=no不導入數據


顯示錶結構:
select dbms_metadata.get_ddl('TABLE','TB_MK_SC_USER_WEEK','DGDM_MK') FROM DUAL;

執行存儲過程

var ttt number;

 SP_KR_SERVICE_DAY('20070610',:ttt);

1、查看錶空間的名稱及大小
column db_name format a10
select SYS_CONTEXT ('USERENV', 'db_name') db_name,t.tablespace_name,round(sum(bytes/(1024*1024)),0) ts_size
from sys.dba_tablespaces t, sys.dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name
order by 2;


6、查看錶空間的使用情況
select tablespace_name,round(sum(bytes)/1024/1024/1024) as free_space
from dba_free_space
group by tablespace_name
order by 1;

--表空間使用情況
SELECT A.TABLESPACE_NAME,round(A.BYTES/1024/1024/1024) TOTAL,round(B.BYTES/1024/1024/1024) USED, round(C.BYTES/1024/1024/1024) FREE,
round((B.BYTES*100)/A.BYTES,2) "% USED",round((C.BYTES*100)/A.BYTES,2) "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME
--and round((B.BYTES*100)/A.BYTES,2) >90
order by 1;


--表空間內對象
column segment_name format a30
column partition_name format a30
select segment_name,partition_name,bytes/1024/1024 from dba_segments where tablespace_name ='TBS_DW_LIST_DATA_5' order by 1,2;

壓縮分區
alter table dgdm_dw.tb_dw_ls_cdr_gsm move partition ls_cdr_gsm_20070501 compress parallel 30;
--對象有效性
Select owner,object_Name,status From all_objects
Where owner In('GDDM_CB','DGDM_ODS','DGDM_DW','DGDM_KR','DGDM_MK')
 And object_type In ('PROCEDURE','FUNCTION')
Order By 1,2

select dbms_metadata.get_ddl('TABLE','TB_KR_SC_VIP_MON','dgdm_kr') from dual;


oracle數據庫備份有兩種方法:物理備份(數據庫運行在歸檔模式下)和
 邏輯備份(數據庫不需要運行在歸檔模式下,通常業務數據庫採用邏輯備份,它備份比較簡單)
邏輯備份數據庫:
 oracle數據庫的邏輯備份有三種模式:表備份,用戶備份,完全備份
 表備份:備份某個用戶下指定的對象,備份到本地文件命令:
  exp icdmain/icd rows=y indexs=n compress=n buffer=65536 feedback=100000 volsize=0
  file=test.dmp log=test.log tables=icdmain.table1,icdmain.table2
 用戶備份:備份某個用戶模式下所有的對象,備份到本地文件命令:
  exp icdmain/icd owner=icdmain rows=y indexs=n compress=n buffer=65536 feedback=100000 volsize=0
  file=test.dmp log=test.log
 完全備份:備份完整的數據庫,備份到本地的命令如下:
  exp icdmain/icd
恢復方案:
 數據庫邏輯恢復分爲表恢復、用戶恢復、完全恢復三種模式
 表恢復:
  A:恢復備份數據的全部內容,轉向文件所在的目錄,從本地文件恢復
   imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexs=n commit=y buffer=65536 feedback=100000 ignore=n volsize=0
   file=test.dmp log=test.log STATISTICS=none
  B:恢復備份數據
   imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexs=n commit=y buffer=65536 feedback=100000 ignore=n volsize=0
   file=test.dmp log=test.log tables=table1,table2
 用戶恢復:
  imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
  commit=y buffer=65536 feedback=100000 ignore=n volsize=0
  file=exp_icdmain_yyyymmdd.dmp log=imp_icdmain_yyyymmdd.log
 完全模式:
  imp system/manager rows=y indexes=n commit=y buffer=65536
  feedback=100000 ignore=y volsize=0 full=y
  file=exp_icdmain_yyyymmdd.dmp log=imp_icdmain_yyyymmdd.log  
參數說明
1. ignore參數
Oracle在恢復數據的過程中,當恢復某個表時,該表已經存在,就要根據ignore參數的設置來決定如何操作。
若ignore=y,Oracle不執行CREATE TABLE語句,直接將數據插入到表中,如果插入的記錄違背了約束條件,比如主鍵約束,則出錯的記錄不會插入,但合法的記錄會添加到表中。
若ignore=n,Oracle不執行CREATE TABLE語句,同時也不會將數據插入到表中,而是忽略該表的錯誤,繼續恢復下一個表。
2. indexes參數
在恢復數據的過程中,若indexes=n,則表上的索引不會被恢復,但是主鍵對應的唯一索引將無條件恢復,這是爲了保證數據的完整性。  
恢復方法
業務數據庫採用表恢復方案。在用IMP進行恢復前,先在SYS用戶下運行CATEXP.SQL文件(如果以前已運行該文件,則不要執行這個腳本),然後執行下列命令:
IMP ICDMAIN/ICD FILE=文件名 LOG=LOG文件名 ROWS=Y
COMMIT=Y BUFFER=Y IGNORE=Y TABLES=表名
注:要恢復的表名參照備份的表名
  。恢復是在原表基礎上累加數據
  。沒有特殊說明,不允許在客戶端執行恢復命令
恢復時注意事項:如果存在分區表,目標分區表中的分區必須存在源分區表中的分區,否則會提示分區不存在
  
  
  
從oracle數據庫導出數據命令:
exp dgdm_ods/dgdm_ods file=XXXX0615 log=XXXX0615 direct=y tables=dgdm_dw.ab1,tab2,tab3:part1,tab4:part2,
 
表的話直接寫表名,可以加上用戶名
direct=y:從直接路徑倒出數據,比常規方式更快速;

導入數據命令:
imp dgdm_kr/dgdm_kr file=kr0615.dmp full=y  log=imp.kr0615.dmp.log ignore=y


ORA-01033: ORACLE initialization or shutdown in progress
原因:可能是起了一個sqlplus來關閉數據庫,但數據庫還沒有完全關閉之前,從操作系統裏把剛纔那個sqlplus的進程給殺掉了
      另一種可能是oracle的一些核心後臺進程,被人從操作系統裏殺掉了,那麼在關閉數據庫是就出現了問題
解決方法:
1.在dos下執行sqlplus /nolog
2.以sysdba連接conn / as sysdba
3.startup
4.shutdown immediate
5.startup
數據庫成功裝載成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章