30 mẹo khi học TA

September 25, 2010

Nguồn: http://songtra.wordpress.com/2010/09/19/m%E1%BA%B9o-v%E1%BA%B7t-h%E1%BB%8Dc-ti%E1%BA%BFng-anh/

Mẹo vặt học tiếng Anh

Posted on 19.09.2010 by songtra

Tiếng Anh (TA) của tôi cũng tạm thôi, nhưng tôi muốn chia xẽ cùng các bạn một số kinh nghiệm học TA của tôi. Bài viết dài, mọi điểm được nêu không theo một thứ tự ưu tiên nào cả. Hy vọng nó sẽ hửu ích đối với các bạn còn đang gặp khó khăn nói TA.

Mẹo vặt học nói tiếng Anh – Helpful tricks for learning English:

1. Học tiếng Anh đòi hỏi thời gian, kiên nhẫn và miệt mài. Bạn thử nghĩ xem, các em bé người Anh, Mỹ phải mất 10 năm mới có thể nắm bắt và đối đáp lưu loát được khoảng 1,000 từ. Ở mẫu giáo và bậc tiểu học, cha mẹ, thầy cô giáo phải sửa tới sửa lui nhiều lần để các em dần dần phát âm đúng. Các em còn được thường xuyên sửa nguyên câu nói cho hay hơn. Vì vậy, đừng vội nản chí, đừng đòi hỏi phải có kết quả ngay lặp tức.

2. Khi nói tiếng Việt, miệng, môi và lưởi của bạn ít xê dịch, nhưng tiếng Anh thì khác. Khi nói chuyện với người yếu TA, người Tây thường nhìn miệng để đoán chữ. Vì vậy bạn hãy thực tập mở miệng lớn hơn như cười thật tươi, như cười mỉm, hay như chúm môi “hôn”. Đồng thời lưởi của bạn cũng moving giữa các vị trí chiến lược như sau: sau hàm răng trên, sau hàm răng dưới, giữa hai hàm răng, phía trên giữa miệng, gần cổ họng. Có vài chữ đòi hỏi môi phải khép lại trước hoặc sau khi phát âm. Nói chung, moving miệng, lưởi, môi phù hợp giúp chúng ta phát âm đúng, rõ hơn và người Tây dễ hiểu chữ ta muốn nói. Mới đầu, bạn sẽ bị mỏi miệng, luởi, nhưng sẽ hết và move nhanh dần.

3. Muốn nói TA ít nặng giọng, bạn nên tập phát âm từng âm một được phiên âm trong tự điển – Bạn đọc nhanh, nhưng không bỏ xót một âm nào của chữ đó.

Ví dụ:
-Chữ best có phiên âm là “bést”. Tất cả gồm 3 âm: bé (thêm dấu sắc vì âm nhấn), s và t.
-Chữ next có phiên âm là “nékst”. Tất cả gồm 4 âm: né, k, s, t.
-Chữ nest có phiên âm là ” nést”. Tất cả gốm 3 âm: né, s, t.

Hai từ trên đọc khác nhau bởi chữ “k”. Bạn không phát âm k thành tiếng, nhưng phải ngừng lài 1/30 giây (rất chớp nhoáng) để nhận diện sự có mặt của nó, trước khi tiếp tục đọc s và t. S được đọc lướt qua thật nhanh (1/40 giây) để nối vào âm t. Vì vậy, đọc nest nhanh và smooth hơn next.

4. Biết một từ nào đó, nhưng không biết cách phát âm đúng, thì bạn sẽ gặp khó khăn để nhận ra chữ đó, khi nghe người ta nói. Vì trong quá trình tập đọc, bạn đã vô tình tập cho tai của bạn cách nhận ra chữ đó. Nếu bạn tập đọc sai thì đương nhiên, khi nghe TA tai bạn cũng tự động expect nghe được những âm đã được program sai – Cái sai này dẫn đến cái sai khác. Nói chung, bạn nên điều chỉnh lại cách đọc của bạn ngay từ bây giờ, vì để càng lâu thì nó càng rắc rối và càng cản trở bước tiến của bạn.

5. Những từ có 2 âm trở lên, bạn phải biết âm nào là âm nhấn. Phát âm đúng và mạnh âm nhấn. Còn âm phụ, nếu bạn đọc nhỏ hay đọc không chính xác, người nghe vẫn dễ dàng đoán hiểu được.

Ví dụ:
Position. bạn có thể đọc po,pô, pơ, nhưng âm nhấn zí, lúc nào cũng giống nhau.

Còn positive bạn phải đọc đúng âm đầu pó, âm sau là âm phụ nên tùy người đọc zi hay zơ đều đúng. Dĩ nhiên là âm nào cũng phải nên đọc đúng, nhưng âm chính là ưu tiên hàng đầu. Không nhớ âm chính, có thể dẫn tới việc hiểu sai ý nghĩa của chữ muốn nói.

Ví dụ:
Polish và police, dessert và desert.

6. Học chữ nào nên học luôn cả câu, để khi cần là nói ra ngay chứ không phải tốn thì giờ lắp ghép – chắc chắn bạn đở bị cà lăm và có phản ứng nhanh nhẹn hơn. Việc này cũng giúp cho bạn không cần tập trung moi óc “vất vả làm bài vào phút chót”, mà bạn có thể relax, tập trung lắng nghe người ta nói và focus hơn vào cuộc đàm thoại.

7. Lắp ráp, sử dụng 1 chữ vừa biết với chủ từ, túc từ, động từ, giới từ, tỉnh từ, trạng từ khác nhau trong 1 câu (xác định, phủ định và câu hỏi) – Nghĩa là biết một chữ nhưng có thể sử dụng 5-10 câu.

8. Nếu bạn học đúng phương pháp và có căn bản vững chắc, thì bạn có thể bắt đầu nói TA lưu loát khi có 1,000 từ. Quan trọng là bạn phải ưu tiên học những từ popular và có khả năng sử dụng tốt các câu lắp ráp sẳn mà bạn đã thuộc. Tự đặt mình vào vai của em bé 10 tuổi thì bạn mới hiểu được hết ý tôi nói.

9. Lưu ý là c, g, t có 2 cách phát âm: hard và soft.

Ví dụ:
Phát âm “c” cho car, corn, curl, common, vv.
Phát âm “s” cho cent, city, cylinder. Ghi chú: Phát âm soft c cho c có e, i , y đi kèm..

“g” cho gìft, gun, girl, go, vv.
“dz” cho genius, ginger, gypsy, page, vv. Ghi chú: Phát âm soft g cho g có e, i , y đi kèm.

Hard t phát âm như “th” của tiếng Việt, khi nào t là chữ cái đầu tiên của một từ: Taxi, ten, turn, etc.
Soft t phát âm giống như t của tiếng Việt, dành cho mọi trường hợp khác: artist, captain, enter, etc.

.

—–+—–+—–

.

10. Ngày nay học TA bạn có tự điển online: http://www.thefreedictionary.com/. Hãy bỏ chữ vào để nghe cách phát âm của người Mỹ, Anh. Bạn nên chọn 1 trong 2, Mỹ hay Anh, tuỳ sỡ thích. Chọn Vietnamese cho phần translation. Bạn có thể vào phần spelling bee để luyện nghe.

11. Phát âm lại tất cả các mẫu tự a,b,c,…z. để xem bạn phát âm có thật sự đúng không. Sau abcd… thì tới phiên ngày tháng, sáng chiều, đẹp xấu, to lớn, buồn vui, vv. Nên dò xét lại có chữ nào, âm nào trong tiếng Anh mà bạn chưa thể phát âm chính xác hay khi nói thì người nước ngoài phải hỏi tới hỏi lui. Nhiều khi Tây hiểu ý hay kể cả, nhận ra cái từ mà bạn vừa sử dụng cũng chưa nói lên được bạn phát âm hoàn toàn đúng. Hãy tra từ điển online.

12. Đa số những chữ có 2 âm, dùng cả cho danh và động từ, thì nhấn âm đầu cho danh từ, âm sau cho động từ.

Ví dụ:
Recall, exploit, increase, vv.

13. Lúc đầu chỉ học nói những từ sơ đẵng giống như trẻ em. Tùy trình độ phát âm của bạn mà tăng dần lên từ khó hơn. Bạn nên nhớ là khi mà người Tây nghe bạn nói quá chậm chạp, cấu kết câu nói chưa đúng và phát âm khó nghe thì tự động họ cho rằng trình độ TA của bạn còn yếu. Họ sẽ dùng từ dễ hiểu nhất để nói với bạn, đồng thời tai của họ expect từ bạn những chữ dễ tương tự. Vì vậy, phải ráng học phát âm đúng, còn nếu không, nhiều khi bạn cứ lòng vòng, lập đi lập lại những từ ngữ sơ đẵng, dễ đọc, dễ hiểu – sau một lúc có thể bạn nản chí vì không thấy tiến.

14. Từ có 3 âm trở lên có thể có 2 âm nhấn: một chính, một phụ. Tuy nhiên, 2 âm nhấn không bao giờ liên tiếp nhau.

Ví dụ:
Fascinate. Âm đầu chính và âm cuối phụ.

15. Những chữ tận cũng bằng “ate” thì âm nhấn hầu như lúc nào cũng nằm cách “ate” một âm.

Ví dụ:
COMplicate, maNIpulate, FAbricate, afFECtionate.

16. Đối với một số người trên thế giới, TA là dễ, nhưng đối với người Việt hay ĐNA, Đông Á thì quá khó. Một điều khích lệ là: Giả sử trình độ TA của bạn chỉ bằng một em bé 10 tuổi thì bạn vẫn được lắng nghe một cách respectfully. Người nước ngoài rất kiên nhẫn với những người yếu TA như tôi và bạn. Giả sử vào các diễn đàn TA viết văn như học sinh lớp 8, 10, bạn sẽ thấy người Tây thường chỉ để ý đến chất lượng ý kiến của bạn.

17. Âm “less” và “ness” nằm cuối một từ không bao giờ là âm nhấn, bởi vì less và ness là những chữ được ghép vào nhằm hổ trợ ý nghĩa cho từ chính. Do đó, “less” và “ness” phải được đọc bằng âm dấu nặng chứ không phải dấu sắc.

Ví dụ:
Business, happiness, sadness, vv.

18. Đừng quên đọc những âm ở đuôi, chẵng hạn như t, d sh, g, ve, f, c, z, l, ed, st, xt, ted, ches, ess, ive, etc. Không đọc âm đuôi của một chữ, tức chưa đọc xong chữ đó. Đọc không đúng âm đuôi có thể làm cho người nghe hiểu sai ý bạn muốn nói. Thật ra âm đuôi quang trọng không kém những âm khác.

19. Nhiều người không nhận ra có âm “l” trong TIẾNG MỸ. Âm l rất quan trọng khi nằm ở cuối chữ.

Ví dụ:
Real, pull, fail, sale, mile,spoil, feel, mail, girl, cool, rule, etc.

Nghe từ điển bạn sẽ nhận ra âm l trong những chữ vừa nêu hay mọi chữ được viết tương tự – Có khi âm l rất rõ, có khi chỉ nghe phản phất.

Những chữ âm l rõ: Smile, oil, style, mild, bạn nên đọc là s+mai+ồ+l, oi+ồ+l, s+tai+ồ+ l, mai+ồ+d.

Nói chung là: Dù âm l đọc lớn hay nhỏ thì khi đọc, lưởi của bạn phải đồng thời di chuyển lên phía trên, đụng vòm họng và đầu lưởi chạm vào chân răng của hàm trên. Dĩ nhiên, khi TM của bạn đã giỏi quá rồi thì lúc đó bạn nên đọc hết mọi l trong một chữ, dù l ở đầu hay giữa chữ.

20. Xem các chương trình dành cho trẻ em trên các đài (hay websites) truyền hình Âu Mỹ rất phù hợp cho người học TA, vì chỉ những từ ngữ phổ thông được sử dụng và phát âm rất chuẫn; miệng lưởi moving rõ ràng; cách diễn đạt dễ hiểu, lại hài hước.

.

—–+—–+—–

.

21. Bạn có thể xem đi, xem lại nhiều lần một băng DVD ưng ý – Tốt hơn là xem nhiều DVD, nhưng lúc nào cũng chỉ học phớt qua. Mở subtitle để vừa xem chữ, vừa nghe nói. Khi TA của bạn đã khá thì bạn có thể vừa xem phim vừa đọc theo subtitle. Cũng như đọc sách, bạn hãy cho chạy tới lui dể nghe cho bằng được mọi chữ, mọi đoạn văn khó.

22. Khi bạn đã đạt advanced level thì nên vào diễn đàn TA để học hỏi cách diễn đạt suy nghĩ, diễn tả sự việc một cách phức tạp. Loại DĐ nào thì tuỳ thuộc vào sở thích của bạn.

23. Nhớ voiced và voiceless consonants sẽ giúp bạn học thuộc nhanh hơn một số rules khác, chẵng hạn như khi thêm “ed” hay “s” vào sau một từ.

Luôn luôn kéo âm thanh dài ra cho những nguyên âm (vowels) có voiced consonant theo sau và làm ngược lại cho voiceles consonant.

Ví dụ:
Advise, eyes, knees, have, made, had, bed, bag, dog ( kéo dài)
Advice, ice, niece, half, mate, hat, bet, back, dock (đọc nhanh)

24. U nằm sau d thì phải đọc là dz tương tự như chữ j trong joke.

Vi dụ:
GraDUal, scheDUle, education, graduation, procedure, etc.

Nhưng ‘t + u” và “t + y” thì phải đọc như “ch” của chữ church, change, etc.

Ví dụ:
AcTUally, staTUe, nature, situation, fortunate, don’T You, can’t you, etc.

25. Như đã nói trên, trẻ em phải tập nói nhiều thì giọng các em mới chính sát, rõ mau được. Tương tự, phải tập hát nhiều thì mới có thể trở thành ca sĩ được. Bạn nên đọc sách hay bất cứ cái gì viết bằng TA mỗi ngày; lúc nào cũng đọc đúng từng chữ. Bảo đảm, bạn sẽ đọc nhanh hơn dần. Khi gặp từ khó phát âm hay một đoạn câu toàn chữ khó, bạn nên tập đọc tới lui cho đến khi đọc suông sẽ hoặc ghi ra giấy. Những câu văn gọn gàng, diễn tả được những ý nghĩa cần thiết mà bạn thấy trong tự điển, sách, vv, cũng nên ghi xuống để thực tập sau đó.

26. Tự ôn lại bằng TA mọi việc bạn đã làm trong ngày, những gì bạn đả nói. Có thể tạo ra tình thế mà bạn có nhiệm vụ phải lên tiếng hay giải thích cho người khác hiểu về một sự việc. Lập đi lập lại một đề tài cho đến khi nào bạn thoả mãn về từ ngữ, cấu kết câu văn, giọng đọc và tốc độ trình bày.

27. TA có nhiều chữ được phiên âm một cách vô qui tắc, khó hiểu, nhưng phần lớn đều tuân theo những rules nhất định. Thật ra TA có nhiều rules hơn bất kỳ một ngôn ngữ nào. Càng biết được nhiều rules thì mới biết được sự ngoại lệ chiếm một tỷ lệ rất nhỏ.

28. TA có hai âm i: Một i ngắn và một i dài.

– Âm i ngắn cho mọi trường hợp chỉ có một i: Bit, sit, fill, piss.
– Âm i dài cho nhiều trường hợp khác: Beat, seat, feel, piece.

Đọc i dài khi nào bạn thấy: ee – see, ea – meal, ie – believe, ei – either, chữ cái cuối cùng là e – me, chữ cái cuối cùng là y – city, cụm chữ cuối cùng là ique – unique, và e + phụ âm + e như Vietnamese, steve, peter, these.

Người Tây mỗi khi chụp hình thường nói “say g”, bởi vì “g” có phiên âm: dzee hay dzi: – Âm i dài. Vậy khi bạn phát âm i dài, bạn nên mở miệng như đang mỉm cười. Động tác này làm cho âm i dài ra và ít bị ảnh hưởng bởi phụ âm theo sau.

Ví dụ:
Sit: vì i ngắn nên bạn đọc sí + t giống y như là sít + t. Nghe rất “sắc” và nhanh.
Seat: Bạn phải đọc s í í í í + t. Nghe nhẹ nhàng, thong thả.

29. Để mau tiến, hãy học cái tinh thần và cái cách của người Âu Mỹ: Mạnh dạn hơn trong mọi sự, nêu thắc mắc, tỏ ra grateful, sorry, open-minded, straightforward, không vòng vo lung tung, vv. Không chỉ trên diễn đàn mà ngay cả khi bạn tiếp xúc với người nước ngoài. Cứ việc tỏ ra vui vẻ, xáp lại chào hỏi, nói chuyện búa xua với những câu đã thuộc làu. Đừng hỏi tuổi, income, khen cao chứ đừng khen mập. Tây thích và rất trân quí những tiếp xúc tự nhiên thân thiện của người bản xứ.

30. Khi “t” là chữ cái cuối cùng của một từ, người Mỹ thường chỉ đọc nó (t) nếu từ đó ở cuối một đoạn câu, một câu hay vì cố tình nhấn mạnh từ đặc biệt đó.

Ngoài các trường hợp trên, t luôn luôn câm đối với người Mỹ. câm có nghĩa là lưởi được đưa vào vị trí để chuẩn bị phát âm t, nhưng lưởi được giử luôn ở đó.

Ví dụ:
Can’T go, don’t like, at work, budget cut, outside, lately. WhaT? ThaT can’t be right! That apartment felt quite hot.

“t” mà nằm giữa hai nguyên âm thì người Mỹ đọc thành “d” thật nhanh.

Ví dụ: Water, better, city, forty, little, meeting, duty, matter, party, total.
Đọc là: Wader, bedder, cidy, fordy, liddle, meeding, dudy, madder, pardy, todal.

31. Không những văn nói mà trong văn viết, những tạp chí, tài liệu, sách vở TA, TM càng có giá trị, nổi tiếng thì cách cấu tạo câu văn, từ ngữ sử dụng càng giản dị dễ hiểu. Mọi tầng lớp lao động trí thức, già trẻ đều có thể hiểu rõ ràng ý chính, cộng mọi chi tiết được nêu. Đây cũng là một sự khích lệ cho dân ESL.

Cảm ơn bạn đã đọc. Mọi góp ý, thắc mắc của bạn đều được đón nhận via paul.le11@yahoo.com. Good luck!

Advertisements

Database Migration

August 30, 2010

Database Migration là một trong những công việc thường gặp của DBA (Hôm trước mình cũng bị hỏi câu này :)). Thông thường, khi đi triển khai, thường là mình mang một database có sẵn đến site của khách hàng, deploy vào rồi sau đó mới chỉnh sửa data theo yêu cầu.

Ở SQL Server thông thường có 2 cách.

  • Một là backup database ra file bak sau đó restore trên máy khác.
  • Hai là shutdown database sau đó copy file mdf và ldf rồi attach trên máy mới là ta có thể có 1 database tương tự như source.
  • Ngoài ra có thể có một số third-party hỗ trợ, nhưng ít dùng vì 2 cách trên vừa đơn giản vừa dễ dùng.

Tất nhiên vì là đồ M$ nên chuyện multi platform là no-table.

Ở Oracle thì có nhiều giải pháp hơn. Và cũng thường ít khi phải care đến vấn đề OS. Chúng ta có thể xem xét một số giải pháp như:

  • Export/Import: export ra file dump, sau đó dùng import lại. Đây là một trong những cách hay được sử dụng nhất vì tương đối đơn giản lại khá mạnh, không phụ thuộc vào OS. Bạn có thể export trên máy chạy Windows sau đó import trên máy chạy Linux/Unix mà không ảnh hưởng gì đến dữ liệu bên trong. Tuy nhiên nó chỉ chạy được với điều kiện database size cỡ GB, chứ lên đến TB thì không khả thi (@Saravanan Shanmugan – OCM & James Madison – PM and Application Architect for Migration)
  • Data Pump: Phiên bản nâng cấp của Export/Import, bắt đầu có từ phiên bản Oracle 10g. Data Pump chạy nhanh hơn và có một số cải tiến như dùng tablespace metadata để thực hiện các thao tác migrate thông qua network link, rồi khả năng restart job… Nói chung, do sinh sau đẻ muộn nên nó kế thừa đầy đủ các tính năng của Export và Import ở cấp độ mạnh hơn tương đối. Tuy nhiên, khi đối mặt với dữ liệu cỡ TB thì chú này cũng khóc. Thí nghiệm của Saravanan và James: 15GB thì datapump hết 11 mins, tuy nhiên 7 TB thì hết những 93 hours 😦 trên cùng một cấu hình phần cứng
  • CTAS (Create table as Select): Cách này cũng được nhưng không thích hợp với vai trò của DBA vì phải tìm hiểu cấu trúc database (diagram, schema…) quá nhiều. Quên mất, cái này cũng có thể dùng với MS, nhưng ít người làm theo cách này
  • Third –party: chung số phận với third party của MS
  • Transportable tablespace (TTS): Tên đầy đủ là Cross Platform Transportable Tablespace Technology XTTS. Đây là một trong những feature mình muốn nói đến nhất trong chủ đề này. Khi bạn có một yêu cầu migration một database cỡ vài TB trong một thời gian ngắn, thì đây chính là giải pháp tối ưu nhất. Cơ chế hoạt động của công nghệ này như sau:
    • Set source tablespace về Read only
    • Dùng RMAN để copy các tablespace đến target database. Nếu có sự khác nhau về endian format, sử dụng lệnh RMAN Convert để chuyển đổi.
    • Thực hiện các thao tác để đưa các tablespace này vào target database
    • Set cả source lẫn target về trạng thái bình thường (Read Write )

Công nghệ này đã có từ phiên bản Oracle 8i, nhung khi đó chỉ cho phép move giữa các Oracle database có cùng data block size và cùng platform. Sang version 9i, Oracle khắc phục được điểm cùng block size, tuy nhiên vẫn chỉ cho phép move trên cùng platform.  Và ở phiên bản 10g, Oracle phá bỏ được cái Barrie cuối cùng này bằng cách sử dụng công nghệ Cross Platform TTS.

Ưu điểm của công nghệ này là:

  • Move tablespace giữa các heterogeneous OS
  • XTTS chỉ là high-level copy of data
  • Giảm thiểu lỗi thiếu bảng hoặc thiếu dữ liệu. nó chỉ có trạng thái: hoặc là thành công, hoặc là thất bại, không có trường hợp thiếu
  • K cần rebuild lại indexes
  • Endian convert nếu có chỉ chậm hơn 3% so với thao tác copy của OS
  • Không cần recollect các statistic

Nói chung giải pháp TTS tương đối hay, tuy nhiên theo ý của mình, DBA nên cưng cứng 1 tý thì khả thi hơn. Cũng không nhất thiết lúc nào cũng phải dùng giải pháp này, nếu dữ liệu vừa vừa thì nên dùng Exp/Imp hoặc Expdp/Impdp.

Trên đây mình đề cập đến 2 trong số database hay được sử dụng là MS SQL Server và Oracle. Còn DB2 của IBM thì mình sẽ nghiên cứu và cập nhật sau. 🙂

30 Aug 2010

HN

References:
1. Oracle Cross Platform Transportable Tablespace
http://www.oracle.com/technology/deploy/availability/htdocs/xtts.htm
2. Oracle Recovery Manager – RMAN
http://www.oracle.com/technology/deploy/availability/htdocs/rman_overview.htm
3. Data Pump
http://www.oracle.com/technology/products/database/utilities/htdocs/data_pump_overview.html
4. RMAN CONVERT command
http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10770/rcmsynta18.htm#RCMRF200
5. Using Transportable Tablespace
http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10739/tspaces.htm – ADMIN01101

Flashback

August 19, 2010

We were both young when I first saw you.
I close my eyes, and the flashback starts,

(@Love story – Taylor Swift)

Vâng, cái mà mình muốn nói ở đây chính là kỹ thuật Flashback trong Oracle.

Flashback là gì?

Một cách định nghĩa mình thích “Effectively, it’s a “oh shit!” proctection mechanism for DBAs”,  là cách thức nhìn dữ liệu tại một thời điểm trong quá khứ mà không cần dùng đến các thao tác recovery. (đây chính là điểm quan trọng để chống lại kiểu Flashback lập lờ của M$ http://www.eggheadcafe.com/software/aspnet/35792955/sqlserver-equivalent-of-flashback.aspx http://msdn.microsoft.com/en-us/library/ms175158.aspx, ha ha, dùng Snapshot cơ đấy).

Khi nào thì dùng Flashback

  • Thực hiện các câu Query trả về dữ liệu ở quá khứ
  • Thực hiện các câu Query trả về metadata chỉ ra sự thay đổi chi tiết trong lịch sử
  • Recover dữ liệu vào 1 thời điểm trong quá khứ

Để làm các điều trên thì phải dùng tools gì

  • Oracle Flashback Query
  • Oracle Flashback Version Query
  • Oracle Flashback Transaction Query
  • DBMS_FLASHBACK package

Nói lằng nhằng như trên, tóm lại cái Flashback này dùng để làm gì: như cánh cửa thần của Doremon (ngoài lề tý, mình mà là thằng Nobita thì thôi chẳng phải làm gì cho mệt nhỉ?).

  • Oracle Flashback Table: phục hồi dữ liệu về 1 thời điểm trong quá khứ. Nhân dân có thể restore table trong khi database vẫn đang hoạt động, undo các thay đổi cho từng table
  • Oracle Flashback Drop: Nhân dân nhỡ tay drop 1 table, muốn sửa sai. Cái này >< với lệnh DROP table
  • Oracle Flashback Database: Nhanh chóng đưa database trở về một thời điểm trước đó, có thể undo nhưng thao tác sai trước đó. Lưu ý nhân dân k việc gì mà phải đi restore database backups như sản phẩm của anh Hoá Đơn Cổng.

Cách dùng: Rất đơn giản với từ khoá AS OF TIMESTAMP  TO_TIMESTAMP

Ex1: SELECT *

FROM employees AS OF TIMESTAMP

TO_TIMESTAMP(‘2004-04-04 09:30:00’, ‘YYYY-MM-DD HH:MI:SS’)

WHERE last_name = ‘Chung’;

Ex2:

INSERT INTO employees

(SELECT * FROM employees AS OF TIMESTAMP

TO_TIMESTAMP(‘2004-04-04 09:30:00’, ‘YYYY-MM-DD HH:MI:SS’)

WHERE last_name = ‘Chung’);

Trông cũng dễ nhỉ?

– Table A has been deleted? Who did it?

– Britney Spears: Oops ! I did it again (:))

19 Aug 2010

HN

When an Oracle system hang up

August 18, 2010

Mấy hôm trước ông bạn thân nhờ mình xem hộ cho hệ thống đang chạy trên nền Oracle 10g + Unix. Ông bạn nói lúc bình thường thì không sao, nhưng đợt này nhiều người truy cập (k có số lượng user cụ thể nhưng chắc trên 1K) hệ thống cứ treo cứng luôn và không làm được bất cứ việc gì cả. Mình có hỏi ông bạn cụ thể thì các user kia vào làm gì thì ông bạn nói chủ yếu là register và search trong một module của hệ thống. Điều kiện là không được sửa đổi application code đang running

Suy nghĩ đầu tiên bao giờ cũng là code xấu. Đây cũng chính là vấn đề cốt lõi và cũng là yếu tố quan trọng nhất trong Performance Tuning, tuy nhiên có cái ràng buộc ở trên nên mình sẽ no-table vấn đề này. Lúc ông bạn nói, mình nghĩ ngay một số vấn đề:

  • Cảm nhận đầu tiên của mình là về Oracle connection. Mình đoán là hệ thống của bạn mình đang sử dụng dedicated mode vì nó phổ biển và đơn giản ít phải configure. Dedicated server là cơ chế ánh xạ 1- giữa client  connection và server process. Khi có 1 client connection hệ thống sẽ tự động sịnh ra một server process để đáp ứng. Số lượng user lớn dẫn đến số lượng server process lớn. Mà mỗi server process đều chiếm 1 lượng tài nguyên nhất định cho nên đến một mức nào đó sẽ làm cho hệ thống overload -> treo
  • Cảm nhận tiếp theo là về resource của user. Nhiều hệ thống ở mình sử dụng cơ chế 1 power user, nghĩa là thực tế chỉ có 1 user của Oracle, còn các user A, B, C … kia chỉ là các bản ghi trong bảng user của ứng dụng. Oracle user này thường có quyền rất mạnh (thậm chí DBA) và được gán resource rất lớn. Kết hợp với yếu tố trên thì treo là điều dễ hiểu.

Tất nhiên sẽ còn 1 số vấn đề nữa nhưng theo mình 2 cái trên là đủ cho hệ thống treo. Giải pháp của mình đưa ra là

  • Xem xét chuyển database về cơ chế shared-server. Tất nhiên cũng phải thêm 1 chút cấu hình, tuy nhiên, nó đều có guide book đầy đủ, cứ làm theo là OK. Mình cũng nói thêm qua 1 chút về Shared Server. Shared server, there is a many-to-one relationship many clients to a shared server, rất thích hợp cho các hệ thống OLTP nhưng rất không phù hợp với data warehouse. Nó sẽ dùng dispatcher để quay vòng các server process. Số lượng server process là limit nên hệ thống có thể chậm chứ k treo, đó là điều chắc chắn.
  • Hạn chế resource của user. Có nhiều cách để hạn chế: thông qua profile, giảm số lượng process/thread cho user, gán quota … Và nếu có thể thì nên tạo riêng 1 Oracle user dành cho các user kiểu này. Và thực sự nếu có money thì khi có những yêu cầu đột biến kiểu này trong 1 thời gian ngắn thì có thể xem xét tăng thêm database phụ , dùng các cơ chế synchronize data, i.e. replicate, mview để giảm tải cho server chính

Ông bạn nói sẽ xem xét thử nghiệm. Mình thì tin chắc rằng hệ thống sẽ không bị treo như trước nữa.

18 Aug 2010

HN

Silverlight, WCF, Entity Framework 4 ALL IN ONE

May 13, 2010

Introduction

About 2 months ago, I was so exciting when my boss asked me to have a talk in his room. I thought my salary would be increased but my boss gave me a task that is no less exiting than a higher salary (Wait, a higher salary is better, I think ^^). All I had to do is implementing a pilot project. The project is not special, just for managing documents in our company. Yet because I am working in R&D team, main purpose of this pilot project is for demonstrating what a RIA is. The pilot project, called Lighter, will tell you.

Because I had to finish this job in my own, I had some technology options to choose carefully. There was some choices available: Java FX, Adobe Flex, Microsoft Silverlight… At last, I decided to use Microsoft Silverlight to go.

What is ALL, What is ONE

At the time I was starting, Microsoft had been released Visual Studio 2010 beta 2 with Microsoft Silverlight 3.0. But I knew Silverlight by itself couldn’t shine as I need. I spent 1 week to complete the solution architecture of the project with the combination of Prism2 – Silverlight, WCF Services and Entity Framework 4 (of course beta 2). Let’s take a little deeper look at them.

Prism 2 – Silverlight

Silverlight on it own can make your website brilliant, but for building an application at enterprise level, we need a more powerful tool. I realized that Prism 2 can make it count. So what is Prism 2? Prism 2 is a Composite Client Application Guidance which designed to help you more easily build modular Windows Presentation Foundation (WPF) and Silverlight client applications. A composite client application is typically comprised of several modules, featuring multiple screens, rich, flexible user interaction and data visualization, and role-determined behavior. It uses loosely coupled, independently evolvable pieces that work together in the overall application.

For more information about Prism 2 and Composite Client Application, refer to http://compositewpf.codeplex.com/.

WCF Services

Windows Communication Foundation (WCF) is Microsoft’s unified programming model for building service-oriented applications. It enables developers to build secure, reliable, transacted solutions that integrate across platforms and interoperate with existing investments. It brings Lighter into SOA world. All business features of Lighter are implemented using WCF services.

For more information about WCF, refer to http://msdn.microsoft.com/en-us/library/ms735119%28VS.90%29.aspx.

Entity Framework 4

Entity Framework (EF) and Linq to SQL are 2 ORM tools come from Microsoft. While Linq to SQL is lightweight and applied for Microsoft SQL Server database only, EF is more powerful and can be used at enterprise level. At the time Lighter is kicked off, the latest version of EF is EF4 beta 2. It supports many compelling new features such as: Persistence Ignorance & POCO, Self-Tracking Entities & N-Tier support, lazy loading…

I decided to use EF4 to manipulate data in Microsoft SQL Server in Lighter project.

For more information about Entity Framework, refer to http://msdn.microsoft.com/en-us/data/ee720194.aspx.

ALL – in – ONE

Well, I combine them in one solution to implement Lighter project. Let’s take a look at the architecture overview.

Architecture Overview

Architecture Overview

In above diagram, there are 2 types of components: Library components and Application components. Library components are built-in framework components that be used in the solution. Application components are components that be developed by developers in charge in project.

Library components

  • Shell Infrastructure: Provides infrastructure to host a application shell and plug application modules. This component in Lighter is provided by Prism 2.
  • Service Locator: Provides the way for other components to lookup services. Services may be implemented as funtionality classes or web services or WCF Service. In this system, I use Microsoft Unity Container as a Service Locator.
  • Cross-cutting components: Utility components that commonly used in other components of application. Some cross-cutting features they provides are:
    • Security
    • Operation management
    • Communication
    • Logging & Tracing
    • Caching
    • Exception Handling…
  • ORM (Object Relational Mapping) Framework: A framework for converting data between incompatible type systems in relational databases and object-oriented programming languages. This creates, in effect, a “virtual object database” that can be used from within the programming language. Lighter uses Entity Framework 4 POCO as it database access component.

Application Components

  • View: GUI component that presents visual information to end user.
  • Presentation Model: Encapsulates presentation behavior and state and acts as a business façade for invoking services to accomplish requests from View (user).
  • Model: Presents in conceptually what system is. It contains all conceptual entities in system and reveal how these entities interact with others. To be noticed that these triad are come from Model-View-ViewModel pattern. I will describe it later.
  • Service: Provides business logic functionality. Because SOA approach is promoted and adopted, all services are implemented using Microsoft Windows Communication Foundation.
  • Data Access: Encapsulates logic of accessing and manipulating data in a data storage. This system uses Microsoft SQL Server as its underlying database.

The implementation

In this section, we are going to dig deeper in the solution and some challenges of the project. First of all, let me show you a list of technology and tools used by Lighter solution:

  • Platform: Microsoft .NET Framework 4.0 beta 2, Microsoft WCF, Microsoft Silverlight 3.0
  • IDE: Microsoft Visual Studio 2010 beta 2
  • Programming Language: C#
  • Storages: Microsoft SQL Server 2008 Express Ed., XML file system.
  • Frameworks: Microsoft Prism 2, Microsoft Entity Framework 4 beta 2, Microsoft Unity 2.0.

Below is a capture of the solution in Visual Studio .NET

The solution

The solution

Lighter architecture contains 3 layers: Presentation, Business Services, Data Access.

Presentation

Presentation layer adopts Prism 2 Silverlight as it main framework. Let’s see how Presentation is organized.

 

Presentation

Presentation

Prism 2 promotes us a modular architecture style. That is you have a Shell project with a Bootstrapper to start the Shell and load all modules that are plugged into the Shell. Each module is responsible for a business usecase. We also have a Web project to load Silverlight shell in browser.

Shell

As you can see, Shell project contains 2 main important pieces: Shell and Bootstrapper.

Shell is nothing but a placeholder for Layout module to inject the main GUI layout  onto it. I will describe Layout module later. The placeholder is also called “Region”. This is a term that coined by Prism 2.

Bootstrapper is responsible for several starting stuffs:

  • Initializes a IOC container
  • Initializes all necessary stuffs for system
  • Loads all plugged modules
  • Initializes and shows the Shell to end user.

Prism 2 provides several comfortable ways for loading modules

  1. Loading modules by code.
  2. Loading modules in configuration file.
  3. Loading modules in XAML.
  4. Loading modules in a directory.

Because Lighter is using Silverlight, so I picked the method number 3 and you may know why ModulesCatalog.xaml is existing in Shell project.

Layout Module

Layout Module

This module contains only one View is main layout frame of system. I use MVP pattern to implement this View. The main layout contains a header and a content panel.

  • Header: Displays Lighter application title and  defines regions for Search & Profile areas.
  • Content: defines a region for main content of Lighter application.

Other modules will inject Views and other GUI elements into these regions.

Management Module

Management Module

This module implements business usecases of Lighter application. I use Model-View-ViewModel pattern (MVVM) as the dominated pattern for organizing workitems in this module. (You can refer to http://msdn.microsoft.com/en-us/magazine/cc188690.aspx or http://msdn.microsoft.com/en-us/library/ff647543.aspx for MVP pattern and http://msdn.microsoft.com/en-us/magazine/dd419663.aspx for MVVM pattern).

There are some important parts in this module

  • Module Bootstrapper
  • Models
  • Views
  • ViewModels
  • Controllers
  • Events and Commands

Module Bootstrapper

Each module has 1 bootstrapper, it is an implementation of interface Microsoft.Practices.Composite.Modularity.IModule. Shell bootstrapper when loading plugged module, it arquires for module bootstrapper and invokes method Initialize() of it.

Thus, a module bootstrapper is typically responsible for

  • Initializes all services and registers them into system IOC container.
  • Initializes all controllers and registers them into system IOC container.
  • Initializes all Views – ViewModels and registers them into system IOC container.
  • Injects specific Views into appropriate regions, necessarily required by business logic.

Models

This contains model classes of Presentation layer only. They are defining the data to be displayed or otherwise acted upon in the user interface. So they need be utilizing interface INotifyPropertyChanged and class ObservableCollection to take advantages of Data Binding mechanism of WPF and Silverlight.

Views

A View is an interface that displays data (the model) and routes user commands (events) to the ViewModel to act upon that data.

ViewModel

A ViewModel is a “Model of the View” meaning it is an abstraction of the View that also serves in data binding between the View and the Model. It could be seen as a specialized aspect of what would be a Controller (in the MVC pattern) that acts as a data binder/converter that changes Model information into View information and passes commands from the View into the Model. The ViewModel exposes public properties, commands, and abstractions. The ViewModel has been likened to a conceptual state of the data as opposed to the real state of the data in the Model.

Controllers

In Presentation layer, controllers play the role of a interacting bridge between ViewModels and Services, between ViewModels and between Modules using Events.

Events and Commands

Events and Commands are the ways for communication between 2 modules and 2 piece-of-logic workitems. Because modules in a Composite Application are independent, events and commands are methods for 2 independent modules talking with each other. Inside a module, they can be used similarly. For example, a View can send action from User to a ViewModel using Comamnd. Prism2 supports a rich bunch of classes and interfaces for us to work with events and commands.

Business Services

Now we go to the second part of the system. All services in EMDS system are implemented using WCF. Because Presentation is working with Services by Service Contract interfaces. So Business services can be implemented by classes or standard Web services.

Another important part is DTO classes. In the early stage, I used EF4 POCO model classes as data contract of WCF services. It led to many complicated problems. Then I found a solution for this. That is Lighter solution has 3 types of model classes

  • EF4 POCO model classes: will be described later in Data Access section
  • WCF data contract model classes
  • Presentation model classes: already described in Presentation section.

Data Access

Data of EMDS is stored in Microsoft SQL Server and XML files. For accessing XML files, I use Linq to XML. For accessing database, I use EF4 beta 2 and applying its new feature POCO support. I want to say thank you to I want to say thank you to Daniel Wertheim, the man providing us very helpful framework of EF4 POCO (http://daniel.wertheim.se/2009/12/20/updates-to-putting-entity-framework-4-to-use-in-a-business-architecture).

Conclusion

This is not a real world application. Yet it successfully demonstrates the way you putting Silverlight – WCF – EF4 POCO in a business application.

I host it at http://code.google.com/p/sparklite-edm/

Your feedback is very important.

Nguyen Minh Dung.

Oracle, có thể bạn chưa biết

November 10, 2009

Hôm nay tình cờ vào xem lịch sử của Oracle, thấy có một số điều hay hay muốn chia sẻ với các bạn. Thuần tuý thống kê lịch sử thôi, không có PR gì đâu nhé.

Những cái đầu tiên của Oracle

  • First commercial RDBMS (cái này rất hay, lại là một sai lầm của IBM, tuy nhiên nhỏ thôi, các bạn có thế tìm hiểu được trên net)
  • First 32-bit database
  • First database with read consistency
  • First client-server database
  • First SMP database
  • First 64-bit RDBMS
  • First Web database
  • First database with Native Java Support
  • First commercial RDBMS ported to Linux
  • First database with XML
  • First database with Real Application Clusters (RAC)
  • First True Grid database
  • Free Oracle Database (Oracle Express Edition)
  • Unbreakable Linux Support

Toàn first quan trọng.

Cheers,

HN

Parallel Execution (Xử lý song song)

October 28, 2009

Thỉnh thoảng cũng cần phải viết.

Hôm nay rỗi rãi ngồi đọc về phần Parallel Execution (PE) chợt nhớ cậu chuyện ngày xưa có lần sếp cũ hỏi mình nhân lúc quá cảnh ở sân bay Đà Nẵng: giả sử có một dev ngon và 4 devs tầm tầm (ở mức làm việc được) thì em chọn thế nào để đảm bảo tiến độ 1 dự án? Mình trả lời sếp: Cũng tuỳ theo công việc, nếu công việc đòi hỏi sự liền mạch và có độ khó cao thì em chọn chú superstar kia. Còn nếu công việc bình thường, có thể phân chia được thì em chọn 4 bạn kia.

Tư tưởng của PE  này cũng vậy thôi. Đối với những công việc khó phân chia, các subtask phụ thuộc nhiều vào nhau thì PE có khi còn chậm hơn Serial. PE thường dùng cho các task lớn, có thể phân chia thành các task nhỏ, các task này tương đối độc lập với nhau. Đây chính khái niệm One Page Summary and Ten Chapter Report. Mình sẽ giải thích để các bạn rõ hơn: Nếu được giao viết phần tổng kết trong vòng 1 trang, bạn lại chia nó ra làm nhiều phần nhỏ, mỗi phần bạn giao cho 1 bạn khác thực hiện, sau đó ngồi tổng kết lại, chắc chắn sẽ chậm hơn nhiều nếu bạn làm việc đó một mình. Còn nếu bạn được giao viết một cuốn sách tầm 10 chương, các chương cũng tương đối độc lâp với nhau thì việc phân chia như trên sẽ cải thiện tiến độ đáng kể. Công việc của bạn lúc đó chỉ là coordinated các subtasks với nhau.

Nói thế để các bạn thấy được không phải lúc nào PE cũng làm tăng tốc độ công việc.

Trong database, PE thường được dùng trong trường hợp các task rất lớn đồng thời tài nguyên hệ thống dành cho nó (available resources) cũng phải lớn. Thông thường, nó thường được sử dụng trong các hệ thống Data Warehouse hơn là các hệ thống OLTP. Vì hệ thống OLTP thì có rất nhiều user sử dụng cùng 1 lúc nên cũng khó dành nhiều tài nguyên cho một user cụ thể nào được. PE có thể sử dụng trong: Query, DDL, DML, Recovery và Procedural. PDDL thì do các DBA take, Procedural là cách thức lập trình, còn lại thì phần lớn sẽ được automatic. Tuy nhiên khi dùng PDML các bạn cần phải chú ý một số vấn đề:

–       Trigger không được support

–       Sẽ có các constraints không được support vì các slide được tiến hành riêng biệt

–       Không access table bạn vừa sửa bằng PDML cho đến khi commit hoặc rollback

–       Advanced Replication không được support

–       Distributed transactions không được support

–       Clustered table không được support

Nếu bạn phạm vào các điều trên, sẽ có 1 trong 2 khả năng xảy ra: hoặc câu lệnh sẽ chuyển về dạng serial hoặc sẽ báo lỗi.

HN

FBI

August 18, 2009

Hôm nay tự nhiện thấy hứng nên mình lại viết tiếp, lý do hứng mình không tiện nêu ra ở đây

Nhìn cái title này thể nào các bạn cũng nghĩ mình đang đề cập đến Cục An Ninh Liên Bang Mỹ, xin thưa, mình chả liên quan x gì đến bọn đấy cả. Cái mình muốn nói ở đây chính là Function Based Index.

FBI đến đây chắc các bạn cũng biết là gì rồi, chính là B-Tree Index được đánh trên một hàm với tham số là một số cột trong bảng.

Chẳng hạn trong Oracle, để tìm tên Nguyen Van An thì thông thường câu điều kiện ở mệnh đề Where phải là Where upper(name) =’NGUYEN VAN AN’ Hoặc Where lower(name) = ‘nguyen van an’ chứ Where name = ‘Nguyen Van An’ risk hơi bị cao vì ai mà biết end user nhập như thế nào. (ở SQL Server không bị cái này vì SQL Server không phân biệt chữ hoa chữ thường).

Nếu table của bạn đã có index trên trường name, với trường hợp trên index đó cũng không được sử dụng, không tin nhìn execution plan mà xem. Bạn phải dùng index đánh trên hàm upper hoặc lower.

Ở các database khác mình không biết, chứ ở Oracle muốn làm được FBI các bạn phải có các quyền sau: QUERY REWRITE, GLOBAL QUERY REWRITE đồng thời phải set 2 tham số QUERY_REWRITE_ENABLED=TRUE and QUERY_REWRITE_INTEGRITY=TRUSTED.

Đối với FBI trên các hàm trả về varchar2, các bạn cũng lưu ý về length của chuỗi trả về đôi khi có thể quá lớn đối với Index (phụ thuộc vào blocksize của tablespace mà index nằm trên đó)

Vậy ưu nhược điểm của FBI là gì? Lần này mình sẽ nói đến cái dở trước.

Nhược

Đầu tiên dễ nhận thấy là nó sẽ tác động đáng kể đến thời gian đánh index. Hàm càng phức tạp, càng rối rắm thì thời gian càng lâu.

Thứ hai, nó cũng ảnh hưởng nhiều đến các lệnh Insert và Update. Nếu ứng dụng của bạn liên tục insert và update với khối lượng lớn thì nên cân nhắc cẩn thận.

Và cuối cùng là lưu ý về độ dài của hàm sẽ được đánh index như đã nói ở trên (giải lao 1 tý, :), câu này mình lại thuổng của bác Lê Dũng, càng ngày mình càng hâm mộ bác. Ai có sở thích giống mình thì tìm đọc the best-seller “Những phát ngôn làm thay đổi thế giới” – Tuyển tập 1000 tuyên bố ngoại giao của ông Lê Dũng, Bộ Ngoại Giao Việt Nam. Đồng thời các bạn có thể xem thêm một số tuyên bố của ông tại http://www.google.com.vn/search?hl=vi&q=%22L%C3%AA+D%C5%A9ng%22+Vi%E1%BB%87t+Nam+c%E1%BB%B1c+l%E1%BB%B1c+ho%C3%A0+b%C3%ACnh&btnG=T%C3%ACm+ki%E1%BA%BFm&meta=http://www.google.com.vn/search?hl=vi&q=%22L%C3%AA+D%C5%A9ng%22+Vi%E1%BB%87t+Nam+ph%E1%BA%A3n+%C4%91%E1%BB%91i&btnG=T%C3%ACm+ki%E1%BA%BFm&meta= Rất nhiều phát biểu của ông đã trở nên quá quen thuộc với khán thính giả Việt Nam, chỉ cần ông đứng trước bục là bạn đã biết ông sắp nói gì :))

Ưu

Hết giờ giao lao, quay trở lại ưu điểm của FBI, ngoài việc làm cho câu query nhanh hơn (lại lưu ý các bạn không phải lúc nào index cũng nhanh hơn đâu nhé – xem lại bài viết cũ của mình về index), FBI còn có một số “tiểu xảo” khá thú vị mà không loại index nào có thế có. Gọi là tiểu xảo vì nó không dựa vào bản chất thực của FBI mà lại dựa vào tính chất không chứa các entries có giá trị rỗng của B-Tree index:

  • Các bạn có thể tưởng tượng có loại index nào mà chỉ đánh index trên một số dòng trong một table không? Giả sử có table A có khoảng 1M records, table này có cột status có 1 vài giá trị, trong đó số rows mà status =’A’ chỉ có khoảng 1500. Bạn chỉ cần dùng FBI như sau: Create index A_Status_Idx on A(decode(status,’A’,’A’, null)); Vì B-Tree sẽ ignore tất cả các giá trị null nên index vừa tạo thực sự chỉ khoảng 1500 lá nên tốc độ của nó khi where status =’A’ (sẽ phải viết thành decode(status,’A’,’A’, null) =’A’) là nhanh kinh hoàng luôn.
  • Một tiểu xảo nữa là lợi dụng FBI để tạo ra các complex contraints. Ví dụ các project chỉ có 2 trạng thái là ACTIVE và INACTIVE, constraint ở đây là khi project ở trạng thái ACTIVE thì name của nó bắt buộc phải là Unique, còn INACTIVE thì vô 4. Cái này mình thật, các bạn viết code manually thì cứ gọi là như trâu kéo cày luôn, mà chắc x gì chạy đã ngon. Rất đơn giản chỉ cần: Create unique index active_projects_must_be_unique On projects (case when status = ‘ACTIVE’ then name end );

Tóm lại là khoa học kỹ thuật bây giờ rất chi là “mênh mang tình dân” (@bác Phiêu mình), hỗ trợ đến tận răng, nên các bạn cứ thoái mái mà lựa chọn.

FBI trông thế mà tiện ích ra phết.

Các bạn n(g)hỉ?

18/08/2009

HN

p/s: À, bài viết của mình chỉ có tác dụng cho Oracle nhé, các database khác chưa kiểm chứng nhưng mình tin là được.

Khoá – Locking

July 14, 2009

Đây em chọn “khoá” này cơ?

Đêm qua nhậu với ông bạn về, đang ngồi chơi với con bé con thì thấy NSND Thanh Hoa cứ ư ử “Đây em chọn lối này cơ” (Bài hát gì của anh An Thuyên, lại tranh thủ dìm hàng tý là mình chưa bao giờ thấy NSND này hát hay và xứng đáng với danh hiệu NSND), mình nghe thế đếch nào lại là “Đây em chọn khoá này cơ” (chắc do bia)? Lại chợt nhớ hôm T7 ngồi cafe với Minh Còi, Còi cũng nói về cái khoá (lock) này nên tranh thủ review phát. Chú ý: scope chỉ là database thôi nhé

Khoá là cơ chế giúp cho các truy nhập đồng thời đến cùng một shared resource và tất nhiên là trong môi trường đa người dùng. Chứ nếu chỉ là single user như kiểu MS Access thì khoá làm gì cho mất thời gian. Nói đến lock thì các bạn cũng phải biết những vấn đề liên quan như lost update, dead lock… Hiện tại có nhiều database, mỗi loại có những fundementals khác nhau (mình không nói loại nào hơn loại nào nhé) nên khi sử dụng cần phải biết những cơ bản về nó.

Dài dòng thế thôi chứ việc mà tất cả các developer phải làm là chọn một trong 2 chiến lược lock: optimistic và pessimistic (trong ngữ cảnh này dịch là bi quan và lạc quan nó không hợp lý lắm).

1. Pessimistic

Là chiến lược lock trước tài nguyên (rows) trước khi end users modify. (Cái này mà nói là bi quan thì e rằng hơi ….gì nhỉ?)

2. Optimistic

Là chiến lược chỉ lock tại thời điểm user modifying. Kể ra thì cũng hay nhưng vấn đề làm thế nào để biết mình đang sửa đổi bản ghi theo ý của mình. Chiến lược này nếu không khéo rất dễ bị hiện tượng lost update. Ví du bảng emp có trường name và date_of_birth. Cùng 1 lúc có 2 users A va B query dữ liệu record 5 trên application của mình. Sau đó A sửa trường name rồi commit. Tiếp theo B sửa trường date_of_birth rồi cũng commit. Một lát sau A query lại record 5 thấy vẫn là name cũ.

Vậy để tránh lost update thì làm thế nào. Có 2 cách:

–       Tạo thêm một column (kiểu integer hoặc date/timestamp) để lưu version của record. Việc maintain “version” column có thể thực hiện manually hoặc auto thông qua trigger.

–       Sử dụng checksum hoặc hash function để tính toán ra một giá trị dựa trên dữ liệu gốc. Có thể dùng checksum, hash hoặc MD5

Bản chất của cả 2 cách là một lần sửa đổi một record trên application đều phải check version hiện tại trong database có khớp với version mà mình đang query không. Nếu khớp thì việc sửa đổi được thực hiện, else thì end user phải check lại dữ liệu mình đang query rồi sẽ ra quyết định tiếp hay không. Ở cách 2 thì có vẻ sáng sủa hơn, không tốn bộ nhớ để lưu version column, hàm tính toán thì có thể không phụ thuộc vào database, tuy nhiên bù vào đó bạn phải tốn thêm một ít chi phí về mặt tốc độ để tính toán value của record.

Nói thêm một chút ở Oracle, phiên bản 10g trở đi có sử dụng trường ẩn ORA_ROWSCN based trên internal Oracle System Clock (SCN) tương tự như checksum nhưng không bị tốn thêm cost tính toán khi update. Để dùng được cái này thì table của bạn phải ở chế độ ROWDEPENDENCIES

3. Which is the best?

Pessimistic:  không phải check chiếc lằng nhằng làm gì, chỉ cần giữ lock trên bản ghi mà nó cần update là xong. Tuy nhiên nó chỉ useful trong môi trường stateful or connected environment, nôm na là luôn giữ kết nối đến database như kiểu client/server. Trong các application bây giờ số lượng end user càng lớn thì việc giữ connection quả là xa xỉ

Optimistic: Như đã nói ở trên (@Mr. Lê Dũng, Bộ Ngoại Giao), cách này phải luôn phải check version khi update. Tuy nhiên cách thức kiểm tra thì luôn luôn phức tạp và rất dễ quên. Sử dụng checksum không tốn bộ nhớ, lại có thể độc lập với database, nhưng lại tốn chi phí về tốc độ. Hơn nữa trong các table có chứa các trường LONG, RAW, LOB thì checksum chịu chết. Nếu trên database Oracle thì ORA_ROWSCN quả là có ưu thế, tuy nhiên chỉ apply cho 10g or higher

Vậy câu trả lời là: Tuỳ.

HN.

M$ SharePoint Excel service, how to use?

June 25, 2009

Mấy hôm vừa rồi mình bị bắt nghịch M$ SharePoint 2k7 (SP), phần Excel Service, nghịch 1 mình nên mệt phết. Tranh thủ ghi lại không mai lại quên. Mà các bạn lưu ý mình chỉ nói các cách cài đặt và hướng dẫn đưa 1 cái Excel từ local lên SP thôi nhé. Các cái khác các bạn tìm hiểu thêm trên mạng

Excel Service (ES) theo định nghĩa của M$ thì nó là “a Microsoft Office SharePoint technology that makes it simple to use, share, secure, and manage Microsoft Office Excel 2007 workbooks (.xslx, xslb) as interactive reports in a consistent way throughout the enterprise”. Hiểu nôm na thì nó là Excel trên Web. Chính vì trên web nên nó cũng khác so với cái Excel mà các bạn vẫn hay dùng. Cụ thể khác cái gì thì nó ở đây các bạn ạ http://office.microsoft.com/en-us/excel/HA100217161033.aspx . Các bạn chịu khó đọc kỹ xem cái gì thì ES nó support và cái gì thì không nhé. Quan trọng phết đấy

Về các thành phần chính thì ES có 3 thành phần chính: Excel Calculation Services được coi như engine, Excel Web Access (EWA) được coi như các Web Part để hiển thị và Excel Web Services (EWS) cung cấp các API để các bạn EU (End User, not châu Âu) chọc vào

Về software requirement thì chỉ yêu cầu SharePoint 2007 trên server, server này tất nhiên OS phải là Windows 2k3, ngoài ra máy trạm nào có ý định publish Excel thẳng lên SP thì phải cài Excel 2k7. Cài cắm và cấu hình nói chung là việc của anh Cổng và đồng bọn. Về cài đặt thì theo đúng tiêu chuẩn các phần mềm khác của anh Cổng, các bạn cứ wizard mà tương, bấm một loạt Next mà không cần biết nó là cái gì :). Sau khi cài xong thì các bạn chạy nốt cái configuaration trong menu của nó. Chuyện không nói nữa

Đến đây thì đến công việc của các bạn admin. Các bạn tuần tự thực hiện các bước sau cho mình

  • Tạo farm
  • Setting Excel Service: Các bạn có thể dùng các default của anh Cổng, nhưng cứ kiểm tra lại cho chắc. Đặc biệt các bạn phải nhập một cái user ở phần Unattended Service Account để authentication cái connection trong trường hợp về sau các bạn EU sử dụng các external data trong các file Excel với các option SSO va NONE ở phần connection (đây là mình cầm đèn chạy trước ô tô thôi). Cái option này nó chiếm mất của mình 2 days đấy
  • Tạo trusted file locations làm nơi chứa files (1)
  • Tạo trusted data connection library chứa các data connection (2)

Tiếp theo đến EUs. Các bạn tạo file Excel bình thường. Muốn upload lên SP, các bạn chỉ cần chọn Publish\Excel Service, rồi các bạn hỏi các bạn admin địa chỉ của (1) rồi các bạn cho file vào đó. Trong trường hợp các bạn có file rồi thì lên SP chọn chức năng upload file Trong trường hợp các bạn dùng External data thì các bạn phải upload cái connection lên trước. Các bạn hỏi xin địa chỉ của (2) rồi nhét connection vào. Sau đó làm giống như trên.

Thế thôi các bạn nhỉ? Nhìn đơn giản vật nhưng bập vào thì cũng nhiều vấn đề đấy.

HN