Thông tin file mới nhất được sửa đổi là bao giờ

Hệ thống của mình cập nhật thông tin vào một file khi có sự kiện xảy ra. Nếu hệ thống gặp trục trặc sẽ không cập nhật thông tin và sẽ gây lỗi hệ thống sau đó. Thỉnh thoảng sẽ bị lỗi như vậy mà không rõ nguyên nhân.
Mình đành viết một đoạn Script chạy 15 phút 1 lần kiểm tra xem thời gian cuối cùng nó được sửa và gửi email cho mình. Nếu vài lần liên tiếp mà file không được cập nhật thông tin thì khả năng có chuyện xảy ra và cần vào server để kiểm tra.

 import os
 from subprocess import Popen, PIPE
 import smtplib
 import sys
 from datetime import datetime, timedelta
 import os.path, time
 now = datetime.now()
 yesterday=datetime.strftime(datetime.now() - timedelta(1), '%Y%d%m')
 subject = "Last modified file Z:\TRITUE.R.S.sec" + '\n\r'
 msg = "Last modified: " + str(datetime.fromtimestamp(os.path.getmtime("Z:\TRITUE.R.S.sec")))
 msg = "ABC-"+ str(datetime.fromtimestamp(os.lstat('Z:\TRITUE.R.S.sec').st_mtime))
 sender = '[email protected]'
 message = 'From: Mail [email protected] ' + '\n' + 'To: '
 receivers = ['[email protected]','[email protected]']
 receivers = ['[email protected]']
 count = 0
 receipent_list = ''
 for each_receipent in receivers:
     if count < len(receivers) -1:
         receipent_list = receipent_list + each_receipent + ','
     else:
         receipent_list = receipent_list + each_receipent
     count = count + 1
 message = message + receipent_list + '\n'
 message = message + 'Subject: ' + subject + '\n\r'
 message = message + msg + '\n'
 try:
    smtpObj = smtplib.SMTP('mail.trituenhantao.org')
    smtpObj.sendmail(sender, receivers, message)         
    print("Successfully sent email")
 except SMTPException:
    print("Error: unable to send email")

Unlock user Workspace Administrator on Apex

Bên mình làm hệ thống báo cáo bằng Apex. Khi muốn tạo hoặc sửa báo cáo phải vào trang quản trị ứng dụng với tài khoản:
DB: XXX
User: ADMIN1
Pass: Abcd1234
Hôm nay vào vì bị lock do nhiều lần nhập sai mật khẩu.

Địa chỉ để vào quản trị ứng dụng là http://111.111.111.111:7778/apex/
Địa chỉ để vào ứng dụng là: http://111.111.111.111:7778/apex/f?p=104:LOGIN:11636406781643:::::

Ứng dụng vẫn vào được bình thường nhưng phần quản trị ứng dụng bị báo lock user.

Các bước để unlock:
B1: Vào CMD gõ lần lượt các lệnh sau:

sqlplus /nolog
connect /as sysdba
alter session set current_schema = APEX_050100;
commit;
UPDATE Apex_050100.Wwv_Flow_Fnd_User

SET Web_Password = 'Abcd1234'

WHERE User_Name = 'ADMIN'

AND Security_Group_Id = 10;

COMMIT; 
begin
wwv_flow_security.g_security_group_id := 10;
wwv_flow_fnd_user_api.UNLOCK_ACCOUNT('ADMIN');
commit;
end;

Nếu cmd không tự ngắt để enter lệnh thì gõ / và nhấn Enter.

B2: Sửa trên ứng dụng

Địa chỉ quản trị Workspace: http://111.111.111.111:7778/apex/f?p=4550:10:13666886988498::NO:::
Đăng nhập với tài khoản: ADMIN / Abcd1234

Bấm vào Manage Workspaces.
Chọn Manage Developers and Users trong mục Workspace Actions
Chọn User cần Unlock, ở đây là ADMIN1
Tìm đến mục Account Availability. Chọn Unlocked.

Thế là xong, chỉ cần vào lại trang quản trị ứng dụng và nhập thông tin cũ là được.

Một chiến lược đảm bảo an toàn dữ liệu

Hiện mình đang làm cho một công ty X về việc cung cấp dịch vụ cho khách hàng. Hệ thống lưu trữ thông tin khách hàng bao gồm nhiều thứ như họ tên, số điện thoại email, thời hạn dịch vụ, lịch sử thanh toán…

Như các bạn đã biết, dữ liệu về khách hàng của công ty là cực kỳ quan trọng. Bài toán đảm bảo an toàn dữ liệu khách như vấn đề bảo mật, tránh mất mát dữ liệu, đảm bảo hệ thống luôn sẵn sàng… là những bài toán lớn cần được giải quyết. Qua tìm hiểu hệ thống và cóp nhặt trên mạng, mình nốt lại một số thông tin về lý do và cách thức việc đảm bảo an toàn dữ liệu.

Dữ liệu thì được nằm trên cơ sở dữ liệu, từ đó các ứng dụng truy cập vào hệ thống để thực hiện các thao tác xem, thêm, sửa xóa dữ liệu. Cơ sở dữ liệu luôn phải được đảm bảo sống, nghĩa là bất kỳ lúc nào cũng có thể truy vấn được. Tuy nhiên, không phải lúc nào hệ thống cũng ổn định, có thể lỗi ở phía server(phần cứng), lỗi ở phía hệ điều hành, lỗi ở phía hệ quản trị cơ sở dữ liệu…

Sau đây mình liệt kê các mức của hệ thống:

Tính sẵn sàng của hệ thống

Hiện tại hệ thống bên mình chỉ có duy nhất một DB đang Active. Hàng giờ hệ thống liên tục đồng bộ sang 2 DB ở chế độ Standby. Chỉ khi nào xảy ra sự cố đặc biệt nghiêm trọng, DB đang Active nguy cơ không thể hồi phục trong thời gian dài thì 1 trong 2 DB này mới được bật lên ở chế độ Active. Như vậy tính rủi ro khá cao.
Ở công ty Y cũ mình thì sử dụng cơ chế 3 Node DB để đảm bảo tính sẵn sàng của hệ thống. Nghĩa là hệ thống luôn luôn có 3 DB đều ở chế độ Active, sử dụng công nghệ RAC của Oracle. Khi 1 DB (1 Node) gặp trục trặc thì hệ thống vẫn hoạt động được bình thường. Tuy nhiên khả năng Failover của hệ thống thì mình không dám chắc (Failover là khái niệm về việc giao dịch đang xử lý ở Node lỗi có tiếp tục được xử lý ở Node khác không).

Đảm bảo an toàn dữ liệu

Mô hình hệ thống Active – Standby thì sau một khoảng thời gian cần phải cập nhật thông tin từ con Active sang con Standby sử dụng công nghệ Archive log của Oracle để copy các sự thay đổi sang con Standby. Hiện tại có 2 con Standby, một con nằm cùng Data Center với con Active, một con Standby nằm ở một Data Center khác.

  • Đối với việc lỗi phần cứng của con Active, trong thời gian ngắn không khắc phục được thì con Standby cùng Data Center sẽ được bật lên để tiếp tục đảm bảo dịch vụ.
  • Đối với việc lỗi cả Data Center về phần cứng, hạ tầng mạng… thì buộc phải bật con Standby ở Data Center khác.

Theo khuyến cáo thì các Data Center đặt dữ liệu của hệ thống nên đặt xa nhau hàng trăm KM. Việc này đề phòng các thiên tai có thể xảy đến trên một vùng lớn. Ví dụ bão đổ vào Miền Bắc, cụ thể là Hà Nội. Trường hợp các Data Center ở Hà Nội đều hỏng hết thì khi đó Data Center nằm ở Bình Dương hoặc TP Hồ Chí Minh phát huy tác dụng. Không những việc đảm bảo dịch vụ mà còn đảm bảo về tính toàn vẹn của dữ liệu.
Đối với công ty lớn, dịch vụ có thể là khu vực và toàn cầu thì việc đặt dữ liệu tại Data Center thứ cấp có thể phải đặt ở nước khác hoặc châu lục khác. Việc này đảm bảo khi có chiến tranh hoặc sự tấn công lên tầm quốc gia.

Đây là hiểu biết của mình ở thời điểm hiện tại. Sau mình cần tìm hiểu rõ hơn về các khái niệm: High Availability, Cluster, Network Load Balancer, Failover