當前位置:首頁 » 數據倉庫 » 資料庫只讀事務
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫只讀事務

發布時間: 2023-03-24 01:23:58

『壹』 mysql伺服器運行使用了只讀選項因此不能執行這條語錄怎麼辦

MySQL的事務支持不是綁定在MySQL伺服器本身,而是與存儲引擎相關1.MyISAM:不支持事務,用於只讀程序提高性能 2.InnoDB:支持ACID事務、行級鎖、並發 3.Berkeley DB:支持事務

一個事務是一個連續的一組資料庫操作,就好像它是一個單一的工作單元進行。換言之,永遠不會是完整的事務,除非該組內的每個單獨的操作是成功的。如果在事務的任何操作失敗,則整個事務將失敗。
實際上,會俱樂部許多SQL查詢到一個組中,將執行所有的人都一起作為事務的一部分。
事務的特性:
事務有以下四個標准屬性的縮寫ACID,通常被稱為:
原子性: 確保工作單元內的所有操作都成功完成,否則事務將被中止在故障點,和以前的操作將回滾到以前的狀態。
一致性: 確保資料庫正確地改變狀態後,成功提交的事務。
隔離性: 使事務操作彼此獨立的和透明的。
持久性: 確保提交的事務的結果或效果的系統出現故障的情況下仍然存在。
在MySQL中,事務開始使用COMMIT或ROLLBACK語句開始工作和結束。開始和結束語句的SQL命令之間形成了大量的事務。
COMMIT & ROLLBACK:
這兩個關鍵字提交和回滾主要用於MySQL的事務。
當一個成功的事務完成後,發出COMMIT命令應使所有參與表的更改才會生效。
如果發生故障時,應發出一個ROLLBACK命令返回的事務中引用的每一個表到以前的狀態。
可以控制的事務行為稱為AUTOCOMMIT設置會話變數。如果AUTOCOMMIT設置為1(默認值),然後每一個SQL語句(在事務與否)被認為是一個完整的事務,並承諾在默認情況下,當它完成。 AUTOCOMMIT設置為0時,發出SET AUTOCOMMIT =0命令,在隨後的一系列語句的作用就像一個事務,直到一個明確的COMMIT語句時,沒有活動的提交。
可以通過使用mysql_query()函數在PHP中執行這些SQL命令。
通用事務例子
這一系列事件是獨立於明螞所使用的編程語言,可以建立在任何使用的語言來創建應用程序的邏輯路徑。
可以通過使用mysql_query()函數在PHP中執行這些SQL命令。

BEGIN WORK開始事務發出SQL命令
發出一個或多個SQL命令,如SELECT,INSERT,UPDATE或DELETE
檢查是否有任何錯誤,一切都依據的需要。
如果有任何錯誤,那麼宴吵問題ROLLBACK命令,否則發出COMMIT命令。
在MySQL中的事務安晌槐侍全表類型:
如果打算使用MySQL事務編程,那麼就需要一種特殊的方式創建表。有很多支持事務但最流行的是InnoDB表類型。
從源代碼編譯MySQL時,InnoDB表支持需要特定的編譯參數。如果MySQL版本沒有InnoDB支持,請互聯網服務提供商建立一個版本的MySQL支持InnoDB表類型,或者下載並安裝Windows或Linux/UNIX的MySQL-Max二進制分發和使用的表類型在開發環境中。
如果MySQL安裝支持InnoDB表,只需添加一個的TYPE=InnoDB 定義表創建語句。例如,下面的代碼創建InnoDB表tcount_tbl:

代碼如下 復制代碼
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> ) TYPE=InnoDB;
Query OK, 0 rows affected (0.05 sec)
可以使用其他GEMINI或BDB表類型,但它取決於您的安裝,如果它支持這兩種類型。

由於項目設計裡面,牽扯到了金錢的轉移,於是就要用到MYSQL的事務處理,來保證一組處理結果的正確性。用了事務,就不可避免的要犧牲一部分速度,來保證數據的正確性。
只有InnoDB支持事務
事務 ACID Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)
1、事務的原子性
一組事務,要麼成功;要麼撤回。
2、穩定性
有非法數據(外鍵約束之類),事務撤回。
3、隔離性
事務獨立運行。
一個事務處理後的結果,影響了其他事務,那麼其他事務會撤回。
事務的100%隔離,需要犧牲速度。
4、可靠性
軟、硬體崩潰後,InnoDB數據表驅動會利用日誌文件重構修改。
可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定什麼時候吧事務保存到日誌里。
開啟事務
START TRANSACTION 或 BEGIN
提交事務(關閉事務)
COMMIT
放棄事務(關閉事務)
ROLLBACK
折返點
SAVEPOINT adqoo_1
ROLLBACK TO SAVEPOINT adqoo_1
發生在折返點 adqoo_1 之前的事務被提交,之後的被忽略
事務的終止
設置「自動提交」模式
SET AUTOCOMMIT = 0
每條SQL都是同一個事務的不同命令,之間由 COMMIT 或 ROLLBACK隔開
掉線後,沒有 COMMIT 的事務都被放棄
事務鎖定模式
系統默認: 不需要等待某事務結束,可直接查詢到結果,但不能再進行修改、刪除。
缺點:查詢到的結果,可能是已經過期的。
優點:不需要等待某事務結束,可直接查詢到結果。
需要用以下模式來設定鎖定模式
1、SELECT …… LOCK IN SHARE MODE(共享鎖)
查詢到的數據,就是資料庫在這一時刻的數據(其他已commit事務的結果,已經反應到這里了)
SELECT 必須等待,某個事務結束後才能執行
2、SELECT …… FOR UPDATE(排它鎖)
例如 SELECT * FROM tablename WHERE id<200
那麼id<200的數據,被查詢到的數據,都將不能再進行修改、刪除、SELECT …… LOCK IN SHARE MODE操作
一直到此事務結束
共享鎖 和 排它鎖 的區別:在於是否阻斷其他客戶發出的 SELECT …… LOCK IN SHARE MODE命令
3、INSERT / UPDATE / DELETE
所有關聯數據都會被鎖定,加上排它鎖
4、防插入鎖
例如 SELECT * FROM tablename WHERE id>200
那麼id>200的記錄無法被插入
5、死鎖
自動識別死鎖
先進來的進程被執行,後來的進程收到出錯消息,並按ROLLBACK方式回滾
innodb_lock_wait_timeout = n 來設置最長等待時間,默認是50秒
事務隔離模式
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL
READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE
1、不帶SESSION、GLOBAL的SET命令
只對下一個事務有效
2、SET SESSION
為當前會話設置隔離模式
3、SET GLOBAL
為以後新建的所有MYSQL連接設置隔離模式(當前連接不包括在內)
隔離模式
READ UNCOMMITTED
不隔離SELECT
其他事務未完成的修改(未COMMIT),其結果也考慮在內
READ COMMITTED
把其他事務的 COMMIT 修改考慮在內
同一個事務中,同一 SELECT 可能返回不同結果
REPEATABLE READ(默認)
不把其他事務的修改考慮在內,無論其他事務是否用COMMIT命令提交過
同一個事務中,同一 SELECT 返回同一結果(前提是本事務,不修改)
SERIALIZABLE
和REPEATABLE READ類似,給所有的SELECT都加上了 共享鎖
出錯處理
根據出錯信息,執行相應的處理

『貳』 mysql 如何查詢資料庫事務是只讀事務還是讀

查看 MySQL 客戶端的事務提交方式命令:局激姿select @@autocommit;
修改 MySQL 客戶端的事務提交方式為手動提交命令:set @@autocommit = 0;
(註:0 表示手動提交,即使用 MySQL 客戶端執行 SQL 命令後必須使用commit命令執行事務,否則所執行的 SQL 命令無效,如果想撤銷事務則使用 rollback 命令。1 表示自動提交,即在 MySQL 客戶端不在需要手動執行 commit 命令。)
MySQL 在自動提交模式下,每個 SQL 語句都是一個獨立的事務。
注意:
1、手動設置set @@autocommit = 0,即設定為非自動提交模式,只對當前的mysql命令行窗口有效,打開一個新的窗口後,默認還是自動提交;
2、對於非自動提交模式,鉛逗比如在命令行中添加一條記錄,退出桐絕命令行後在重新打開命令行,之前插入的記錄是不在的。(用select * from + 表名 驗證一下就可以了)

『叄』 啟動和關閉資料庫以什麼身份連接資料庫

對於大多數Oracle DBA來說,啟動和關閉Oracle資料庫最常用的方式就是在命令行方式下的Server Manager。從Oracle 8i以後,系統將Server Manager的任何功能都集中到了SQL*Plus中,也就是說從8i以後對於資料庫的啟動和關閉能夠直接通過SQL*Plus來完成,而不再另外需要Server Manager,但系統為了保持向下兼容,依舊保留了Server Manager工具。另外也可通過圖像用戶工具(GUI)的Oracle Enterprise Manager來完成系統的啟動和關閉,圖像用戶界面Instance Manager很簡單,這里不再詳述。

要啟動和關閉資料庫,必須要以具備Oracle 管理員許可權的用戶登陸,通常也就是以具備SYSDBA許可權的用戶登陸。一般我們常用INTERNAL用戶來啟動和關閉資料庫(INTERNAL用戶實際上是SYS用戶以SYSDBA連接的同義詞)。Oracle資料庫的新版本將逐步淘汰INTERNAL這個內部用戶,所以我們最好還是配置DBA用戶具備SYSDBA許可權。

二、資料庫的啟動(STARTUP)

啟動一個資料庫需要三個步驟:

1、 創建一個Oracle實例(非安裝階段)

2、 由實例安裝資料庫(安裝階段)

3、 打開資料庫(打開階段)

在Startup命令中,能夠通過不同的選項來控制資料庫的不同啟動步驟。

1、STARTUP NOMOUNT

NONOUNT選項僅僅創建一個Oracle實例。讀取init.ora初始化參數文檔、啟動後台進程、初始化系統全局區(SGA)。Init.ora文檔定義了實例的配置,包括內存結構的大小和啟動後台進程的數量和類型等。實例名根據Oracle_SID配置,不一定要和打開的資料庫名稱相同。當實例打開後,系統將顯示一個SGA內存結構和大小的列表,如下所示:

SQL> startup nomount

ORACLE 常式已啟動。

Total System Global Area 35431692 bytes

Fixed Size 70924 bytes

Variable Size 18505728 bytes

Database Buffers 16777216 bytes

Redo Buffers 77824 bytes

2、STARTUP MOUNT

該命令創建實例並且安裝資料庫,但沒有打開資料庫。Oracle系統讀取控制文檔中關於數據文檔和重作日誌文檔的內容,但並不打開該文檔。這種打開方式常在資料庫維護操作中使用,如對數據文檔的更名、改變重作日誌連同打開歸檔方式等。在這種打開方式下,除了能夠看到SGA系統列表以外,系統還會給出"資料庫裝載完畢"的提示。

3、STARTUP

該命令完成創建實例、安裝實例和打開資料庫的任何三個步驟。此時資料庫使數據文檔和重作日誌文檔在線,通常還會請求一個或是多個回滾段。這時系統除了能夠卜如裂看到前面Startup Mount方式下的任何提示外,還會給出一個"資料庫已打開"的提示。此時,資料庫系統處於正常工作型閉狀態,能夠接受用戶請求。

假如採用STARTUP NOMOUNT或是STARTUP MOUNT的資料庫打開命令方式,必須採用ALTER DATABASE命令來執行打開橡廳資料庫的操作。例如,假如您以STARTUP NOMOUNT方式打開資料庫,也就是說實例已創建,但是資料庫沒有安裝和打開。這是必須運行下面的兩條命令,資料庫才能正確啟動。

ALTER DATABASE MOUNT;

ALTER DATABASE OPEN;

而假如以STARTUP MOUNT方式啟動資料庫,只需要運行下面一條命令即能夠打開資料庫:

ALTER DATABASE OPEN.

4、其他打開方式

除了前面介紹的三種資料庫打開方式選項外,更有另外其他的一些選項。

(1) STARTUP RESTRICT

這種方式下,資料庫將被成功打開,但僅僅允許一些特權用戶(具備DBA角色的用戶)才能夠使用資料庫。這種方式常用來對資料庫進行維護,如數據的導入/導出操作時不希望有其他用戶連接到資料庫操作數據。

(2) STARTUP FORCE

該命令其實是強行關閉資料庫(shutdown abort)和啟動資料庫(startup)兩條命令的一個綜合。該命令僅在關閉資料庫碰到問題不能關閉資料庫時採用。

(3) ALTER DATABASE OPEN READ ONLY;

該命令在創建實例連同安裝資料庫後,以只讀方式打開資料庫。對於那些僅僅提供查詢功能的產品資料庫能夠採用這種方式打開。

三、資料庫的關閉(SHUTDOWN)

對於資料庫的關閉,有四種不同的關閉選項,下面對其進行一一介紹。

1、SHUTDOWN NORMAL

這是資料庫關閉SHUTDOWN命令的確省選項。也就是說假如您發出SHUTDOWN這樣的命令,也即是SHUTDOWN NORNAL的意思。

發出該命令後,任何新的連接都將再不允許連接到資料庫。在資料庫關閉之前,Oracle將等待現在連接的任何用戶都從資料庫中退出後才開始關閉資料庫。採用這種方式關閉資料庫,在下一次啟動時無需進行任何的實例恢復。但需要注意一點的是,採用這種方式,也許關閉一個資料庫需要幾天時間,也許更長。

2、SHUTDOWN IMMEDIATE

這是我們常用的一種關閉資料庫的方式,想很快地關閉資料庫,但又想讓資料庫干凈的關閉,常採用這種方式。

當前正在被Oracle處理的SQL語句立即中斷,系統中任何沒有提交的事務全部回滾。假如系統中存在一個很長的未提交的事務,採用這種方式關閉資料庫也需要一段時間(該事務回滾時間)。系統不等待連接到資料庫的任何用戶退出系統,強行回滾當前任何的活動事務,然後斷開任何的連接用戶。

3、SHUTDOWN TRANSACTIONAL

該選項僅在Oracle 8i後才能夠使用。該命令常用來計劃關閉資料庫,他使當前連接到系統且正在活動的事務執行完畢,運行該命令後,任何新的連接和事務都是不允許的。在任何活動的事務完成後,資料庫將和SHUTDOWN IMMEDIATE同樣的方式關閉資料庫。

4、SHUTDOWN ABORT

這是關閉資料庫的最後一招,也是在沒有任何辦法關閉資料庫的情況下才不得不採用的方式,一般不要採用。假如下列情況出現時能夠考慮採用這種方式關閉資料庫。

1、 資料庫處於一種非正常工作狀態,不能用shutdown normal或shutdown immediate這樣的命令關閉資料庫;

2、 需要立即關閉資料庫;

3、 在啟動資料庫實例時碰到問題;

任何正在運行的SQL語句都將立即中止。任何未提交的事務將不回滾。Oracle也不等待現在連接到資料庫的用戶退出系統。下一次啟動資料庫時需要實例恢復,因此,下一次啟動可能比平時需要更多的時間。

『肆』 Spring中Transactional放在類級別和方法級別上有什麼不同

是的
一般類上這么寫鎮虧運
@Transactional(readOnly=true) //配置事務 查詢使用 只讀
public Demo{
//方法的寫法 (增御梁刪改要寫 ReadOnly=false 為可寫)
@Transactional (propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly=false)
public void saveUser(){
}

}
Propagation.REQUIRED :有事務就處於當前事務中,沒事務就創建一個事務
isolation=Isolation.DEFAULT:事務資料庫的默認隔離級別
readOnly=false:可寫 針空漏對 增刪改操作

注意:方法的@Transactional會覆蓋類上面聲明的事務

『伍』 資料庫滿了怎麼辦

問題一:資料庫空間滿了怎麼處理 1:分離資料庫 企業管理器->伺服器->資料庫->右鍵->分離資料庫
2:刪除LOG文件
3:附加資料庫 企業管理器->伺服器->資料庫->右鍵->附加資料庫
此法生成新的LOG,大小隻有500多K
再將此資料庫設置自動收縮
或用代碼分離 pubs,然後將 pubs 中的一個文件附加到當前伺服器:
EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'

問題二:資料庫滿了怎麼辦? 資料庫是只讀的(Readonly),也即不可以修改(增加\刪除\修改都不行)

問題三:SQL server資料庫日誌滿了怎麼處理? 解決方法
日誌文件滿而造成SQL資料庫無法寫入文件時,可用兩種方法:
一種方法:清空日誌。
1.打開查詢分析器,輸入命令
DUMP TRANSACTION 資料庫名 WITH NO_LOG
2.再打開企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了。
另一種方法有一定的風險性,因為SQL SERVER的日誌文件不是即時寫入資料庫主文件的,如處理不當,會造成數據的損失。
1: 刪除LOG
分離資料庫 企業管理器->伺服器->資料庫->右鍵->分離資料庫
2:刪除LOG文件
附加資料庫 企業管理器->伺服器->資料庫->右鍵->附加資料庫
此法生成新的LOG,大小隻有500多K。
注意:建議使用第一種方法。
如果以後,不想要它變大。
SQL2000下使用:
在資料庫丁點右鍵->屬性->選項->故障恢復-模型-選擇-簡單模型。
或用SQL語句:
alter database 資料庫名 set recovery simple
另外,如上圖中資料庫屬性有兩個選項,與事務日誌的增長有關:
Truncate log on checkpoint
(此選項用於SQL7.0,SQL 2000中即故障恢復模型選擇為簡單模型)
當執行CHECKPOINT 命令時如果事務日誌文件超過其大小的70% 則將其內容清除在開發資料庫時時常將此選項設置為True
Auto shrink
定期對資料庫進行檢查當資料庫文件或日誌文件的未用空間超過其大小的25%時,系統將會自動縮減文件使其未用空間等於25% 當文件大小沒有超過其建立時的初始大小時不會縮減文件縮減後的文件也必須大於或等於其初始大小對事務日誌文件的縮減只有在對其作備份時或將Truncate log on checkpoint 選項設為True 時才能進行。
注意:一般立成建立的資料庫默認屬性已設好,但碰到意外情況使資料庫屬性被更改,請用戶清空日誌後,檢查資料庫的以上屬性,以防事務日誌再次充滿。

問題四:資料庫空間滿了怎麼處理 各資料庫空間滿處理方法
wenku./...YexzIW

問題五:網站的虛擬空間,資料庫滿了怎麼辦? 肯定有影響啦,你自己說的,每天發很多文章,最終資料庫滿了,就是說文章保存在資料庫中,一般來說資料庫保存釘東西都是內存不是很大的東西,除了網站cms所必要的數據和系統日誌之外,就是你文章的文字啦,至於圖片和視頻等等佔用空間很多的東西就保存在網頁空間裡面了,和數據沒有關系。
就如樓上的所說,問題不大,增加資料庫的容量就行了,現在一般的IDC都會提供這樣的服務,對你現在的網站不會有影響的。此外聯系客服也很重要的。祝你早日解決問題!

問題六:SQL數據磁碟滿了怎麼解決? -- 清空日誌
--壓縮日誌及資料庫文件大小

/*--特別注意
請按步驟進行,未進行前面的步驟,請不要做後面的步驟
否則可能損壞你的資料庫.
--*/
select*fromsysfiles
--1.清空日誌
DUMPTRANSACTIONusernameWITHNO_LOG

--2.截斷事務日誌:
BACKUPLOGusernameWITHNO_LOG

--3.收縮資料庫文件(如果不壓縮,資料庫的文件不會減小
-- 企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件
--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了
--選擇數據文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了

-- 也可以用SQL語句來完成
--收縮資料庫
DBCCSHRINKDATABASE(username)

--收縮指定數據文件,1是文件號,可以通過這個語句查詢到:select*fromsysfiles

DBCCSHRINKFILE(2)

--4.為了最大化的縮小日誌文件(如果是sql7.0,這步只能在查詢分析器中進行)
-- a.分離資料庫:
-- 企業管理器--伺服器--資料庫--右鍵--分離資料庫

-- b.在我的電腦中刪除LOG文件

-- c.附加資料庫:
-- 企業管理器--伺服器--資料庫--右鍵--附加資料庫

-- 此法將生成新的LOG,大小隻有500多K

-- 或用代碼:
-- 下面的示例分離username,然後將username中的一個文件附加到當前伺服器。

execsp_dboptionusername,'singleuser',true
a.分離
[email protected] ='username'

b.刪除日誌文件
execmaster..xp_cmdshell'delD:\ProgramFiles\SQL\database\username_LOG.ldf'

c.再附加
[email protected] ='username',
@physname='D:\ProgramFiles\SQL\database\username_Data.MDF'

--5.為了以後能自動收縮,做如下設置:
-- 企業管理器--伺服器--右鍵資料庫--屬性--選項--選擇自動收縮

--SQL語句設置方式:
EXECsp_dboption'資料庫名','autoshrink','TRUE'

--6.如果想以後不讓它日誌增長得太大
-- 企業管理器--伺服器--右鍵數據......>>

問題七:資料庫日誌已滿,如何處理? 先提供一種復雜的方法壓縮日誌及資料庫文件如下:1.清空日誌 mp transaction 庫名 with no_log2.截斷事務日誌: backup log 資料庫名 with no_log3.收縮資料庫文件(如果不壓縮,資料庫的文件不會減小 企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件 --選擇日誌文件--在收縮方式里選擇收縮至xxm,這里會給出一個允許收縮到的最小m數,直接輸入這個數,確定就可以了 --選擇數據文件--在收縮方式里選擇收縮至xxm,這里會給出一個允許收縮到的最小m數,直接輸入這個數,確定就可以了 也可以用sql語句來完成 --收縮資料庫 dbcc shrinkdatabase(客戶資料) --收縮指定數據文件,1是文件號,可以通過這個語句查詢到:select * from sysfiles dbcc shrinkfile(1)4.為了最大化的縮小日誌文件(如果是sql 7.0,這步只能在查詢分析器中進行) a.分離資料庫: 企業管理器--伺服器--資料庫--右鍵--分離資料庫 b.在我的電腦中刪除log文件 c.附加資料庫: 企業管理器--伺服器--資料庫--右鍵--附加資料庫 此法將生成新的log,大小隻有500多k 或用代碼: 下面的示例分離 pubs,然後將 pubs 中的一個文件附加到當前伺服器。 a.分離 e x e c sp_detach_db @dbname = 'pubs' b.刪除日誌文件 c.再附加 e x e c sp_attach_single_file_db @dbname = 'pubs', @physname = 'c:\program files\microsoft sql server\mssql\data\pubs.mdf'5.為了以後能自動收縮,做如下設置: 企業管理器--伺服器--右鍵資料庫--屬性--選項--選擇自動收縮 --sql語句設置方式: e x e c sp_dboption '資料庫名', 'autoshrink', 'true'6.如果想以後不讓它日誌增長得太大 企業管理器--伺服器--右鍵資料庫--屬性--事務日誌 --將文件增長限制為xm(x是你允許的最大數據文件大小) --sql語句的設置方式: alter database 資料庫名 modify file(name=邏輯文件名,maxsize=20) 我來完善答案完善答案通過審核後,可獲得3點財富值最新回答:2012-06-20 05:01 版本:1個歷史版本

問題八:如何從根本上解決SQL資料庫日誌已滿的問題 1、你設置了日誌文件的最大數,資料庫的恢復模式是完整恢復模式,所有的針對資料庫的改動都會記錄到日誌,不僅僅是你的改動資料庫,資料庫本身的操作也有記錄到日誌,所以,日誌文件才會不斷增長。
2、那是因為大部分的電腦上的資料庫,基本沒怎麼變過,但生產用的資料庫經常變動,所以日誌記錄也變得巨大,我見過資料庫200MB,但是日誌文件50GB,因為本來資料庫有10GB,因為測試需要刪除了大部分的數據,結果導致日誌文件增長到了50GB。
3、定時備份日誌並收縮日誌文件。
4、通過備份日誌,並收縮日誌文件,這個語句你自己網路。
5、日誌是一個以事務編號連續的記錄,比如,我第一次備份的日誌事務編號為1-1000,那麼日誌就會被截斷,並從1001開始,之後的日誌備份就從1001開始了,所以,初始備份一直到最後一次備份都不能刪除,否則使用日誌恢復時會出現問題。

問題九:oracle資料庫空間占滿了,怎麼辦 1、刪除無用文件或數據,騰空間。
2、將空間緊張的數據移到其他空閑空間。
3、增加新存儲空間。

問題十:如何清理sql server 已滿的資料庫日誌 SQLSERVER的資料庫日誌佔用很大的空間,下面提供三種方法用於清除無用的資料庫日誌文件
方法一:
1、打開查詢分析器,輸入命令
backup log database_name WITH NO_log
2、再打開企業管理器--右鍵要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至xxm,這里會給出一個允許收縮到的最小m數,直接輸入這個數,確定就可以了。
方法二:
設置檢查點,自動截斷日誌
一般情況下,SQL資料庫的收縮並不能很大程度上減小資料庫大小,其主要作用是收縮日誌大小,應當定期進行此操作以免資料庫日誌過大
1、設置資料庫模式為簡單模式:打開SQL企業管理器,在控制台根目錄中依次點開Microsoft SQL Server-->SQL Server組-->雙擊打開你的伺服器-->雙擊打開資料庫目錄-->選擇你的資料庫名稱(如用戶資料庫cwbase1)-->然後點擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇「簡單」,然後按確定保存
2、在當前資料庫上點右鍵,看所有任務中的收縮資料庫,一般裡面的默認設置不用調整,直接點確定
3、收縮資料庫完成後,建議將您的資料庫屬性重新設置為標准模式,操作方法同第一點,因為日誌在一些異常情況下往往是恢復資料庫的重要依據
方法三:通過SQL收縮日誌
把代碼復制到查詢分析器里,然後修改其中的3個參數(資料庫名,日誌文件名,和目標日誌文件的大小),運行即可
SET NOCOUNT on
DECLARE @logicalFileName sysname,
@MaxMinutes int,
@NewSize int
USE tablename -- 要操作的資料庫名
select @logicalFileName = 'tablename_log', -- 日誌文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想設定的日誌文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
select @OriginalSize = size
from sysfiles
WHERE name = @logicalFileName
select 'Original Size of ' + db_name() + ' log is ' +
ConVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
ConVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'mb'
from sysfiles
WHERE name = @logicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter int,
@StartTime DATETIME,
@Trunclog VARCHAR(255)
select @StartTime = getdate(),
@Trunclog = 'backup log ......>>

『陸』 Oracle資料庫只讀事務與順序事務的理解。

回話1:設置為只讀事務,應該是伏賀這樣嘛:
select
sal
from
emp
where
ename
=
『SMITH』
for
update;
你再按你步驟試一姿困下看看,回話2是不是hung了
第二個問題是:只讀事務只在很特殊的情況下才用到,比如航空公司
網上值跡廳念機
預訂座位

『柒』 api鏈接oracle資料庫提示資料庫只讀

如果你在使用API鏈接Oracle數猛資料庫時提示資料庫只讀,可能是因為該用戶沒有對資料庫寫入許可權所致。在Oracle資料庫中,每個用戶都有不同的授權和許可權級別,只有擁有「讀寫許可權」的用戶才能進行對資料庫的修改和更新。

要解決這個問題,可以嘗試按照以下步驟操作:

1.檢查資料庫的登錄用戶是否有寫入許可權,可以通過SQL Developer等工具查詢當前用戶的許可權,或者聯系資料庫管理員(DBA)請求寫入許可權。

2.確認資料庫連接使用的用戶名和密碼是否正確,如果登錄搭知租憑據無效,可能也會導致只讀操作。

3.確保資料庫可以接受寫入請求,有時候可能需要啟用事務或者適當更改資料庫參數設置,才能最終使得API可以寫入數據。

4.驗證 API代碼是否有正確的寫入語句。如果資料庫只讀,那麼寫入函數可能會失敗,並顯示類似「只讀連接」或「連接無效」的錯誤信息。

在這個過程中,注意留意任何關鍵信息,保留相關日誌記錄以追蹤問題,以便於准確定位和解決問題知兆。

『捌』 SQL資料庫中數據類型ntext和text的區別

ntext和text一樣用來保存大量的文字數據,不過text用單位元組保存數據 ,ntext固定用雙位元組保存數據. ntext保存的是Uncode的字元 ,
ntext支持跨語言平台。

ntext:

可變長度 Unicode 數據的最大長度為 230 -
1 (1,073,741,823) 個字元。存儲大小是所輸入字元個數的兩倍(以位元組為單位)。ntext 在 SQL-92 中的同義詞是 national
text。

ntext中存數據是按雙位元組存的 ,顯示不了NTEXT你換一下recordset打開方式就行了

text:

伺服器代碼頁中的可變長度非 Unicode 數據的最大長度為 231-1 (2,147,483,647)
個字元。當伺服器代碼頁使用雙位元組字元時,存儲量仍是 2,147,483,647 位元組。存儲大小可能小於 2,147,483,647 位元組(取決於字元串)。

char、varchar、text和nchar、nvarchar、ntext的區別

1、CHAR。CHAR存儲定長數據很方便,CHAR欄位上的索引效率級高,比如定義char(10),那麼不論你存儲的數據是否達到了10個位元組,都要佔去10個位元組的空間,不足的自動用空格填充。

2、VARCHAR。存儲變長數據,但存儲效率沒有CHAR高。如果一個欄位可能的值是不固定長度的,我們只知道它不可能超過10個字元,把它定義為
VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。為什麼「+1」呢?這一個位元組用於保存實際使用了多大的長度。從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。

3、TEXT。text存儲可變長度的非Unicode數據,最大長度為2^31-1(2,147,483,647)個字元。

4、
NCHAR、NVARCHAR、NTEXT。這三種從名字上看比前面三種多了個「N」。它表示存儲的是Unicode數據類型的字元。我們知道字元中,英
文字元只需要一個位元組存儲就足夠了,但漢字眾多,需要兩個位元組存儲,英文與漢字同時存在時容易造成混亂,Unicode字元集就是為了解決字元集這種不兼
容的問題而產生的,它所有的字元都用兩個位元組表示,即英文字元也是用兩個位元組表示。nchar、nvarchar的長度是在1到4000之間。和
char、varchar比較起來,nchar、nvarchar則最多存儲4000個字元,不論是英文還是漢字;而char、varchar最多能存儲
8000個英文,4000個漢字。可以看出使用nchar、nvarchar數據類型時不用擔心輸入的字元是英文還是漢字,較為方便,但在存儲英文時數量
上有些損失。

對於什麼時候用varchar和nvarchar沒有說一定的.
也就是說一個漢字既可以存在varchar中,也可以存在nvarchar中.
那麼對於漢字或者Unicode
數據到底存在varchar和nvarchar有什麼區別呢?
下面例子說明一下:一個漢字佔varchar(2),只佔nvarchar(1),
而字母只佔varchar(1),那麼在資料庫欄位求長度的時候,用varchar你就不一定知道它確切的知道它到底有幾個字,如果用nvarchar,
那麼漢字也是nvarchar(1),字母也是nvarchar(1),那麼已經很明顯了.
區別2:varchar的檢索快於nvarchar,雖然是這樣但微軟下一個版本將統一nvarchar,聽說的

管理 ntext、text 和 image
數據

Microsoft? SQL Server? 的 ntext、text 和 image 數據類型在單個值中可以包含非常大的數據量(最大可

2 GB)。單個數據值通常比應用程序在一個步驟中能夠檢索的大;某些值可能還會大於客戶端的可用虛擬內存。因此,

在檢索這些值時,通常需要一些特殊的步驟。

如果 ntext、text 和 image 數據值不超過 Unicode
串、字元串或二進制串的長度(分別為 4,000 個字元、8,000 個字
符和 8,000 個位元組),就可以在 SELECT、UPDATE 和
INSERT 語句中引用它們,其引用方式與較小的數據類型相同。例
如,包含短值的 ntext 列可以在 SELECT 語句的選擇列表中引用,這與
nvarchar 列的引用方式相同。引用時必須遵守一
些限制,例如不能在 WHERE 子句中直接引用 ntext、text 或 image
列。這些列可以作為返回其它數據類型(例如
ISNULL、SUBSTRING 或 PATINDEX)的某個函數的參數包含在 WHERE
子句中,也可以包含在 IS NULL、IS NOT NULL 或
LIKE 表達式中。

處理較大的數據值

但是,如果 ntext、text 和 image 數據值較大,則必須逐塊處理。Transact-SQL 和資料庫 API 均包含使應用程序可以

逐塊處理 ntext、text 和 image 數據的函數。

資料庫 API 按照一種通用的模式處理長 ntext、text 和
image 列:

若要讀取一個長列,應用程序只需在選擇列表中包含 ntext、text 或 image
列,並將該列綁定到一個程序變數,該變數
應足以容納適當的數據塊。然後,應用程序就可以執行該語句,並使用 API
函數或方法將數據逐塊檢索到綁定的變數中。


若要寫入一個長列,應用程序可使用參數標記 (?) 在相應位置代替
ntext、text 或 image 列中的值,以執行 INSERT
或 UPDATE 語句。參數標記(對 ADO
而言則為參數)被綁定到一個足以容納數據塊的程序變數上。應用程序進入循環,在
循環中先將下一組數據移到綁定的變數中,然後調用 API
函數或方法寫入數據塊。這一過程將反復進行,直到整個數據值
發送完畢。
使用 text in row
在 Microsoft
SQL Server 2000 中,用戶可以在表上啟用 text in row 選項,以使該表能夠在其數據行中存儲 text、
ntext 或
image 數據。

若要啟用該選項,請執行 sp_tableoption 存儲過程,將 text in row 指定為選項名並將 on
指定為選項值。BLOB(二進
制大對象:text、ntext 或 image 數據)行中可以存儲的默認最大大小為 256 位元組,但是值的范圍可以從
24 到 7000。
若要指定默認值以外的最大大小,請指定該范圍內的整數作為選項值。

如果應用下列條件,則將
text、ntext 或 image 字元串存儲在數據行中:

啟用 text in row。



字元串的長度比 @OptionValue 所指定的限制短


數據行中有足夠的可用空間。
當 BLOB
字元串存儲在數據行中時,讀取和寫入 text、ntext 或 image 字元串可以與讀取或寫入字元串和二進制字元串
一樣快。SQL Server
不必訪問單獨的頁以讀取或寫入 BLOB 字元串。

如果 text、ntext 或 image
字元串比行中所指定的限制或可用空間大,則將指針存儲在該行中。在行中存儲 BLOB 字元
串的條件仍然適用,但是:數據行中必須有足夠的空間容納指針。


有關更多信息,請參見 sp_tableoption。

使用文本指針
如果未指定 text in
row 選項,text、ntext 或 image 字元串將存儲在數據行外;只有這些字元串的文本指針駐留在數

據行中。文本指針指向由內部指針生成的樹的根節點,而這些內部指針映射到實際存儲(text、ntext 或 image 數據的)
字元串段的頁。


SQL Server 2000 中的行文本指針與 SQL Server 早期版本中的文本指針不同。行文本指針的行為就象 BLOB
數據的文件
句柄;早期的文本指針功能則象 BLOB 數據的地址。因此,在使用行文本指針時,請記住下列特性:




重要 雖然游標中允許有行文本,但卻不允許有行文本指針。如果嘗試聲明包含行文本指針的游標,SQL Server 將返回錯

誤信息(8654、16、1、"A cursor plan could not be generated for the given statement
because it contains
textptr(inrow lob)."、1033)。

數字

對於每個資料庫,每個事務最多允許 1024 個活動行文本指針。

鎖定
當用戶獲取活動文本指針時,SQL Server
2000 在第一個用戶控制文本指針時鎖定數據行,並確保沒有其他用戶修改或刪
除該行。鎖在文本指針變為無效時被釋放。若要使文本指針無效,請使用
sp_invalidate_textptr。

當事務的隔離級別是未提交讀或者資料庫為"只讀"模式時,文本指針不能用於更新 BLOB
值。

當資料庫為"單用戶"模式時,SQL Server 2000 不鎖定數據行。


為舉例說明,給出下面的表:

CREATE TABLE t1 (c1 int, c2 text)
EXEC
sp_tableoption 't1', 'text in row', 'on'
INSERT t1 VALUES ('1', 'a')


下面的事務將會成功:

INSERT t1 VALUES ('1','This is text.')
SET
TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
GO
BEGIN TRAN

DECLARE @ptr varbinary(16)
SELECT @ptr = textptr(c2)
FROM t1

WHERE c1 = 1
READTEXT t1.c2 @ptr 0 5
COMMIT TRAN
GO


下面的事務將會失敗:

SET TRANSACTION ISOLATION LEVEL READ
UNCOMMITTED
GO
BEGIN TRAN
DECLARE @ptr varbinary(16)

SELECT @ptr = textptr(c2)
FROM t1
WHERE c1 = 1
WRITETEXT t1.c2
@ptr 'xx'
COMMIT TRAN
GO

持續時間

行文本指針僅在事務內有效。提交事務時,文本指針變為無效。

在某個事務內,當發生下列任一操作時,行文本指針可能無效:


會話結束。


刪除該事務中的數據行。(其它事務無法刪除數據行,因為該行包含鎖。)



文本指針所在的表的架構已更改。使文本指針無效的架構更改操作包括:創建或除去聚集索引,改變或除去表,截斷表,
通過
sp_tableoption 更改 text in row 選項,以及執行 sp_indexoption。
使用前面的示例,下列腳本在 SQL
Server 早期版本中有效,但在 SQL Server 2000 中將生成錯誤。

DECLARE @ptrval
varbinary(16)
PRINT 'get error here'
SELECT @ptrval =
TEXTPTR(c2)
FROM t1
WHERE c1 = 1
READTEXT t1.c2 @ptrval 0
1

在 SQL Server 2000 中,必須在事務內使用行文本指針:

BEGIN TRAN

DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(c2)
FROM
t1
WHERE c1 = 1
READTEXT t1.c2 @ptrval 0 1
COMMIT


NULL 文本
可以在由 INSERT 生成的 NULL 文本上獲得行文本指針。而在以前,只有將 BLOB 更新為 NULL
後才能獲得文本指針。

例如,下列代碼在 SQL Server 7.0 中無效,但在 SQL Server 2000
中有效。

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO

INSERT INTO t1 VALUES (4, NULL)
BEGIN TRAN
DECLARE @ptrval
VARBINARY(16)
SELECT @ptrval = TEXTPTR(c2)
FROM t1
WHERE c1 =
4
WRITETEXT t1.c2 @ptrval 'x4'
COMMIT

在 SQL Server 7.0
中,必須執行下列操作:

INSERT INTO t1 VALUES (4, NULL)
UPDATE t1

SET c2 = NULL
WHERE c1 = 4
DECLARE @ptrval VARBINARY(16)

SELECT @ptrval = TEXTPTR(c2)
FROM t1
WHERE c1 = 4
WRITETEXT
t1.c2 @ptrval 'x4'

下表匯總差別。

差別 行文本指針 非行文本指針
數字
對於每個資料庫,每個事務最多允許 1024 個活動行文本指針。 無限制。
鎖定 將數據行一直 S 鎖定到指針變為無效為止。

當事務為"未提交讀"或資料庫為"單用戶"或"只讀"模式時不獲取鎖。
不鎖定數據行。
持續時間
事務或會話結束、刪除行或更改表的架構時變為無效。 刪除行時變為無效。
NULL 文本 插入 NULL 文本後可立即獲取。 只有更新後才能獲取。



通過資料庫 API 使用 ntext、text 和 image 數據
這一部分概述資料庫 API 處理
ntext、text 和 image 數據的方式:

ADO
ADO 可以將 ntext、text 或 image
列或參數映射為 Field 或 Parameter 對象。使用 GetChunk 方法逐塊檢索數據,使
用 AppendChunk
方法逐塊寫數據。有關更多信息,請參見管理 Long 數據類型。

OLE DB
OLE DB 使用
ISequentialStream 介面支持 ntext、text 和 image 數據類型。ISequentialStream::Read
方法逐塊讀取
長數據,ISequentialStream::Write 方法將長數據逐塊寫入資料庫。有關更多信息,請參見 BLOB 和 OLE
對象。

ODBC
ODBC 具有一種稱為"執行中的數據"的功能,可用於處理長數據的 ODBC
數據類型:SQL_WLONGVARCHAR (ntext)、
SQL_LONGVARCHAR (text) 和 SQL_LONGVARBINARY
(image)。這些數據類型被綁定到某個程序變數上。這樣一來,就可以調
用 SQLGetData 逐塊檢索長數據,調用 SQLPutData
逐塊發送長數據。有關更多信息,請參見管理 text 和 image 列。

DB-Library
DB-Library
應用程序也是將 ntext、text 和 image 列綁定到程序變數上。DB-Library 函數 dbtxtptr 用於獲取指向數

據庫中長列出現位置的指針,dbreadtext 則用來逐塊讀取長數據。dbwritetext、dbupdatetext 和 dbmoretext
之類的函
數用於逐塊寫入長數據。



說明 不支持使用 DB-Library 訪問行文本

『玖』 pg資料庫只讀怎麼關掉

硬鎖定,直接將資料庫切換到恢復模式,絕對不會有寫操作出現、軟鎖定,設置default_transaction_read_only為on,默認開啟的事務為只讀事務。用戶如果使用begiontransactionreadwrite可破解。

『拾』 數據倉庫的特點

1、數據倉庫是面向主題的;操作型資料庫的數據組織面向事務處理任務,而數據倉庫中的數據是按照一定的主題域進行組織。主題是指用戶使用數據倉庫進行決策時所關心的重點方面,一個主題通常與多個操作型信息系統相關。
2、數據倉庫是集成的,數據倉庫的數據有來自於分散的操作型數據,將所需數據從原來的數據中抽取出來,進行加工與集成,統一與綜合之後才能進入數據倉庫;
數據倉庫中的數據是在對原有分散的資料庫數據抽取、清理的基礎上經過系統加工、匯總和整理得到的,必須消除源數據中的不一致性,以保證數據倉庫內的信息是關於整個企業的一致的全局信息。
數據倉庫的數據主要供企業決策分析之用,所涉及的數據操作主要是數據查詢,一旦某個數據進入數據倉庫以後,一般情況下將被長期保留,也就是數據倉庫中一般有大量的查詢操作,但修改和刪除操作很少,通常只需要定期的載入、刷新。
數據倉庫中的數據通常包含歷史信息,系統記錄了企業從過去某一時點(如開始應用數據倉庫的時點)到當前的各個階段的信息,通過這些信息,可以對企業的發展歷程和未來趨勢做出定量分析和預測。
3、數據倉庫是不可更新的,數據倉庫主要是為決策分析提供數據,所涉及的操作主要是數據的查詢;
4、數據倉庫是隨時間而變化的,傳統的關系資料庫系統比較適合處理格式化的數據,能夠較好的滿足商業商務處理的需求。穩定的數據以只讀格式保存,且不隨時間改變。
5、匯總的。操作性數據映射成決策可用的格式。
6、大容量。時間序列數據集合通常都非常大。
7、非規范化的。Dw數據可以是而且經常是冗餘的。
8、元數據。將描述數據的數據保存起來。
9、數據源。數據來自內部的和外部的非集成操作系統。
數據倉庫,是在資料庫已經大量存在的情況下,為了進一步挖掘數據資源、為了決策需要而產生的,它並不是所謂的「大型資料庫」。數據倉庫的方案建設的目的,是為前端查詢和分析作為基礎,由於有較大的冗餘,所以需要的存儲也較大。為了更好地為前端應用服務,數據倉庫往往有如下幾點特點:
1.效率足夠高。數據倉庫的分析數據一般分為日、周、月、季、年等,可以看出,日為周期的數據要求的效率最高,要求24小時甚至12小時內,客戶能看到昨天的數據分析。由於有的企業每日的數據量很大,設計不好的數據倉庫經常會出問題,延遲1-3日才能給出數據,顯然不行的。
2.數據質量。數據倉庫所提供的各種信息,肯定要准確的數據,但由於數據倉庫流程通常分為多個步驟,包括數據清洗,裝載,查詢,展現等等,復雜的架構會更多層次,那麼由於數據源有臟數據或者代碼不嚴謹,都可以導致數據失真,客戶看到錯誤的信息就可能導致分析出錯誤的決策,造成損失,而不是效益。
3.擴展性。之所以有的大型數據倉庫系統架構設計復雜,是因為考慮到了未來3-5年的擴展性,這樣的話,未來不用太快花錢去重建數據倉庫系統,就能很穩定運行。主要體現在數據建模的合理性,數據倉庫方案中多出一些中間層,使海量數據流有足夠的緩沖,不至於數據量大很多,就運行不起來了。
從上面的介紹中可以看出,數據倉庫技術可以將企業多年積累的數據喚醒,不僅為企業管理好這些海量數據,而且挖掘數據潛在的價值,從而成為通信企業運營維護系統的亮點之一。正因為如此,
廣義的說,基於數據倉庫的決策支持系統由三個部件組成:數據倉庫技術,聯機分析處理技術和數據挖掘技術,其中數據倉庫技術是系統的核心,在這個系列後面的文章里,將圍繞數據倉庫技術,介紹現代數據倉庫的主要技術和數據處理的主要步驟,討論在通信運營維護系統中如何使用這些技術為運營維護帶來幫助。
4.面向主題
操作型資料庫的數據組織面向事務處理任務,各個業務系統之間各自分離,而數據倉庫中的數據是按照一定的主題域進行組織的。主題是與傳統資料庫的面向應用相對應的,是一個抽象概念,是在較高層次上將企業信息系統中的數據綜合、歸類並進行分析利用的抽象。每一個主題對應一個宏觀的分析領域。數據倉庫排除對於決策無用的數據,提供特定主題的簡明視圖。