Winservice và Job scheduler – crontab

Hôm trước có đồng nghiệp cũ hỏi mình config thời gian chạy của winservice tự động gửi lại tin nhắn nằm ở đâu? Thực ra vòng vo một hồi thì đó là 1 cái Job chạy 5 phút 1 lần kiểm tra xem hàng đợi gửi tin nhắn xử lý có bị tồn không để thông báo tới admin để kiểm tra hệ thống. Về hệ thống này mình sẽ trình bày ở một bài khác.
Nhân tiện việc này mình muốn chia sẻ sự hiểu biết của mình về Winservice và Scheduler – Crontab:

  • Winservice: mình đã tiếp xúc với winservice sớm hơn trong công việc. Winservice bản chất là một chương trình thực thi một khối lệnh nào đó hoặc công việc nào đó lặp đi lặp lại sau một khoảng thời gian nghỉ nào đó. Ví dụ như ta phải dán con hạc giấy đã được gấp lên một bước tường chẳng hạn, ta cứ dán được 1 con lên thì ta lại ngồi nghỉ 5 phút chẳng hạn. Ta không quan tâm dán nó trong bao lâu 1 phút, 2 phút hay 5 phút… miễn là cứ dán xong thì ta ngồi nghỉ 5 phút rồi dán tiếp. Ứng dụng của Winservice là xử lý hàng đợi – queue, trong hàng đợi ta không cần biết có bao nhiêu, cứ lấy 1 cái (có thể random hoặc cái đầu hàng đợi hoặc cuối hàng đợi…) đem ra để xử lý xong rồi nghỉ một thời gian nào đó rồi lại vào lấy 1 cái… tất nhiên hàng đợi có thể tiếp tục được cập nhật hoặc không, hoặc có thể cập nhật ở một thời điểm bất kỳ nào đó. Do vậy với winservice ta không thể biết trước khi nào thì một khối lệnh hoặc công việc mới được thực hiện do ta không nắm được khối lệnh đó hoặc công việc được xử lý trong bao lâu. Cứ phải xong thì mới thực hiện các việc tiếp theo. Đối với Winservice ta có thể làm xử lý 1 luồng nhưng để hiệu quả ta có thể làm nó chạy đa luồng (nghĩa là các công việc xử lý song song nhau) nhưng nếu sử dụng chung tài nguyên thì rất dễ xảy ra xung đột dẫn đến bị deadlock và winservice bị treo không chạy được nữa. Ta buộc phải xử lý khéo léo khi code trong vấn đề này, và việc này xảy ra là chuyện bình thường.
  • Scheduler – Crontab: Cũng như Winservice, Scheduler – Crontab (mình không rõ tên của nó nên đang dùng tên lần lượt mà hệ đều hành Window và Linux cung cấp cho người dùng) cũng thực thi một khối lệnh hoặc công việc nào đó nhiều lần nhưng được xác định thời gian bắt đầu của công việc đó. Ví dụ với việc dán hạc giấy, thì cứ đầu từng giờ ta tiến hành dán một con hạc giấy, việc dán này không cần biết có xong hay không, nhanh hay chậm, cứ đầu từng giờ là lấy 1 con hạc lên gián mà thôi. Như vậy có thể lần giờ trước ta dán chưa xong thì tới lần giờ tiếp theo ta sẽ vẫn lấy 1 con hạc đem đi dán.

Một số ứng dụng của Winservice và Scheduler – Crontab mà mình biết như sau:

Winservice:

  • Xử lý hàng đợi nạp tiền của khách hàng: Ví dụ hàng trăm nghìn tin nhắn nạp thẻ đến trong 1 phút của nhà mạng, nhà mạng chắc chắn sẽ dựng queue để đón nhận các yêu cầu này và lần lượt lấy 1 hoặc 1 số giao dịch để đem đi xử lý. Có thể nghỉ 1 chút lại tiếp tục lấy để xử lý……

Scheduler – Crontab: Các phần job chạy theo năm – tháng – giờ – phút – giây như:

  • Job backup hệ thống vào cuối mỗi ngày
  • Job kiểm tra cứ 5 phút lại check hệ thống hoặc tác vụ gì đó như winservice còn sống không để thông báo
  • Job gửi dữ liệu vào ngày đầu tháng tất cả số liệu của tháng trước

Winservice và Scheduler – Crontab có các tính chất và ưu nhược điểm khác nhau nên tùy từng tác vụ cụ thể ta phải xem xét và sử dụng cho phù hợp.

Học và ứng dụng DATA SCIENTIST, AI, MACHINE LEARNER với KAGGLE

KAGGLE: học tập và áp dụng kiến thức vào các Project về DATA SCIENTIST, AI, MACHINE LEARNER

Kaggle là nơi để những người nghiên cứu về data science có thể chia sẻ kiến thức, dữ liệu và những người mới nghiên cứu về machine learning có thể học tập, tìm kiếm tài liệu, tham gia các cuộc thi và áp dụng các kiến thức này vào các project thực tế.

Oracle thông báo về các Procedure, PACKAGE được sửa trong ngày

Một ngày đẹp trời như thường lệ mình đến công ty nhưng được thông báo là có 1 vài job chạy hàng đêm của hôm trước bị lỗi. Kiểm tra nguyên nhân thì do mình đã tiến hành sửa một PACKAGE nhưng khi compile thì bị lỗi mà mình đã không để ý. Đó chính là sơ suất của mình khi thực hiện sửa 1 PACKAGE trên PROD mà không verify lại. Để khắc phục hậu quả này là phải đi tìm lại đoạn code bị mất trên con test (mà đã backup rồi) và tiến hành chạy lại những job bị lỗi.

Để kiểm soát việc này, vào cuối ngày ta phải check lại các PACKAGE được sửa đổi trong ngày có compile thành công hay không. Sau đây là câu lệnh liệt kê các PACKAGE, PROCEDURE được sửa trong ngày:

SELECT owner,
object_name,
object_type,
last_ddl_time,
status
FROM dba_objects
WHERE object_name IN
(SELECT A.REFERENCED_NAME
FROM DBA_DEPENDENCIES a
WHERE object_type IN ('PROCEDURE', 'PACKAGE BODY', 'PACKAGE'))
AND last_ddl_time >= TRUNC(SYSDATE - 1)
ORDER BY last_ddl_time DESC;

Để tự động hóa việc này ta tiến hành lập crontab hoặc schedule gửi email thông tin để người trực cuối ngày kiểm tra để tiến hành sửa kịp thời. Tránh bị lỗi như trên.

Import dữ liệu vào table Oracle bằng file data

Trong nhiều trường hợp ta cần đưa dữ liệu từ file vào DATABASE, cụ thể khi ta muốn import dữ liệu từ 1 file dữ liệu nào đó có trong DATABASE. Cách đơn giản nhất đó là viết câu lệnh Insert data vào bảng nhưng cách này rất mất thời gian và có thể làm treo hệ thống. Sau đây tôi sẽ hướng dẫn các bạn Import dữ liệu vào table Oracle bằng file chứa data như CSV, Excel, Txt…

Ta sử dụng phần mềm Oracle SQL Developer được cung cấp miễn phí bởi Oracle, có thể chạy ngay mà không cần cài đặt.

Ví dụ ta có file diemso.csv, cần đưa dữ liệu này vào bảng DIEMSO có các cột tương tự nhau.

Các bước chính để import dữ liệu vào Oracle

B1. Đầu tiên ta nháy đúp vào bảng nó, nó sẽ hiển thị sang màn hình làm việc chính các thông tin của bảng này. Ta có thể xem các thông tin của bảng như: thông tin các cột, thông tin data trong đó, các thông tin khác như index, contrain…

B2. Ta chọn sang tab data, nếu có dữ liệu thì nó sẽ show một phần dữ liệu ra cho ta có thể xem.

B3. Ta chọn Action… ở góc bên phải màn hình. Chọn Import data. Màn hình chọn file sẽ hiện ra để ta đi tìm file để import.

B4. Chọn đến file cần import, ở đây ta chọn đến file diemso.csv

B5. Từ đây ta chủ yếu chọn Next, mọi tham số ta để mặc định. Lưu ý đến màn hình số 4, phần map giữa cột của file csv với cột của TABLE trong DATABASE. Ta cần để ý chọn để map cho đúng cột, vì có thể thứ tự các cột trong csv có thể khác. Với cột có DATA là DATETIME ta cũng cần lưu ý định dạng để hệ thống có thể import vào đúng.
Ví dụ định dạng trong file csv là DD/MM/YYYY thì ta phải nhập định dạng này dưới phần MAP ID(phía bên phải).

B6. Sau đó Next đến bước cuối cùng, ta click verify. Tất cả SUCCESS là OK.

B7. Sau đó nhấn Finish. Chờ 1 lát thế là xong. Cách import này rất nhanh. Thay cho việc gen câu lệnh để insert hàng hoạt dữ liệu vào TABLE.

Trên đây là cách import dữ liệu vào table Oracle thông qua file CSV. Ta cũng có thể thao tác tương tự đối với file txt hoặc file excel… để đưa dữ liệu vào bảng thay vì phải dụng câu lệnh insert.

Có thể bạn quan tâm:

Quản trị Oracle trên Window: DATABASE, SCHEMA, TABLESPACE, TABLE

Hệ quản trị Oracle là hệ quản trị hàng đầu trên thế giới hiện nay, vượt lên trên cả SQL Server, MySQL… Hầu hết các hệ thống lớn và quan trọng đòi hỏi tính toàn vẹn dữ liệu cao, tốc độ xử lý nhanh… đều sử dụng Oracle. Ví dụ các hệ thống của ngân hàng, chứng khoán, các công ty lớn… Do vậy việc quản trị cơ sở dữ liệu Oracle luôn là một ngành hot do đó Oracle có cả một hệ thống tài liệu, đào tạo cho các chuyên gia về Oracle. Oracle có thể được cài đặt cả trên Window và Linux, sau đây mình xin hướng dẫn một số thao tác cơ bản về quản trị Oracle trên Window.

Trong khuôn khổ bài viết mang tính ghi chú lại để có thể sử dụng sau này và chia sẻ với những người mới. Nên mình chỉ hướng dẫn những việc liên quan đến 4 đối tượng chính sau: Database, Schema, Tablespace, Table.

Tạo mới một Database mới

Do server test đã có 1 database backup là APEX, để học mình sẽ tạo một database mới để không ảnh hưởng đến database backup APEX này.
Hiện server của hệ điều hành là Windown, phiên bản Oracle là 11g.
Ta chạy file dbca.bat nằm trong thư mục cài đặt Oracle ban đầu của ta:
C:\app\oracle\product\11.2.0\dbhome_1\BIN
Phần tạo này giao diện trực quan nên ta nhìn vào có thể tự chọn được. Ta chỉ cần lưu ý khi tại bước 7 cần tích chọn vào Enable Archiving để sau này có thể sử dụng RMAN để backup hoặc restore GAP file.

Tạo mới một schema để thao tác

Với ORACLE thì 1 DATABASE có thể tạo được nhiều SCHEMA, SCHEMA được quản lý bởi USER. Ta sẽ tạo một SCHEMA để thao tác trên đó. Một USER có thể quản lý nhiều SCHEMA.
Ta có thể dụng SQL Developer đăng nhập với quyền SYSDBA với user SYS hoặc SYSDBA để tạo mới một SCHEMA.
Create user TESTSQL01 identified by 123456;
Phân quyền lớn nhất cho SCHEMA này(test thì để thế này, thật thì tùy theo từng SCHEMA).
grant dba to TESTSQL01;

Tạo mới một TABLESPACE mới của SCHEMA

Như ta đã biết, một TABLE sẽ được lưu trong một TABLESPACE nhất định. Mỗi TABLESPACE có thể có một hoặc nhiều TABLESPACE.
Để kiểm tra dung lượng TABLESPACE và danh sách các TABLESPACE của SCHEMA ta dùng câu lệnh:
select b.tablespace_name,
b.MEGS,
(b.MEGS - a.MEGS_FREE) as ALLOCATED_MEGS,
round(((b.MEGS - a.MEGS_FREE) / b.MEGS) * 100) PCT_USED,
a.MEGS_FREE, EXTENSIBLE_MEGS
from (select tablespace_name, round(sum(bytes / 1024 / 1024)) MEGS_FREE
from dba_free_space
group by tablespace_name) a,
(select tablespace_name, round(sum((bytes / 1024 / 1024)),0) MEGS,
round(
sum(
case when autoextensible = 'YES' then (maxbytes - bytes)/1024/1024
else 0
end
),0) EXTENSIBLE_MEGS
from dba_data_files
group by tablespace_name
) b
where a.tablespace_name(+) = b.tablespace_name
order by 4 desc;
Ta sẽ tạo mới một TABLESPACE bằng câu lệnh:
create tablespace TESTTABLESPACE
logging datafile 'D:/app/oracle/oradata/PKTUY01/testtbsp01.dbf'
size 32m
autoextend on
next 32m maxsize 50m
extent management local;
Ta có thể sửa để nới thêm dung lượng cho TABLESPACE bằng câu lệnh:
ALTER DATABASE
DATAFILE 'D:/app/oracle/oradata/PKTUY01/testtbsp01.dbf'
RESIZE 60M;
Hoặc nếu ổ đĩa hết dung lượng ta có thể thêm datafile bằng câu lệnh:
ALTER TABLESPACE TESTTABLESPACE
ADD DATAFILE ‘E:/PKTUY01/testtbsp02.dbf’
SIZE 200M;

Tạo mới một TABLE trên TABLESPACE

CREATE TABLE GIAHAN(
SMC NVARCHAR2(100),
datcre DATE
)
TABLESPACE TESTTABLESPACE
STORAGE ( INITIAL 50K);
Ta cần có một chiến lược hợp lý để tiến hành lưu trữ TABLESPACE sao cho hợp lý. Làm sao dung lượng trống của ổ đĩa phù họp, các TABLESPACE không bị đầy tránh gây ảnh hưởng đến vận hành hệ thống.

Quản trị Oracle nói chung và quản trị Oracle trên Window nói riêng đòi hỏi một kiến thức nhất định về kiến trúc của Oracle cũng như về hệ điều hành. Nhìn chung việc cài đặt và quản trị Oracle trên Window khá đơn giản nhưng vì Window không ổn định Linux nên đối với các công ty lớn thường cài đặt Oracle trên Linux.

Để đảm bảo tính ổn định của hệ thống, bạn có thể quan tâm đến một số bài viết sau: