工作中的oracle常用維護,oracle維護
http://blog.csdn.net/lili72
背景:由於曆史原因,公司部分業務還在使用oracle中。一出問題就是搞的很麻煩。由於長期使用的是mysql 和hive,Hbase等,一些oracle的命令慢慢的也是忘記了,但是公司某些在oracle上的業務,突然出現問題,每次尋找問題都查得比較費勁,現把常用命令記錄下來。
常遇到的oracle的問題:
1.0 遠程登入到oracle。
1.0.1 ssh root@192.168.119.132 -p22330
su oracle
1.0.2 ps -ef | grep oracle
找到oracle的位置
進入sqlplus
sqlplus /nolog
conn /as sysdba
1.1 oracle密碼到期,串連失敗
1.1.1 查看使用者
select * from dba_profiles where resource_type='PASSWORD';
1.1.2 設定無到期
alter profile DEFAULT limit unlimited;
alter profile DEFAULT limit password_reuse_time unlimited;
1.2 oracle的表分區超限,插入資料失敗 由於oracle的定界分割
新增表分區:
alter table bi_test_1215_test_del add partition t_range_p132 values less than (to_date('20150110','yyyymmdd')) tablespace USERS storage ( initial 64K minextents 1 maxextents unlimited ) ;
1.3 oracle的資料表空間滿了,需要擴充。
1.3.2 查看錶空間佔用情況:
SELECT tbs 資料表空間名,
sum(totalM) 總共大小M,
sum(usedM) 已使用空間M,
sum(remainedM) 剩餘空間M,
sum(usedM)/sum(totalM)*100 已使用百分比,
sum(remainedM)/sum(totalM)*100 剩餘百分比
FROM(
SELECT b.file_id ID,
b.tablespace_name tbs,
b.file_name name,
b.bytes/1024/1024 totalM,
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 usedM,
sum(nvl(a.bytes,0)/1024/1024) remainedM,
sum(nvl(a.bytes,0)/(b.bytes)*100),
(100 - (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
)
GROUP BY tbs
1.3.2 擴充資料表空間:
--增加資料檔案
alter tablespace USERS add datafile '/data2/oracle/users02.dbf' size 50m;
1.4 oracle的鎖表處理
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo,
dba_objects ao,
v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;
或者:
select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID;
刪掉鎖表語句:
alter system kill session '198';
1.5 oracle語句最佳化,新增索引,建分區表
1.5.1 首先考慮查詢條件 建索引。
建立: create index inde_name on table_name (col_name) tablespace users storage ( initial 500k next 500k pctincrease 0 )
查詢:select * from dba_indexes where table_name ='t_li72';
1.5.2 資料量實比較大,考慮建分區表。
create table li72_test_deal
(
LOGDATE DATE,
FILENAME VARCHAR2(600)
)
partition by range(logdate)(
partition t_range_p1 values less than (to_date('20140901','yyyymmdd')),
partition t_range_p2 values less than (to_date('20140902','yyyymmdd')),
Sqoop到oracle的語句:從hive到oracle
按分區選擇列同步資料到oracle中
sqoop export --connect jdbc:oracle:thin:@192.1.118.210:1521:orcl --username biuser --password biusertmp --table li72.tmp_SRC_PLAY_LH_1203_temp --columns LOGDATE,FILENAME,SINGER,SONG,SEARCHOVERPLAY,SEARCHPLAY,OVERPLAY,UNINPUTKEY,INPUTPARTKEY,INPUTALLKEY,MP3OVERPLAY,MVOVERPLAY,MVRANDOMPLAY,MP3RANDOMPLAY,TRYPLAY,DOWNLOAD,SEARCHCLICK,SEARCH,PLAY --export-dir /user/hive/warehouse/bi_test.db/li72_hoer_sear_play/dt=${vDay} --input-fields-terminated-by '|'
從oracle到hive中:
sqoop import--hive-import --connect jdbc:oracle:thin:@192.116.80.118:1521:CUSTOMER2--username biuser --password biusertmp --verbose -m 1 --table class_type