一 MQ命令
1:查看所有队列管理器 dspmq;
2:运行通道 runmqsc 队列名;
3:查看通道运行状态 dis chs(*);
查看现有的通道包括未启动的: dis chl(*)
4:查看队列深度 dis q(*)
5:删除队列 delete chanel(删除之前一定要关掉通道)
二 linux通过命令导入数据库表数据的命令。
1:进入数据库操作命令: sqlplus npstest/npstest@app
2: 在oracle下数据库用户执行 show parameter service_names //查看当前数据库service_name(app)
3: 在oracle下数据库用户执行 show parameter instance_name //查看当前SID
4: 导入表中的数据: @+绝对路径+.sql; @/home/npstest/work/rfnxy_realtran.sql。(记得在sql最后一句后面加commit提交)。
三 数据库索引命令
1: 查看表的索引(注意表名要大写):
select * from dba_indexes s where s.table_name='NPS_EPCC_COMM'
2: 查看索引名对应的索引列名
select * from user_ind_columns where index_name='NPS_EPCC_COMM_IDX2'
3: oracle删除索引(小写索引名)
删除索引: drop index 表名.索引名;
drop index nps_epcc_comm_idx2
4: 创建索引:
建立索引: create index +索引名(idx_) on 表名(列名);
建立唯一索引:create unique index+索引名(idx_) on 表名(列名);
create index NPS_EPCC_COMM_IDX2 on nps_epcc_comm(ordrid,msgid)
5: 清空数据表: truncate table +表名
四 数据库在服务器的导入导出
1: 导出
(1)首先要进入oracle用户下
(2)建立用户名(有脚本db_user_npstest.sh)
(3)将用户user用户表导入到/tmp下
[1] 导整个数据库用户的表
exp user/password@orcl file=/tmp/20180115.dmp owner=user
exp npstest/npstest owner=npstest file=/tmp/ nps.dmp
[2] 导出数据库用户的单张表
将用户user用户的表table1,table2导入到(导两张表)/tmp下
exp user/password@orcl file=/tmp/20180115.dmp tables=(table1,table2)
exp npstest/npstest@app file=/tmp/ nps.dmp tables=(nps_realtran,nps_transfer)(没有onwer这一选项);
将用户user用户的表table1中的字段filed1以"a"开头的数据导出
exp user/passwor@orcl filed=/tmp/20180115.dmp tables=(table1) query=/" where filed1 like 'a%'/"
(4)将生成的.dmp文件导入到某个用户下
imp user/password@orcl filed=/tmp/20180115.dmp ignore=n full=y
imp qxnxy/qxnxy@app fromuser=npstest touser=qxnxy ignore=n file=/tmp/nps.dmp
五 锁表问题怎样解决
1: 首先你要知道表锁住了是不是正常锁?因为任何DML语句都会对表加锁。
2: 你要先查一下是那个会话那个sql锁住了表,有可能这是正常业务需求,不建议随便KILL session,如果这个锁表是正常业务你把session kill掉了会影响业务的。
建议先查原因再做决定。
错误码:-30006 锁表
错误码 -1 重复插表;
错误码 -1480 字段长度问题导致插表失败。
3: 锁表解决方案
(1)锁表查询的代码有以下的形式:
select count(*) from v$locked_object;
select * from v$locked_object;
(2)查看哪个表被锁
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
(3)查看是哪个session引起的
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
(4)查看是哪个sql引起的
select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid
and b.SQL_ID = c.sql_id and c.sql_id = ''order by b.logon_time;
(5)杀掉对应进程
执行命令:alter system kill session'1025,41';
其中1025为sid,41为serial#.
六 oracle数据库在服务器上连接不上的问题。
1: 数据库连接不上报28002的问题(密码过期了)
(1)进入orcale用户下 输入命令: sqlplus /nolog ,进入oracle控制台,并输入 conn /as sysdba;
(2) alter user 用户名 identified by 新密码;(注意一定要加分号,要不就会报错)
alter user apps identified by 123456;
2: 怎样将oracle数据库用户密码过期这个限制解决掉
(1)在该数据库用户下执行
SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
(2)将密码有效期由默认的180天修改成"无限制"
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
(3)检查密码的有效期是否为"无限制"
SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
3: 重启数据库
(1)进入orcale数据库用户下 输入命令: sqlplus /nolog ,进入oracle控制台,并输入 connect /as sysdba;
(2)SQL> startup (作用:启动数据库实例);
SQL> shutdown immediate (停止数据库的指令);
七 重启平台服务前杀进程步骤
1: 平台假如服务异常先执行kpall命令杀进程;然后rmipc
2: ps -ef|grep xznxy 查看这个用户的进程;
3: 然后将第三列是1的进程杀掉。kill -9 +进程号;(1是僵尸进程);
4: 重启服务。
八 数据库报-12541数据库监听的问题
Oracle 启动监听命令
启动监听:lsnrctl start
查看监听:lsnrctl status
停止监听:lsnrctl stop
这个实在oracle用户下执行。
九 数据库oracle语句查询的比如只要发送机构号和协议号相同的去除掉,用传统的distinct只能去重一模一样的数据针对只有两个字段相同去重还不能办到,所以现在借用oracle函数进行去重;
select *
from (select protocolno,
snd_nps_brno,
tx_date,
pay_acc,
pay_acc_name,
certtype,
certno,
phone,
row_number() OVER(PARTITION BY protocolno, snd_nps_brno order by tx_date desc) as row_flag
from nps_zfxygl
where stat = 'PR02'
and manage_type = 'MT02')
where row_flag = '1' ;
这个是去重掉protocolno,snd_nps_brno 这两个字段相同按日期排序只取日期最大的一个数列字段。
十 top-N问题
找到员工表中工资最高的的前三名
select rownum,enpno,ename,sal
from enp
where rownum<=3
order by sal desc (err)
select rownum,enpno,ename,sal from
(select enpno,ename,sal
from enp
order by sal desc)
where rownum<=3;
rownum不会因为排序而改变,开始对应哪个位置就是哪个位置。
rownum是结果集的固有属性。就相当于一条数据的固有值。
十一 分页数据提取问题
找到员工表中工资5到8名的人
select rownum,r,enpno,ename,sal
from
{
select rownum r,enpno,ename,sal from
(select enpno,ename,sal
from enp
order by sal desc)
where r<=8;
}
where r>=5
十二:linux服务器中导入.sql文件,
1:如果是通过windows上传。并且打开这个文件.一定要在linux服务器cat -v 文件名|head -5看一下文件末尾是不是^M
cat -A 文件名等价于cat -vET
2:如果是,用dos2unix 文件名 去掉这个^M
3;在存放.sql文件的地方 sqlplus npstest/npstest@app
4:@文件名
5:[注意]我用PLsql导出的文件想插入老报错,具体原因不太清楚,但是DB_visual确可以。
十三:关于rollback,flashback回退问题
1:rollback必须是在commit提交事务之前才会有效,提交之后无效。
2:flashback这个我理解只对删除的表(drop)有效。这个必须是在
select * from recyclebin这个回收站有的数据才会保存。同时这个表如果删除之前有数据也会在闪退值=之后存在的。
闪退的命令:flashback table CHENLONG1 to before drop;执行之后就会有数据了。
3:小注意:sqlplus中导入文件一定要在后面加commit,否则只是在事务里面。不会在PLsql中查到。
十四:
创建新用户方案 通过MYSCOTTUSER1来访问数据库, 权限配置演示
CREATE USER zhang PROFILE DEFAULT IDENTIFIED BY zhang DEFAULT TABLESPACE USERS ACCOUNT UNLOCK;
GRANT CONNECT TO zhang;
GRANT SELECT ANY TABLE TO zhang;
GRANT DELETE ON npstest.nps_realtran TO zhang;
GRANT INSERT ON npstest.nps_realtran TO zhang;
GRANT UPDATE ON npstest.nps_realtran TO zhang;
commit;
登录到zhang的用户
执行:select * from npstest.nps_realtran