當前位置:首頁 » 操作系統 » 監聽資料庫變化

監聽資料庫變化

發布時間: 2023-09-06 03:37:22

① android 資料庫怎麼監聽數據變化

在android中經常會用到改變資料庫內容後再去使用資料庫更新的內容,很多人會重新去query一遍,但是這樣的問題就是程序會特別占內存,而且有可能會摟關cursor而導致程序內存未釋放等等。其實android內部提供了一種ContentObserver的東西來監聽資料庫內容的變化。
ContentObserver的構造函數需要一個參數Hanlder,因為ContentObserver內部使用了一個實現Runnable介面的內部類NotificationRunnable,來實現資料庫內容的變化。需要使用hanlder去post消息。注冊ContentObserver的方法是:getContentResolver().registerContentObserver(uri, notifyForDescendents, observer).
上面3個參數為:uri----Uri類型,是需要監聽的資料庫的uri.
notifyForDescendents---boolean true的話就會監聽所有與此uri相關的uri。false的話則是直接特殊的uri才會監聽。一般都設置為true.
observer-----ContentObserver 就是需要的contentobserver.
初始化一個ContentObserver對象,重載onChange(boolean ),在這個方法里去操作資料庫的使用,針對變化後的使用。

php中有沒有什麼方法可以實現實時監聽資料庫中的某張表的變化

最好的辦法是,在應用程序生命周期內,對於資料庫設置有事件鉤子,用於監聽程序對於資料庫的操作。這樣非常方便處理邏輯流程。

1 - 表的數據變化

表數據發生了變化,毫無疑問是寫操作,包括以下幾種情形:

  1. 新建條目 create

  2. 更新條目 update

  3. 刪除條目 delete

以上三種都是寫操作,會對表數據寫入。

Laravel Observer

結語

上面的方法要求讀者有laravel框架的使用基礎,對於構建中大型應用非常有利。

③ Oracle資料庫監聽配置

近段時間很多網友提出監聽配置相關問題 客戶終端(Client)無法連接伺服器端(Server) 本文現對監聽配置作一簡單槐告介紹 並提出一些客戶終端無法連接伺服器端的解決思路 願對廣大網友與讀者有一些幫助 監聽器(LISTENER) 監聽器是Oracle基於伺服器端的一種網路服務 主要用於監聽客戶端向資料庫伺服器端提出的連接請求 既然是基於伺服器端的服務 那麼它也只存在於資料庫伺服器端 進行監聽器的設置也是在資料庫伺服器端完成的 本地服務名(Tnsname) Oracle客戶端與伺服器端的連接是通過客戶端發出連接請求 由伺服器端監聽器對客戶端連接請求進行合法檢查 如果連接請求有效 則進行連接 否則拒絕該連接 本地服務名是Oracle客戶端網路配置的一種 另外還有Oracle名字伺服器(Oracle Names Server)等 Oracle常用的客戶端配置就是採用的本地服務名 本文中介紹的也主要是基於本鉛悶明地服務名的配置 Oracle 網路連接配置方法 配 置Oracle伺服器端與客戶端都可以在其自帶的圖形化Oracle網路管理器(Oracle Net Manager)里完成(強烈建議在這個圖形化的工具下完成Oracle服務端或客戶端的配置) 在Windows下 點擊 開始/程序/Oracle OraHome /Configuration and Migration Tools/Net Manager 啟動Oracle網路管理器工具 在Linux/Unix下 利用netmgr命令來啟動圖形化Oracle網路管理器 如 $ netmgr Windows下啟動Net Manager圖形窗口如下圖示 圖(一) Oracle監聽器配置(LISTENER) 如 圖(一)示 選中樹形目錄中監聽程序項 再點擊左上側 + 按鈕添加監聽程序 點擊監聽程序目錄 默認新加的監聽器名稱是LISTENER(該名稱也可以 由任意合法字元命名) 選中該名稱 選中窗口右側欄下拉選項中的 監聽位置 點擊添加地址按鈕 在出現的網路地址欄的協議下拉選項中選中 TCP/IP 主機文本框中輸入主機名稱或IP地址(如果主機即用作服務端也作為客戶端 輸入兩項之一均有效 如果主機作為服務端並需要通過網路連 接 建議輸入IP地址) 埠文本框中輸入數字埠 默認是 也可以自定義任意有效數字埠 配置好的監聽位置如下圖示 圖(二) 選 中窗口右側欄下拉選項中的 資料庫服務 點擊添加資料庫按鈕 在出現的資料庫欄中輸入全局資料庫名 如myoracle 注意這里的全局資料庫名與數據 庫SID有所區別 全局資料庫名實際通過域名來控制在同一網段內資料庫全局命名的唯一性 就如Windows下的域名控制器 如這里可以輸入 myoracle Oracle主目錄可以不填寫 輸入SID 如myoracle 完整的資料庫服務配置如下圖示 圖(三) 保 存以上配置 默認即可在Oracle安裝目錄下找到監聽配置文件 (Windows下如D:oracleora eorkadminlistener ora Linux/Unix下$ ORACLE_HOME/neork/admin/listerer ora) 至此 Oracle服務端監聽器配置已經完成 本地服務名配置(Tnsnames) 本 地服務名是基於Oracle客戶端的網路罩並配置 所以 如果客戶端需要連接資料庫伺服器進行操作 則需要配置該客戶端 其依附對象可以是任意一台欲連接數據 庫伺服器進行操作的PC機 也可以是資料庫伺服器自身 如前面所介紹 可以利用Oracle自帶的圖形化管理工具Net Manager來完成Oracle客戶端的配置 選中如圖(一)中的服務命名 再點擊左上側 + 按鈕 彈出如下圖示對話框 圖(四) 輸入Net服務名 如myoracle 點擊下一步 進入下圖示對話框 圖(五) 選中TCP/IP(Internet協議) 點擊下一步 如下圖示 圖(六) 輸入主機名與埠號 注意這里的主機名與埠號必須與資料庫伺服器端監聽器配置的主機名和埠號相同 點擊下一步 如下圖示 圖(七) 選 中(Oracle i或更高版本)服務名 輸入服務名 這里的服務名實際上就是資料庫伺服器端監聽器配置中的全局資料庫名 前者與後者必須相同 連接類型 通常選專用伺服器 這要視資料庫伺服器的配置而定 如果配置的共享資料庫伺服器 這里的連接類型就要選共享伺服器 否則建議選專用伺服器(關於專用伺服器 的介紹請參閱相關文檔) 配置好後點擊下一步 如下圖示 圖(八) 如 果資料庫伺服器端相關服務啟動了 可以點擊測試按鈕進行連接測試 Oracle默認是通過scott/tiger用戶進行測試連接 由於scott用戶是 Oracle自帶的示例用戶 對於正式的業務資料庫或專業測試資料庫可能沒有配置這個用戶 所以需要更改成有效的用戶登錄才可能測試成功 如果這里測試連 接不成功 也不要緊 先點完成按鈕結束配置 回 到Oracle網路管理器(Oracle Net Manager)主窗口 保存配置 默認即可在Oracle安裝目錄下找到本地服務名配置文件 (Windows下如D:oracleora eorkadmin nsnames ora Linux/Unix下$ ORACLE_HOME/neork/admin/ tnsnames ora) 配置完成的本地服務名如下圖示 圖(九) 樹形目錄下的服務命名可以通過編輯菜單里的重命名菜單更改成任意合法字元組成的服務名稱 注意服務名稱前不能有空格字元 否則可能無法連接資料庫伺服器 連接資料庫伺服器 ( ) 啟動伺服器端監聽器與資料庫服務 Linux/Unix下 啟動監聽器 $ lsnrctl start 關閉監聽器 $ lsnrctl stop 查看監聽狀態 $ lsnrctl status 啟動資料庫 $ sqlplus /nolog SQL>conn sys@myoracle as sysdba 這里的myoracle是前面配置的客戶端本地服務名 或 SQL>conn / as sysdba SQL>startup Windows下 啟動監聽器 C:lsnrctl start 啟動Oracle實例服務 C:oradim –startup –sid myoracle 關閉Oracle實例服務 C:oradim –shutdown –sid myoracle 以上服務必須同時啟動 客戶端才能連接資料庫 由於默認配置的監聽器名稱是Listener 上述命令可以正常啟動監聽器 如果監聽器名稱是其它名稱 如aListener 則需要用下列方式才能啟動 Linux/Unix下 $ lsnrctl start aListener Windows下 C:lsnrctl start aListener ( ) 測試連接資料庫伺服器 測試的方法多種多樣 可以在上面配置本地服務名時進行測試 也可以是第三方客戶端工具 如PL/SQL Developer 最方便的是用Oracle自帶的sqlplus工具 以下利用sqlplus進行測試 C:sqlplus /nolog SQL>conn zgh@myoracle 已連接 客戶端連接伺服器端常見問題排除方法 要排除客戶端與伺服器端的連接問題 首先檢查客戶端配置是否正確(客戶端配置必須與資料庫伺服器端監聽配置一致) 再根據錯誤提示解決 下面列出幾種常見的連接問題 ORA : TNS: 沒有監聽器 顯而易見 伺服器端的監聽器沒有啟動 另外檢查客戶端IP地址或埠填寫是否正確 啟動監聽器 $ lsnrctl start 或 C:lsnrctl start ORA : TNS: 監聽程序無法啟動專用伺服器進程 對於Windows而言 沒有啟動Oracle實例服務 啟動實例服務 C:oradim –startup sid myoracle ORA : TNS: 操作超時 出現這個問題的原因很多 但主要跟網路有關 解決這個問題 首先檢查客戶端與服務端的網路是否暢通 如果網路連通 則檢查兩端的防火牆是否阻擋了連接 ORA : TNS: 無法處理服務名 檢 查輸入的服務名與配置的服務名是否一致 另外注意生成的本地服務名文件(Windows下如D:oracleora eorkadmin nsnames ora Linux/Unix下$ORACLE_HOME/neork/admin/tnsnames ora)里每項服務的首 行服務名稱前不能有空格 ORA : TNS: 監聽進程不能解析在連接描述符中給出的 SERVICE_NAME 打開Net Manager 選中服務名稱 檢查服務標識欄里的服務名輸入是否正確 該服務名必須與伺服器端監聽器配置的全局資料庫名一致 Windows下啟動監聽服務提示找不到路徑 用 命令或在服務窗口中啟動監聽提示找不到路徑 或監聽服務啟動異常 打開注冊表 進入HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome TNSListener項 查看ImagePath字元串項是否存在 如果沒 有 設定值為D:oracleora BINTNSLSNR 不同的安裝路徑設定值做相應的更改 這種方法同樣適用於Oracle實例服務 同 上 找到如同HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE項 查看ImagePath字元串項是否存在 如果沒有 則新建 設定值為d:oracleora binORACLE EXE MYORACLE 以上是Oracle客戶端連接伺服器端常見的一些問題 當然不能囊括所有的連接異常 解決問題的關鍵在於方法與思路 而不是每種問題都有固定的答案 lishixin/Article/program/Oracle/201311/17900

java後台怎樣監控sql server資料庫數據的變化

看來你是做日誌或宏記錄,蘆仔在SQL server 2005中建立一個觸發器(delete,update\insert),針對table1,在觸發器的代碼中加上數據拷貝的SQL語句就可以了陪團汪。

⑤ Python 有監聽資料庫變化的模塊嗎

MySQL 的 Binlog 記錄著 MySQL 資料庫的所有變更信息,了解 Binlog 的結構可以幫助我們解析Binlog,甚至對 Binlog 進行一些修改,或者說是「篡改」,例如實現類似於 Oracle 的 flashback 的功能,恢復誤刪除的記錄,把 update 的記錄再還原回去等。本文將帶您探討一下這些神奇功能的實現,您會發現比您想像地要簡單得多。本文指的 Binlog 是 ROW 模式的 Binlog,這也是 MySQL 8 里的默認模式,STATEMENT 模式因為使用中有很多限制,現在用得越來越少了。
Binlog 由事件(event)組成,請注意是事件(event)不是事務(transaction),一個事務可以包含多個事件。事件描述對資料庫的修改內容。
現在我們已經了解了 Binlog 的結構,我們可以試著修改 Binlog 里的數據。例如前面舉例的 Binlog 刪除了一條記錄,我們可以試著把這條記錄恢復,Binlog 裡面有個刪除行(DELETE_ROWS_EVENT)的事件,就是這個事件刪除了記錄,這個事件和寫行(WRITE_ROWS_EVENT)的事件的數據結構是完全一樣的,只是刪除行事件的類型是 32,寫行事件的類型是 30,我們把對應的 Binlog 位置的 32 改成 30 即可把已經刪除的記錄再插入回去。從前面的 「show binlog events」 裡面可看到這個 DELETE_ROWS_EVENT 是從位置 378 開始的,這里的位置就是 Binlog 文件的實際位置(以位元組為單位)。從事件(event)的結構裡面可以看到 type_code 是在 event 的第 5 個位元組,我們寫個 Python 小程序把把第383(378+5=383)位元組改成 30 即可。當然您也可以用二進制編輯工具來改。
找出 Binlog 中的大事務
由於 ROW 模式的 Binlog 是每一個變更都記錄一條日誌,因此一個簡單的 SQL,在 Binlog 里可能會產生一個巨無霸的事務,例如一個不帶 where 的 update 或 delete 語句,修改了全表裡面的所有記錄,每條記錄都在 Binlog 裡面記錄一次,結果是一個巨大的事務記錄。這樣的大事務經常是產謹汪生麻煩的根源。我的一個客戶有一次向我抱怨,一個 Binlog 前滾,滾了兩天也沒有動靜,我把那個 Binlog 解析了一下,發現裡面有個事務產生了 1.4G 的記錄,修改了 66 萬條記錄!下面是一個簡單的找出 Binlog 中大事務的 Python 小程序,我們知道用 mysqlbinlog 解析的 Binlog,每個事務都是以 BEGIN 開頭,以 COMMIT 結束。我們找出 BENGIN 前面的 「# at」 的位置,檢查 COMMIT 後面的 「# at」 位置,這兩個位置相減即可計算出這個事務的大小,下面是這個 Python 程序的例子。
切割 Binlog 中的大事務
對於大的事務,MySQL 會把它分解成多個事件(注意一個是事務 TRANSACTION,另一個是事件 EVENT),事件的大小由參數 binlog-row-event-max-size 決定,這個參數默認是 8K。因此我們可以把若干個事件切割成一個單獨的略小的事務
ROW 模式下,即使我御晌瞎們只更新了一條記錄的其中某個欄位,也會記錄每個欄位變更鎮空前後的值,這個行為是 binlog_row_image 參數控制的,這個參數有 3 個值,默認為 FULL,也就是記錄列的所有修改,即使欄位沒有發生變更也會記錄。這樣我們就可以實現類似 Oracle 的 flashback 的功能,我個人估計 MySQL 未來的版本從可能會基於 Binlog 推出這樣的功能。
了解了 Binlog 的結構,再加上 Python 這把瑞士軍刀,我們還可以實現很多功能,例如我們可以統計哪個表被修改地最多?我們還可以把 Binlog 切割成一段一段的,然後再重組,可以靈活地進行 MySQL 資料庫的修改和遷移等工作。

熱點內容
batsql語句 發布:2025-01-31 14:00:13 瀏覽:733
沈陽加密狗 發布:2025-01-31 13:54:58 瀏覽:705
聯想伺服器怎麼裝windows7 發布:2025-01-31 13:54:52 瀏覽:874
java二級考試歷年真題 發布:2025-01-31 13:50:31 瀏覽:171
編程一刻 發布:2025-01-31 13:36:44 瀏覽:585
編程小草出土 發布:2025-01-31 13:33:27 瀏覽:579
如何設置伺服器屏蔽你的ip 發布:2025-01-31 13:25:58 瀏覽:243
扣扣的獨立密碼是什麼密碼 發布:2025-01-31 13:23:42 瀏覽:132
pythonlist的用法 發布:2025-01-31 12:56:15 瀏覽:130
搭建美國節點伺服器 發布:2025-01-31 12:55:27 瀏覽:858