http://blog.csdn.net/lili72
背景:由于历史缘由,公司部份业务还在使用oracle中。1出问题就是弄的很麻烦。由于长时间使用的是mysql 和hive,Hbase等,1些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