導航:首頁 > 數據分析 > 分布式服務如何跨庫統計數據

分布式服務如何跨庫統計數據

發布時間:2024-11-25 02:12:49

Ⅰ sql怎樣跨資料庫查詢oracle

假定您現在擁有一個以Microsoft.NET為架構的網路訂購系統,但是品管維護系統卻仍然使用一套舊式的Oracle資料庫應用程序。當您的顧客在產品保固期間下了產品更換之類的訂單,則該筆訂單將不收取任何費用。此時您需要從Oracle資料庫得到實時的查詢結果。借著建立連結伺服器的方式(linkedServer),您將可以從SQLServer實時查詢出位於Oracle資料庫的顧客資料,找出誰是您既有的客戶。
當您的資料分散在不同的SQLServer資料庫時,藉由連結伺服器可讓您執行跨伺服器之分布式查詢。當所有的資料庫伺服器都是SQLServer,則連結伺服器的設定十分容易,而且在SQLServer線上手冊中就涵蓋了您所需要了解的所有事項。然而,當部分資料是放在Oracle資料庫伺服器的時候,這就可能帶給您許多挑戰。舉例來說,光是設定連結伺服器就不是一件容易的事。您必須了解到:即是您要在SQLServer的EnterpriseManager設定一個Oracle連結伺服器,這台SQLServer對Oracle來說就是一個客戶端。所以您必須在SQLServer所在的伺服器成功地安裝並組態Oracle之客戶端軟體。因為Oracle提供的產品只支持Oracle8以後的資料庫,所以我假設您正在使用的都是Oracle8以後的資料庫。在OracleNet8函式庫則提供了SQLServer所需要的客戶端軟體。
設定連接伺服器時是利用Microsoft所提供的OLEDB ProviderforOracle,使用的Oracle網路函式庫為SQL*Net2.3.3.0.4或是以後的版本,不過這是Oracle7.3資料庫所提供的。換句話說,要設定Oracle資料庫為SQLServer的連接伺服器時,Oracle資料庫只要是7.3.3.4以後的版本,並搭配適當的SQL*Net或是Net8函式庫即可。
在Oracle資料庫中,一個schema即代表著SQLServer專家們所熟知的單一資料庫(譯者注2)。連接至Oracle資料庫時,您必須提供schema名稱、密碼以及主機聯機字元串(hoststring)。每一個特定的Oracle帳戶都擁有一個Oracleschema,而且只能有一個schema。所以schema名稱其實就等於該schema擁有者的帳戶名稱。您可以查詢Oracle的資料字典(Datadictionary)以得到更多有關schema的內容。
至於Oracle聯機字元串又可稱為服務名稱(servicename)或是系統識別資料(SystenIdentifier,SID)。我們所謂的SQLServer資料庫個體(instance)在Oracle則稱為資料庫(database)。所以安裝OracleServer時,安裝程序OracleUniversalInstaller(為一個圖形介面之安裝程序,與SQLServer的Setup程序類似)將會詢問您SID名稱為何,以作為Oracle資料庫之名稱。
這個部分原作者所提到schema的解釋有點問題。Oracleschema可視為同一個使用者所擁有的所有資料庫對象(schemaobjects)之集合。舉例來說,使用者scott所建立的EMPtable其完整名稱為SCOTT.EMP,而SCOTT就是EMP的schema名稱。所以schemaname其實就是一個Oracle資料庫之使用者帳號。但是絕對不能拿來跟資料庫相提並論!因為SQLServer的資料庫架構包含了datafiles與logfiles,但是Oracle的schemaobjects只存在於tablespace中。為了避免部分讀者產生混淆,特此說明。

Ⅱ 如何將A資料庫的數據遷移到B資料庫中

工具/原料

電腦 資料庫

方法/步驟

1、首先,打開並連接Sql Server,在源資料庫Source_db上右擊,依次點擊「編寫表腳本為」→「CREATE到」→「新查詢編輯器窗口」。

Ⅲ 什麼是跨庫檢索

跨庫檢索(Cross-Databasesearch)是一個以多個分布式異構數據源為檢索對象的數據檢索系統,又稱為多資料庫檢索、集成檢索或聯邦檢索。

簡單來說,就是輸入一次檢索詞,系統同時在幾個資料庫中查找。

(3)分布式服務如何跨庫統計數據擴展閱讀

跨庫檢索的由來和背景:

為了通過Internet向用戶提供信息服務,越來越多的信息情報服務中心(如圖書館、院校、科研單位等)購買或建設了各類網路資料庫。然而由於這些網路資料庫提供廠商的多方性,產生了資料庫標准和結構的差異性。

人們不得不自己了解各個資料庫的使用方法和限制,通過不同的工具和協議與之交互,匯集表達不一的處理結果,這無疑帶來了極大的不便,跨庫檢索為了解決這個問題而誕生和發展。

跨庫檢索的意義:

跨庫檢索可以在檢索文獻時在多個資料庫同時檢索,比如說在CNKI中可以同時在學位論文資料庫、期刊論文資料庫、會議論文資料庫中同時選擇多個資料庫進行檢索,可以極大提高查全率和查詢效率。

Ⅳ 分庫分表後如何查詢

在大型互聯網應用中,數據量的增長是不可避免的。為了應對這種情況,分庫分表是一種常見的解決方案。但是,分庫分表後如何查詢呢?
首先,我們需要了解分庫分表的原理。分庫是將數據按照一定規則分散到多個資料庫中,而分表是將同一張表的數據按照一定規則分散到多個表中。這樣做的好處是可以提高數據的讀寫性能和擴展性。
在進行查詢時,我們需要知道數據所在的庫和表。一般來說,我們可以通過應用程序的配置文件或者路由規則來確定數據所在的庫和表。例如,我們可以將用戶ID按照一定規則映射到不同的庫和表中,然後在查詢時根據用戶ID來確定數據所在的庫和表。
在確定了數據所在的庫和表之後,我們就可以進行查詢了。對於單庫單表的查詢,我們可以直接使用SQL語句進行查詢。而對於分庫分表的查詢,我們需要使用分布式查詢工具來進行查詢。常見的分布式查詢工具有MyCat、TDDL、Sharding-JDBC等。
這些工具可以將多個庫和表看作一個整體,對外提供統一的查詢介面。在進行查詢時,我們只需要將SQL語句發送給分布式查詢工具,工具會自動將查詢分發到對應的庫和表中,並將結果合並返回給應用程序。
需要注意的是,在進行分庫分表查詢時,我們需要避免跨庫跨表的查詢。因為跨庫跨表的查詢會涉及到多個資料庫的網路通信,會嚴重影響查詢性能。因此,我們需要盡可能地將查詢限制在單個庫和表中。
另外,我們還需要注意分庫分表後的數據一致性問題。因為數據被分散到多個庫和表中,所以在進行寫操作時需要保證數據的一致性。一般來說,我們可以使用分布式事務來保證數據的一致性。
總之,分庫分表是一種常見的解決大數據量問題的方案。在進行查詢時,我們需要確定數據所在的庫和表,並使用分布式查詢工具進行查詢。同時,我們還需要注意數據一致性和查詢性能的問題。

Ⅳ PL/SQL怎麼建立跨庫(ORACLE)

Oracle dblink詳解

Oracle日常管理

database link概述
database link是定義一個資料庫到另一個資料庫的路徑的對象,database link允許你查詢遠程表及執行遠程程序。在任何分布式環境里,database都是必要的。另外要注意的是database link是單向的連接。
在創建database link的時候,Oracle再數據字典中保存相關的database link的信息,在使用database link的時候,Oracle通過Oracle Net用用戶預先定義好的連接信息訪問相應的遠程資料庫以完成相應的工作。
建立database link之前需要確認的事項:
確認從local database到remote database的網路連接是正常的,tnsping要能成功。
確認在remote database上面有相應的訪問許可權。
database link分類
類型Owner描述

Private 創建database link的user擁有該database link 在本地資料庫的特定的schema下建立的database link。只有建立該database link的schema的session能使用這個database link來訪問遠程的資料庫。同時也只有Owner能刪除它自己的private database link。
Public Owner是PUBLIC. Public的database link是資料庫級的,本地資料庫中所有的擁有資料庫訪問許可權的用戶或pl/sql程序都能使用此database link來訪問相應的遠程資料庫。
Global Owner是PUBLIC. Global的database link是網路級的,When an Oracle network uses a directory server, the directory server automatically create and manages global database links (as net service names) for every Oracle Database in the network. Users and PL/SQL subprograms in any database can use a global link to access objects in the corresponding remote database.
Note: In earlier releases of Oracle Database, a global database link referred to a database link that was registered with an Oracle Names server. The use of an Oracle Names server has been deprecated. In this document, global database links refer to the use of net service names from the directory server.
創建dblink所需的許可權
PrivilegeDatabaseRequired For

CREATE DATABASE LINK Local Creation of a private database link.
CREATE PUBLIC DATABASE LINK Local Creation of a public database link.
CREATE SESSION Remote Creation of any type of database link.
database link的使用
基本語法
CREATE [SHARED][PUBLIC] database link link_name
[CONNECT TO [user][current_user] IDENTIFIED BY password]
[AUTHENTICATED BY user IDENTIFIED BY password]
[USING 'connect_string']
說明:
1) 許可權:創建資料庫鏈接的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統許可權,用來登錄到遠程資料庫的帳號必須有CREATE SESSION許可權。這兩種許可權都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK許可權在DBA中)。一個公用資料庫鏈接對於資料庫中的所有用戶都是可用的,而一個私有鏈接僅對創建它的用戶可用。由一個用戶給另外一個用戶授權私 有資料庫鏈接是不可能的,一個資料庫鏈接要麼是公用的,要麼是私有的。
2)link : 當source端的資料庫GLOBAL_NAME=TRUE時,link名必須與遠程資料庫的全局資料庫名global_name)相同;否則,可以任意命名。
3)current_user使用該選項是為了創建global類型的dblink。在分布式體系中存在多個資料庫的話。如果想要在每一個資料庫中都可以使用同樣的名字來訪問資料庫a,那在每個資料庫中都要創建一個到資料庫a的db_link,太麻煩了。所以現在有這個選項。你只要創建一次。所有的資料庫都可以使用這個db_link來訪問了。要使用這個特性,必須有oracle nameserver或者ORACLE目錄伺服器。並且資料庫a的參數global_names=true.具體我也沒有創建過,沒有這個環境。
4)connectstring:連接字元串,tnsnames.ora中定義遠程資料庫的連接串,也可以在創建dblink的時候直接指定。
5)username、password:遠程資料庫的用戶名,口令。如果不指定,則使用當前的用戶名和口令登錄到遠程資料庫,當創建connected user類型的dblink時,需要如果採用數據字典驗證,則需要兩邊資料庫的用戶名密碼一致。
創建database link選項說明
取值說明

不指定 默認值建立一個dedicated的連接,每一個使用database link的本地session都會對應有一個遠程資料庫的session。
SHARED 創建一個共享的資料庫連接,同時要指定database link_authentication。
使用shared方式的 database link是資料庫會限制到遠程資料庫的連接的數量,這樣以避免過多的連接對遠程資料庫造成太大的壓力。在使用shared database link的時候,到database link的連接會在連接以後與本地連接斷開,為防止未授權的session使用此鏈接而要求在創建shared database link的時候必須要指定database link_authentication。
(from Oracle document: A shared database link is a link between a local server process and the remote database. The link is shared because multiple client processes can use the same link simultaneously.)
共享鏈接更多資料
共享資料庫鏈接是指該鏈接的多個用戶可以共享同一個底層網路連接。例如,在有四位用戶的MTS(多線程伺服器)環境下,每一個共享伺服器進程都將與遠程伺服器有一個物理鏈接,這四位用戶共享這兩個鏈接。
表面上,共享鏈接乍一聽起來像是一件好事。在某些環境下的確如此,但是,當你考慮使用共享鏈接時,應當意識到這有許多局限性和警告:
如果你使用一個專用的伺服器連接來連接到你的本地資料庫,鏈接只能在你從那些連接中創建的多重會話間共享 。在MTS環境里,每一個共享伺服器進程潛在地打開一個鏈接。所有的會話被同一共享伺服器進程提供並且分享被那個進程打開的任意共享鏈接。因為在MTS環境里的一個共享伺服器進程能夠服務於許多用戶連接,共享鏈接的使用可能導致打開的鏈接遠多於所必須的鏈接。用SHARED關鍵字建立共享資料庫鏈接。還必須使用AUTHENTICATED BY 子句在遠程系統上指定一有效的用戶名和口令。如下命令建立一個共享的、公用的、連接用戶資料庫鏈接:
CREATE SHARED PUBLIC database link GNIS
AUTHENTICATED BY DUMMY_USER IDENTIFIED BY SECRET
USING 『GNIS』;
要獲得創建鏈接和管理分布式系統的更多資料,請查閱Oracle Technology Network (http://otn.oracle.com/)。
使用AUTHENTICATED BY子句稍微有些困擾,但是由於實現共享鏈接的方式安全性決定它是必須的。這個例子中的用戶名和口令DUMMY_USER/SECRET必須在遠程系統上有效。然而,遠程系統上使用的帳戶仍就是連接用戶的帳戶。如果我以JEFF/SECRET登陸到我的本地資料庫並使用我剛建好的共享鏈接,將會發生以下一系列事件:
為了打開鏈接,Oracle使用DUMMY_USER/SECRET向遠程資料庫授權。然後,Oracle試圖使用HMAD/SECRET使我登陸到遠程資料庫。共享鏈接的主要目的是減少兩個資料庫伺服器之間的底層網路連接數量。它們最適合於MTS環境,在那你擁有大量的通過這一鏈接訪問遠程資料庫的用戶。觀念上,你想讓用戶數量超過共享伺服器進程的數量。那麼你可以通過為每一共享伺服器進程打開一個鏈接而不是每位用戶打開一個鏈接的方法,節省資源。
database link使用方式
取值說明

不指定 默認值建立一個private的database link
PUBLIC 公共連接,這樣的連接可以被數據的所有的用戶訪問
database link用戶驗證方法
取值說明

不指定 默認值採取Connected User的驗證方法
CONNECT TO CURRENT_USER 採取CURRENT_USER的驗證方式
CONNECT TO user_name IDENTIFIED BY password 採取Fiexed User的驗證方式
database link創建舉例
SQL StatementConnects To DatabaseConnects AsLink Type

CREATE database link
sales.us.americas.acme_auto.com USING 『sales_us』; sales using net service name sales_us Connected user Private connected user
CREATE database link foo
CONNECT TO CURRENT_USER USING
『am_sls』; sales using service name am_sls Current global user Private current user
CREATE database link
sales.us.americas.acme_auto.com
CONNECT TO scott IDENTIFIED
BY tiger USING 『sales_us』; sales using net service name sales_us scott using password tiger Private fixed user
CREATE PUBLIC database link
sales CONNECT TO scott
IDENTIFIED BY tiger USING 『rev』; sales using net service name rev scott using password tiger Public fixed user
CREATE SHARED PUBLIC database link
sales.us.americas.acme_auto.com
CONNECT TO scott IDENTIFIED
BY tiger AUTHENTICATED BY
anupam IDENTIFIED BY bhide USING 『sales』; sales using net service name sales scott using password tiger, authenticated as anupam using password bhide Shared public fixed user
不使用TNS Name一例:
CREATE database link link_name
CONNECT TO user IDENTIFIED BY screct
USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = sales.company.com)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sales)
)
)';
database link的使用
-- 最簡單的用法
SELECT * FROM table_name@database link;
-- 不想讓使用的人知道database link的名字的時候
-- 建一個別名包裝一下
CREATE SYNONYM table_name FOR table_name@database link;
SELECT * FROM table_name;
-- 或者,也可以建立一個視圖來封裝
CREATE VIEW table_name AS SELECT * FROM table_name@database link;
database link刪除
-- 刪除public類型的database link
DROP PUBLIC database link link_name;
-- 刪除非public類型的database link
-- 注意:只有owner自己能刪除自己的非public類型database link
DROP database link link_name;
查看database link的信息
查看系統database link的基本信息
DBA_DB_LINKS (ALL_DB_LINKS/USER_DB_LINKS)
DBA_DB_LINKS視圖為每一定義的鏈接返回一行。OWNER 列和DB_LINK列分別顯示了這一鏈接的所有者及名稱。對公用資料庫鏈接,OWNER列將包含』PUBLIC』。如果你建立固定用戶鏈接,用戶名應在DBA_DB_LINKS視圖的USERNAME列里。ALL_DB_LINKS 視圖和 USER_DB_LINKS視圖與 DBA_DB_LINKS視圖相類似-它們分別顯示了你能夠訪問的所有鏈接及你所擁有的全部鏈接。
COL OWNER FOR A15
COL DB_LINK FOR A25
COL HOST FOR A25
COL USERNAME FOR A15
SELECT * FROM DBA_DB_LINKS;
DBA_OBJECTS (ALL_OBJECTS/USER_OBJECTS)
在這個視圖裡面只能查詢到系統有那些database link以及他們的owner,創建時間等信息。
COL OWNER FOR A15
COL OBJECT_NAME FOR A25
COL OBJECT_TYPE FOR A25
SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_TYPE LIKE 'database link';
查看保存的Fixed user database link所保存的用戶密碼,該密碼是經過加密的。
這是比較危險的一件事,有必要對表sys.link$的許可權進行限制。
col host for a15
col userid for a15
col passwordx for a40
col name for a20
select name, host, userid, passwordx from sys.link$;
通過database link去SELECT遠程資料庫的一個表也是一個事務嗎?
select * from v$transaction;
-- 沒有記錄,說明沒有事務
-- 通過database link連接遠程資料庫,select 其中一個表
select * from bbs_news@mylink
select * from v$transaction;
-- 發現有一條記錄。
解釋
因為本地資料庫只是將對應的sql發送給遠程資料庫執行,接受remote db返回的結果,但他並不知道是否該sql修改了數據; 所以需要為select 語句也標示一個事務。
具體可以參考otn 分布式資料庫手冊,所以在用database link遠程訪問時,要加上set transaction read only;
close database link
ALTER SESSION CLOSE database link sales;

其實,dblink的相應屬性對應了Oracle的數據字典link$,任何針對dblink的操作都是操作該數據字典。在9i的時候,如果Oracle的global_name僅包括db_name,也就是說DB_DOMAIN的值為空。那麼這個時候建立的資料庫鏈,在資料庫修改全局名GLOBAL_NAME之後(修改為db_name.db_domain格式),會無法刪除。
如果要產生資料庫鏈,必須將GLOBAL_NAME改回DB_NAME格式,即去掉後面的DOMAIN,但是這個時候,RENAME操作會自動添加域名,使得Oracle全局名無法恢復到初始狀態。因此在這情況下,如果需要刪除dblink,只能直接操作link$數據字典
delete from link$ where owner#=user_id and name=dblink_name
當然直接操作數據字典是危險的,最好做好備份,然後再進行操作。
利用dblink執行ddl
我們知道任何ddl語句都無法在dblink中直接執行,示例如下
SQL> desc db_test;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(38)

SQL> drop table db_test@DBLINK_CONNECTED_HR;
drop table db_test@DBLINK_CONNECTED_HR
*
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database
通過創建存儲過程,使得能在dblink中執行ddl語句。 注意需在目標資料庫的相應用戶下創建存儲過程 ,具體如下
SQL> exec dbms_utility.EXEC_DDL_STATEMENT@dblink('drop table db_test')
PL/SQL procere successfully completed.

SQL> desc db_test;
ERROR:
ORA-04043: object db_test does not exist

dblink的限制
You cannot perform the following operations using database links:
Grant privileges on remote objects
Execute DESCRIBE operations on some remote objects. The following remote objects, however, do support DESCRIBE operations:
Tables
Views
Proceres
Functions
Analyze remote objects
Define or enforce referential integrity
Grant roles to users in a remote database
Obtain nondefault roles on a remote database. For example, if jane connects to the local database and executes a stored procere that uses a fixed user link connecting as scott, jane receives scott's default roles on the remote database. Jane cannot issue SET ROLE to obtain a nondefault role.
Execute hash query joins that use shared server connections
Use a current user link without authentication through SSL, password, or NT native authentication

轉自http://czmmiao.iteye.com/blog/1236562
作者:czmmiao

閱讀全文

與分布式服務如何跨庫統計數據相關的資料

熱點內容
哪些地方網路信號更好些 瀏覽:753
jar反編輯工具 瀏覽:614
描述數據波動大小有哪些 瀏覽:584
u盤exfat可復制4g以上的文件嗎 瀏覽:667
a4大小的文件過塑多少錢 瀏覽:26
暢天游2app在哪裡下載 瀏覽:844
微信看文字的圖片 瀏覽:298
將文件直接粘入word 瀏覽:134
VIP解析APP有哪些 瀏覽:463
怎樣徹底卸載cad文件 瀏覽:829
iphone4港版 瀏覽:624
怎麼用命令打開程序錯誤 瀏覽:665
iphone6怎麼改控制中心 瀏覽:808
ns錯誤代碼 瀏覽:653
iphone4s如何取消軟體更新提示 瀏覽:538
jsp列印換行 瀏覽:662
哪個軟體可以編程手機軟體 瀏覽:554
如東如何學數控編程培訓 瀏覽:5
微信h5頁面怎麼修改 瀏覽:931
手機怎麼無法打開視頻文件夾 瀏覽:840

友情鏈接