2008年7月24日 星期四

用系統預存程序監看伺服器狀態

以下四個系統預存程序可用來監看SQL Server的狀態 sp_who:回報目前使用SQL Server的登入帳號和程序資訊。
sp_lock:回報有關鎖定的資訊,包括物件和索引的識別碼,及鎖定的類型或資源。
sp_spaceused:顯示資料庫或資料表的磁碟空間使用資訊。
sp_mirror:顯式伺服器統計數字,包括處理器使用率,I/O使用率及系統閒置時間等。

2008年7月23日 星期三

一些常用的SQL

一些常用的SQL
新增欄位:ALTER TABLE TABLENAME ADD COLUMNNAME FLOAT(8) DEFAULT 0
刪除條件約數:alter table TABLENAME DROP constraint PK_FDRCAMD1
修改欄位型態:ALTER TABLE TABLENAME ALTER COLUMN GONO VARCHAR(24) NOT NULL
新增條件約數:alter table TABLENAME with check add constraint PK_FDRCAMD1 primary key (COL1,COL2)

SQL Server系統資料庫

以下整理SQL Server 2000系統資料庫及其資料表之功能,並列出一些配合使用的預存程序 系統資料庫
master:紀錄有關SQL Server的資訊,如登入帳戶、系統組態、個資料的初始資訊。
sysdatabases:資料庫名稱、建立日期、主資料檔的路徑。
sysmessages:紀錄所有錯誤訊息。

msdb:提供SQL Server Agent做各類排程作業所用的資料庫。
syscolumns:紀錄有關藍位各項資訊。
syscomments:紀錄資料庫中所有檢視表、觸發程序、預存程序和規則等物件的資訊。
syscontraints:紀錄聊件約束與欄位的對應關係。
sysforeignkeys:紀錄資料表中所設定FOREIGN KEY資訊。
sysindexes:紀錄資料表索引資訊及各資料表相關資訊,如第一頁位置、總頁數、紀錄筆數等多項資訊。
sysobjects:紀錄資料庫所有物件資訊。
syspermissions:存取權限資訊。
sysprotects:紀錄已GRAN及DENY敘述所設定的存取權限資訊。


model:樣板資料庫。

常用預存程序
sp_depends 檢視預存程序、檢視表、觸發程序與其來源物件之間之關係
sp_help 檢視資料庫中之物件資訊
檢視組態設定=>master 資料庫:select * from sysconfigures
sp_helplogins:查看帳戶資訊。sp_helplogins '帳戶名稱'
sp_helpuser:顯示使用者資訊。sp_helpuser '使用者名稱'
sp_helprole/sp_helprolemember:查詢角色資訊。

2008年7月22日 星期二

使用 Net Use 命令與磁碟機連線或中斷連線

當我們需要經常使用網路磁碟機,每次用精靈選擇是滿麻煩低。
可用 net use 指令寫成批次檔,一指搞定。如果要使用 net use 命令和磁碟機連線或中斷連線
• 如果要與網路磁碟機連線:

net use x:\\computer name\share name,其中 x:是指您想要指派為共用資源的磁碟機代號。
以下可加入登入身分
net use x:\\computer name\share name password /user:UserName /persistent:{yes no}
PERSISTENT 控制對永久網絡連接的使用。

• 如果要與連線的磁碟機中斷連線:

net use x:/delete,其中 x:是指共用資源的磁碟機代號。
或NET USE /DELETE x: 也可

• 衍伸應用:

subst /a i:
SUBST 則是將 A 目錄設為新的磁碟機代號 i: (也不改變原來位置)
配合uet use 指令可以將網路上其他電腦分享的目錄設定成本機磁碟機
net use \\computer name /Delete 強制登出

2008年7月13日 星期日

Oracle UNION / UNION ALL / INTERSECT / MINUS 之差異

剛剛閒晃看到的
先貼起來 有空再翻中文...
Oracle UNION, INTERSECT, MINUS OPERATORS AND SORTING QUERY RESULT

You can combine multiple queries using the set operators UNION, UNION ALL, INTERSECT, and MINUS. All set operators have equal precedence. If a SQL statement contains multiple set operators, Oracle evaluates them from the left to right if no parentheses explicitly specify another order.

UNION Example
The following statement combines the results with the UNION operator, which eliminates duplicate selected rows. This statement shows that you must match datatype (using the TO_CHAR function) when columns do not exist in one or the other table:

select empno, ename, sal, to_char(null) as “Transfer Date” from emp
UNION
select empno,ename,to_char(null) as “Sal”,tdate from oldemp;

EMPNO ENAME SAL Transfer Date

----- ----- ------ -------------

101 Sami 5000

102 Smith 11-jul-2000

201 Tamim 10-AUG-2000

209 Ravi 2400

UNION ALL Example
The UNION operator returns only distinct rows that appear in either result, while the UNION ALL operator returns all rows. The UNION ALL operator does not eliminate duplicate selected rows:

select empno,ename from emp
union all
select empno,ename from oldemp;

INTERSECT Example
The following statement combines the results with the INTERSECT operator, which returns only those rows returned by both queries:

SELECT empno FROM emp
INTERSECT
SELECT empno FROM oldemp;

MINUS Example
The following statement combines results with the MINUS operator, which returns only rows returned by the first query but not by the second:

SELECT empno FROM emp
MINUS
SELECT empno FROM oldemp;

參考網站:
Oracle 10g Database Administration

2008年7月10日 星期四

摘錄

【調整落差】
在學校裡,自己的成績好也只是與同班同學相比。出了社會,自己的工作的成績是與不同年紀不同背景的人比。一下子會有很多的落差。
你可能說,人生不是比來比去的,但是我要跟你說,你可以不比,不過你要知道你要什麼。
但找到一群可以幫助你成長的好朋友和聰明的競爭者,你就贏了別人好幾步。


【工作態度】
每天上班最好有正面的心情。用快樂的心情面對每個人,你會有很多朋友,老闆也會想教你東西,樂於與你溝通。
如果與老闆溝通無法溝通,你覺得你會有加薪機會嗎﹖就算你不缺那份薪水,你也得不到新增的工作機會來幫助你日後的發展。


【靜靜的吃三碗飯】
絕對沒錯,不要一出社會,就一天到晚與人計較或說誰誰沒做他的工作。真正的贏家是不出聲的。



【把掌聲留給別人】
把掌聲留給別人,投資在別人的身上。把掌聲留給自己,你的荷包不會變多一點,但你的朋友會少一個。
而把掌聲留給自己的伙伴,你會多一個朋友,你的荷包不會變少一點。


【薪水】
薪水與能力是相關的,但無絕對。我有一個女生朋友,碩士畢業領著3萬二的薪水,10年後,增加不到25%,
最後她的工作是被另一個剛碩士畢業的女生換掉。

她的問題很簡單,畢業後就停止進修,她的履歷表多了很多年資,但並沒有很多經驗。
聰明的你,一定要好好的做一張履歷表,而且你一定要知道那張履歷表值多少錢,至少遇到結婚或喪事,別人才知道要說什麼嘛。
很多東西不能規劃,但是履歷表要好好的規劃。


【跟對人】
雖然【跟對人】很重要,但我要跟你說如果沒跟對人,也要在他身上擠出東西來學。
我以前有一個老闆,日本作風,不但吹毛求疵,還蔽護他自己的人。
前 一兩 年,我好氣他喔。但是我發現,雖然他不是我的貴人,可是我在他身上學到他的紮實和徹底執行的工作能力,
還有那種裁培比你笨的人的無奈與必要性。對那老闆而言,因為我很年輕還有很多機會。

但是有些人沒被裁培,他們一輩子都起不來,他們將來都會面臨被裁員的可能,所以他沒有錯。
有時候,看事情要往大方向看。

【讀書】
讀書是增加知識,但也不要太相信書裡面的人。有些人讀了太多書,結果被一群死人洗了腦。
但是不能不讀書,因為這社會,有時候很複雜,你會需要些書當精神食糧。
至於那些窮爸爸富爸爸爛書,留給做夢的人看吧。

每個人在不同職場都有他的社會功能。
百分之90的人賺的都是計算式的財富Calculated
Wealth(相信我,英文跟電腦一樣,都只是溝通的工具)。

計算式的財富就是你今年賺24萬,明年你的目標應該是多少,前題是不亂換工作,而且你與你的上司/工作夥伴工作愉快。


【婚姻】
感情沒有絕對,不如意時,至少謝謝他/她陪你走過去的春夏秋冬。
但女人不能沒錢,婚姻或感情出了問題,還可以出門當個敗家女,
但沒錢如果感情出了問題,只能在家看韓劇哭死你。


【金錢觀】
金錢是重要工具,但不是全部。你要知道你錢花去那,要會管理你支那表。
一定要有投資觀念,投資不一定是股票那些,而是如投資外文能力,電腦能力,
投資自己的presentation skills,或溝通能力。

【人格】
人格比薪水或什麼都還重要。
成功的人大部份都具有好的人格特質。我看過很多年薪好幾百萬和千萬的人,
雖然不是每個人都是白手起家,但是只有好的人格特質才會在業界長長久久。

2008年7月3日 星期四

使用程式進行資料庫備份/還原

如果需要經常備份資料庫,雖然有輔助工具可以用,但是經常點下一步且須設定備份的參數,
也是很累人的,如果可以將備份寫成程式,直接執行,那就更方便了
以下介紹資料庫備份跟還原的做法,此指令只適合SQL SERVER
若有需要ORACLE之備份語法,請留下意見,我會在去研究然後PO上來

以下指令以SQL方式直接下即可:

--備份資料庫
BACKUP DATABASE TestDB
TO DISK = 'c:\TestDB.bak'
WITH FORMAT

--還原資料庫
--讀取備份檔之資訊
RESTORE FILELISTONLY/HEADERONLY/LABELONLY
FROM DISK = 'c:\TestDB.bak'
--step1.先切換獨佔模式
ALTER DATABASE TestDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
--step2.進行資料庫還原
RESTORE DATABASE DATABASENAME
FROM DISK = 'c:\IPOS.bak'
WITH REPLACE,
MOVE 'IPOS_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\IPOS.mdf',
MOVE 'IPOS_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\IPOS.ldf'
REPLACE:指定還原時強制蓋過現有的資料庫檔。
--修改資料檔或記錄檔的邏輯名稱
ALTER DATABASE MODIFY FILE (NAME = NEWNAME = )

注意事項:
1.還原前須確認該資料庫無人使用,否則還原失敗
2.執行此SQL之Connection不可使用欲還原之database登錄(連接之資料庫不可為預還原之資料庫)
3.備份執行程式須在DB執行
4.還原時須從原本備份出之路徑進行還原(即備份後之檔案不可任意移動其資料夾)
5.與還原資料庫相關之所有Application與全部關閉

由SQL取出名次排序之下法

如果SQL想在取出之資料前面多一欗顯示名次,該怎們下SQL呢?
雖然也可以在報表時用變數處理
但,SQL下的好,程式寫得少
以下提供SQL下法範例:


SELECT
(SELECT COUNT(GONO1) FROM FDRCALSI S1 LEFT JOIN FDRCALDI D1 ON S1.SHNO = D1.SHNO
WHERE (D1.SHNO + D1.GONO) <= (D.SHNO + D.GONO)
AND S1.EMPNO IS NOT NULL) AS ORDERS
, S.EMPNO,S.SDATE,S.SHNO,D.SPNO,D.GONO1,D.GONO2
,D.GONO3,D.RAMT,D.SAMT
FROM FDRCALSI S
LEFT JOIN FDRCALDI D ON S.SHNO=D.SHNO
WHERE S.EMPNO IS NOT NULL
ORDER BY D.SHNO, D.GONO

主要關鍵是在:WHERE (D1.SHNO + D1.GONO) <= (D.SHNO + D.GONO)這一個地方
利用巢狀查詢Count筆數,Count的基準是D1<=D的筆數而在Count時利用唯一值(D1.SHNO + D1.GONO)去比對,還有唯一值須與ORDER有關聯,也就是說須依唯一值進行排序,否則,排出來之序號不會由小而大排序,
也因此最後須ORDER BY D.SHNO, D.GONO