| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 | |||
8 | 9 | 10 | 11 | 12 | 13 | 14 | |||
15 | 16 | 17 | 18 | 19 | 20 | 21 | |||
22 | 23 | 24 | 25 | 26 | 27 | 28 | |||
29 | 30 | 1 | 2 | 3 | 4 | 5 |
轉自:http://cupoy.javaeye.com/blog/251796
1. 臟讀 :臟讀就是指當一個事務正在訪問數據,并且對數據進行了修改,而這種修改還沒有提交到數據庫中,這時,另外一個事務也訪問這個數據,然后使用了這個數據。
2. 不可重復讀 :是指在一個事務內,多次讀同一數據。在這個事務還沒有結束時,另外一個事務也訪問該同一數據。那么,在第一個事務中的兩次讀數據之間,由于第二個事務的修改,那么第一個事務兩次讀到的的數據可能是不一樣的。這樣就發生了在一個事務內兩次讀到的數據是不一樣的,因此稱為是不可重復讀。例如,一個編輯人員兩次讀取同一文檔,但在兩次讀取之間,作者重寫了該文檔。當編輯人員第二次讀取文檔時,文檔已更改。原始讀取不可重復。如果只有在作者全部完成編寫后編輯人員才可以讀取文檔,則可以避免該問題。
3. 幻讀 : 是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,這種修改涉及到表中的全部數據行。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那么,以后就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,就好象發生了幻覺一樣。例如,一個編輯人員更改作者提交的文檔,但當生產部門將其更改內容合并到該文檔的主復本時,發現作者已將未編輯的新材料添加到該文檔中。如果在編輯人員和生產部門完成對原始文檔的處理之前,任何人都不能將新材料添加到文檔中,則可以避免該問題。
補充 : 基于元數據的 Spring 聲明性事務 :
Isolation 屬性一共支持五種事務設置,具體介紹如下:
l DEFAULT 使用數據庫設置的隔離級別 ( 默認 ) ,由 DBA 默認的設置來決定隔離級別 .
l READ_UNCOMMITTED 會出現臟讀、不可重復讀、幻讀 ( 隔離級別最低,并發性能高 )
l READ_COMMITTED 會出現不可重復讀、幻讀問題(鎖定正在讀取的行)
l REPEATABLE_READ 會出幻讀(鎖定所讀取的所有行)
l SERIALIZABLE 保證所有的情況不會發生(鎖表)
不可重復讀的重點是修改 :
同樣的條件 , 你讀取過的數據 , 再次讀取出來發現值不一樣了
幻讀的重點在于新增或者刪除
同樣的條件 , 第 1 次和第 2 次讀出來的記錄數不一樣
編譯 Trigger 出錯,錯誤的原因是找不到sequence,但是在 sql 里面使用這個sequence非常正常。找了半天原因,另一個同事試了一下給這個sequence授權,就可以編譯通過了。
疑惑了很久,為什么sql中可以用,編譯trigger就不能用了呢。
查了一些資料,才明白。
是因為 Oracle 在編譯Procedu的時候,只檢查當前用戶的權限,而不管角色。所以,即使這個用戶是DBA,也沒有用,必須要對這個用戶授權。這就是顯式授權。
我在CSDN上找到了一個很好的文章,解釋了顯式授權和隱式授權的區別。
附在下面。
來自CSDN博客,http://blog.csdn.net/pashine/archive/2009/12/21/5050060.aspx
oracle 對象的授權
Oracle授權
一、授權語法
GRANT 語法:
1.顯式授權(直接將對象授權給用戶)
GRANT privilege [, ...] ON object [, ...] TO { Public| Group | Username|role} [WITH GRANT OPTION ]
2.隱式授權(通過將角色授權給用戶)
GRANT role TO { Public| Group | Username|role}
語法說明:
privilege (權限)
可能的權限有:
SELECT--訪問聲明的表/視圖的所有列/字段.
INSERT--向聲明的表中插入所有列字段.
UPDATE--更新聲明的所有列/字段.
DELETE --從聲明的表中刪除所有行.
RULE 在表/視圖上定義規則 (參見 CREATE RULE 語句).
ALL 賦予所有權限.
object 賦予權限的對象名.
可能的對象是:
table (表)
view (視圖)
sequence (序列)
index (索引)
Public 代表是所有用戶的簡寫.
Group 將要賦予權限的組GROUP .目前的版本中,組必須是用下面方法顯式創建的.
Username 將要賦予權限的用戶名.PUBLIC 是代表所有用戶的簡寫.
role 某個角色,(如DBA)
WITH GRANT OPTION 允許向別人賦予同樣權限,被授權的用戶可以繼續授權.
描述
對象創建后,除了創建者外,除非創建者賦予(GRANT)權限,其他人沒有訪問對象的權限。
GRANT 允許對象的創建者給某用戶或某組或所有用戶(PUBLIC)某些特定的權限。不需要給創建者賦予(GRANT)對象的權限,創建者自動擁有對象的所有權限,包括刪除它的權限。
說明
Oracle不允許在過程中使用未經顯式授權的對象. 要使用另一用戶的對象,必須通過另一用戶給自己顯示授權。
因為Oracle在編譯存儲過程時并不檢查定義者擁有的角色,只是檢查其被顯式授予的權限,而DBA也是一種角色,所以即使是DBA,也需要顯式授權。
二、授權方式 (顯式和隱式)
對象授權有兩種模式,顯式和隱式:
顯示授權和隱式授權的區別是:顯示授權是直接把對象授權給用戶,隱式授權是給用戶授予角色的方式來實現授權。
1. 顯式授權是直接用GRANT語句進行授權。
語法:GRANT 某種權限 TO 用戶
如:
CONN USER1/Password
GRANT SELECT ON TABLE1 TO USER2; --- 將user1的表TABLE1的select 權限顯示授權給user2
GRANT UPDATE ON TABLE1 TO USER2; --- 將user1的表TABLE1的update權限顯示授權給user2
注:用system/manager登錄是沒法授權的,要使USER2用戶能在存儲過程里面訪問USER1用戶的表,必須以USER1用戶(該用戶有dba權限)登錄,然后授權就可以了。
SQL>grant select on USER1.MA_USERINFO to USER2
2.隱式授權則是通過ROLE來授權。
語法:GRANT 某個角色 TO 用戶
如:
CONN USER1
GRANT SELECT ON TABLE1 TO ROLE1; --- 將USER1的表TABLE1的select權限顯示授權給Role1
CONN SYSTEM
GRANT ROLE1 TO USER2; --- 給USER2授與Role1的權限。
三、收回權限
語法:
revoke 權限 from 用戶;
例子:
revoke select on table1 from User1; 收回查詢select表的權限;
revoke all on table1 from User1;
grant connect to xujin;
revoke connect from xujin
revoke ROLE1 from USER2;
End
command + L : safari 在地址欄輸入網址
command + option + L : safari 顯示下載列表
command + shift + [ : safari 選擇上一個標簽
command + shift + ] : safari 選擇下一個標簽
command + enter : safari 在新的 tab 頁中打開網頁,也可以 command + 點擊鏈接
fn + delete : 刪除光標后面的字母,相當于 windows 下面的 delete
control + a : 相當于 windows 下的 home
control + e : 相當于 windows 下的 end
command + option + f : safari 中的 google search
command + option + ctrl + ? : 關機
command + option + 拖拽 : 建立快捷方式
option + 點擊已經最小化窗口 : 還原全部最小化窗口
1. 準備mysql,參考jira 4.0.1 war 方式的安裝過程,使用mysql第1步,將數據庫名由jiradb修改為confluence接著上一個的jira 4.0.1 war 方式的安裝過程,使用mysql,把jira的login加上crowd,為之后增加confluence和svn的sso做準備
第一步先把jira的認證改成使用crowd,接著上次安裝完jira的tomcat,繼續安裝
1. 準備mysql
a)創建一個庫create database crowd character set utf8;
b)在my.ini中增加一行
[mysqld]
transaction-isolation = READ-COMMITTED
2. 準備tomcat
a)修改$catalina_home\conf\server.xml,增加useBodyEncodingForURI="true",如下:
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"/>
b)下載javamail api,放到$catalina_home\lib目錄下
3. 準備crowd
a)下載atlassian-crowd-2.0.3-war.zip,并解壓到$crowd_home
b)修改$crowd_home\WEB-INF\classes\crowd-init.properties,增加配置crowd.home=$crowd_home($crowd_home替換成實際目錄)
c)創建crowd.xml,內容為<Context path="/crowd" docBase="$crowd_home" reloadable="false"/>($crowd_home替換成實際目錄),將這個文件放到$catalina_home\conf\Catalina\localhost目錄下
d)啟動tomcat,進入crowd,如:http://localhost:8080/crowd
e)到applications中add application,類型選jira,name: jira, password: haha, url: http://localhost:8080/jira, ip最好手工填, directories選一個需要的,Allow all users to authenticate我選上了,成功
f)import jira users在users里面選import users,import 的時候注意把dbname修改為jiradb就可以了。
4. 準備jira
a)修改$jira_home\WEB-INF\classes\crowd.properties,如
application.name jira
application.password haha
application.login.url http://hostname/jira/
crowd.server.url http://hostname/crowd/services/
...
其它的不需要修改
b)修改$jira_home\WEB-INF\classes\osuser.xml,內容如下:
c)修改$jira_home\WEB-INF\classes\seraph-config.xml,內容如下:
d)重啟tomcat
一切搞定,可以使用crowd的用戶登錄jira了,而且只要在一邊登錄,兩邊就都登錄了。
另外把遇到的問題寫一下
1. 在crowd中import jira users的時候,將connection url改正確了之后,就是把dbname改成jiradb,依然無法連接,后來發現是crowd沒有mysql jdbc驅動,停掉crowd,將mysql jdbc驅動放到crowd WEB-INF\lib目錄,重試就可以了。
2. 所有的都配置好了之后,到jira里面仍然無法登錄,通過查看crowd log,發現有這句話[crowd.service.soap.SOAPService] Client host is invalid: 10.40.155.43 / 10.40.155.43,明白了,因為在crowd里面add application的時候,使用的是自動得到IP,得到的是127.0.0.1。解決這個問題的辦法就是在IP里面,把這個10.40.155.43也加上,就可以了。
安裝方式力求簡單,更多優化配置需要進一步配置。
1. 準備mysql
a)下載mysql-noinstall-5.1.42-win32.zip,解壓到$mysql_home
b)到$mysql_home目錄下,將my-medium.ini修改為my.ini
c)到$mysql_home\bin目錄下,運行mysqld --console
d)到$mysql_home\bin目錄下,執行mysql -uroot,然后執行sql:
create database jiradb character set utf8;
e)下載mysql-connector-java-5.1.11.zip,備用
2. 準備tomcat
a)下載apache-tomcat-6.0.20.zip,解壓到$catalina_home
b)下載jira-jars-tomcat6.zip,解壓到$catalina_home\lib目錄下
c)把之前下載的mysql-connector-java-5.1.11.zip,解壓里面的mysql-connector-java-5.1.11-bin.jar到$catalina_home\lib目錄下
d)修改$catalina_home\conf\server.xml文件,將里面的
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改為
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
e)修改$catalina_home\bin\startup.bat,在@echo off后面增加一行
set CATALINA_OPTS=%CATALINA_OPTS% -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dmail.mime.decodeparameters=true -Xms128m -Xmx512m -XX:MaxPermSize=256m
f)啟動一次,然后停止,為了在$catalina_home\conf目錄下生成Catalina\localhost目錄
增加 weiphone 的源
http://app.weiphone.com/cydia/dists/stable/main/binary-iphoneos-arm/Packages
照別的源弄的,可以使用。
加了 ipa 破解和wefit
但 repo.beyouriphone.com 的源不怎么怎么加。
開始使用 jira 4 + greenhopper 4,為了兩個原因:
1. 簡單:方便的創建問題,方便的更新狀態(可視化拖拽)
2. 清晰:圖表燃盡圖顯示項目狀態,任務視圖直觀查看所有任務狀態
一直希望項目組所有人都能夠清楚的了解項目的狀態。而我也能夠跟蹤項目中問題的狀態,但實際情況確不像想象的那么容易。
之前一直使用 jira 來做項目問題管理,包括任務的管理。但發現實際上想要了解項目狀態的時候,卻比較困難。其實我發現最好工具的是紙、筆和白板,但辦公室沒有這個條件。
看不到項目狀態有以下幾個原因:
1. 項目風格比較寬松。愿意把任務記在上面就記,不愿意記就不記。我想起任務的時候,就會把任務記上,分配給相應的人。但不是每個人都習慣這樣做。jira上沒有所有的任務,自然無法看到狀態。
2. 任務狀態不及時更新。主要是懶得更新狀態,嫌麻煩。其實和第一個原因比較接近。我一般不喜歡強制讓別人做什么,只是想自己做自己喜歡的事情,愿意的事情就好了。雖然我認為 jira 用起來已經相當簡單了,但仍然有人認為麻煩,所以,基本就不更新狀態,或是記東西什么的。
3. 沒有時間估計。這個是項目管理上的問題,我的本意是希望簡單,自然,不要給同事們帶來麻煩。但發現不估計時間簡直就等于自殺,完全看不到項目的狀態。
ps:其實評估任務的重要性相當的必要,但上面的問題主要是基于已經確定當前版本范圍的情況。所以,也就不用太在意哪個更重要了。
第3個問題沒有別的辦法,只能進行時間估計。我采用大家一起來估計的方法,我充當產品負責人的角色給大家講解需求,然后讓每個人進行估計,因為目前的項目復雜度不高,所以估計工作量并不難。
我覺得大家一起來估計工作量有兩個好處:一、大家有參與感,積極性相對會好一些。二、所有人了解所有的需求,以后有問題也好互相幫助。
前兩個問題我希望能通過工具的簡單程度解決問題,如果做起來很容易,就會自然去做,而不會覺得麻煩了。
我發現 jira 4 + greenhopper 4 可以方便的創建和修改任務,而且可視化拖拽。這樣就能大幅度解決問題,而且燃盡圖和任務視圖,可以非常直觀的給出項目狀態,大幅度提高所有人對項目進度的認知。
周末隨手破解了一下,暫時先用一用,解壓到相應的目錄下即可。
jira_crack.rar
換了之后,使用明文注冊即可,注冊信息可以隨便修改,如下:
JIRA 的:
#Sun Oct 25 00:50:34 CDT 2009
Description=JIRA\: COMMERCIAL
CreationDate=2009-10-25
ContactName=haha@haha.haha
jira.LicenseEdition=ENTERPRISE
ContactEMail=haha@haha.haha
Evaluation=false
jira.LicenseTypeName=COMMERCIAL
jira.active=true
licenseVersion=2
MaintenanceExpiryDate=2010-10-24
Organisation=haha
jira.NumberOfUsers=-1
ServerID=B6FW-B4KW-J1A3-4DQB
LicenseID=LID
LicenseExpiryDate=2010-10-24
PurchaseDate=2009-10-25
GreenHopper 的:
#Sat Oct 24 19:09:35 CDT 2009
Description=GreenHopper for JIRA 4\: COMMERCIAL
CreationDate=2009-10-25
ContactName=haha@haha.haha
greenhopper.NumberOfUsers=-1
greenhopper.LicenseTypeName=COMMERCIAL
ContactEMail=haha@haha.haha
Evaluation=false
greenhopper.LicenseEdition=ENTERPRISE
licenseVersion=2
MaintenanceExpiryDate=2010-10-24
Organisation=haha
greenhopper.active=true
LicenseID=LID
LicenseExpiryDate=2010-10-24
PurchaseDate=2009-10-25
ps:本來想寫個注冊機,但 jira 從 4.0 開始更新了注冊的公鑰存放位置,原來是文件的,一般叫 leaf.key,現在直接寫在程序里了,沒辦法,只能替換 class,這樣寫注冊機就沒什么意義了,所以就硬破解了一下。