1. Chuyển chuỗi sang dạng cột để select
select regexp_substr('PRIM,SECO,THIRD,NORIGHT','[^,]+', 1, level) as code_id from dual connect by regexp_substr('PRIM,SECO,THIRD,NORIGHT', '[^,]+', 1, level) is not null;
select regexp_substr('PRIM,SECO,THIRD,NORIGHT','[^,]+', 1, level) as code_id from dual connect by regexp_substr('PRIM,SECO,THIRD,NORIGHT', '[^,]+', 1, level) is not null;
Archived Log Mode là một chế độ của Orace phục vụ việc backup database. Archiver Process chính là process chịu trách nhiệm ghi log file ra file archive để lưu trữ. Ta có thể sử dụng các archive log này để tiến hành restore dữ liệu. Archiver Process chỉ chạy khi database đang được cấu hình chế độ chạy Archived Log Mode.
Hôm vừa hệ thống bên mình gặp tình trạng Database bị stop không rõ nguyên nhân. Qua kiểm tra một hồi thì phát hiện ổ cứng bị đầy do Archived Log sinh ra quá nhiều. Việc Archived Log bị tràn sẽ làm Archiver Process bị lỗi không thể chạy dẫn đến các thao tác mà Database không làm được nên treo cả hệ thống.
Sự cố này khá là nghiêm trọng vì nó gây dừng Database. Các hoạt động thực hiện đến nó không thể thực hiện được. Hiện tượng Archived Log bị tràn thỉnh thoảng mới xảy xa nhưng lần này nó phát sinh tới 100GB Archived Log thì đúng là bất thường.
Nguyên nhân gây nên tình trạng này là do 1 job hàng ngày tiến hành xóa và insert một lượng lớn dữ liệu nên Archived Log phát sinh ngày càng nhiều. Vì Archived Log có nhiệm vụ ghi lại toàn bộ sự thay đổi của table nên hàng ngày nó vẫn lưu trữ các thông tin này lại. Mặc dù thực tế dữ liệu đó chỉ có tác dụng nhất thời ghi ra để tiến hành xuất dữ liệu ra file để lưu trữ.
Job này có nhiệm vụ xóa dữ liệu cũ của bảng, tổng hợp lại dữ liệu ở nhiều nguồn rồi insert dữ liệu vào bảng đó để thực hiện 1 số tác vụ tiếp theo.
Cách xử lý để Archived Log không phát sinh nhiều đó là thay vì việc job tiến hành xóa dữ liệu thì tiến hành truncate table. Vì truncate table coi như drop table và create lại, Archived Log không lưu trữ lịch sử thông tin truncate table nên Archived Log phát sinh rất ít.
Để thao tác truncate table thực hiện được trong procedure (gói gọn trong job) ta phải viết lệnh sau:
EXECUTE IMMEDIATE 'TRUNCATE TABLE tablename';
Từ phần này mình để ý từ lâu mà nay mới phát hiện ra. Mình có một table dữ liệu khá lớn tầm 20Gb, dữ liệu được thêm vào liên tục nên ngày càng phình to. Mình sử dụng Toad để xem dữ liệu và thỉnh thoảng xóa bớt dữ liệu đi nhưng sau đó kiểm tra kích thước cũng không bị giảm đi tẹo nào.
Mình đã thử việc xóa dữ liệu đi nhưng kích thước vẫn thế. Chỉ khi sử dụng lệnh truncate table thì kích thước table mới về 0.
Để ý các job tương tự sếp viết thì mình thấy sếp đều dùng câu lệnh truncate để xóa dữ liệu. Đúng là người có kinh nghiệm vẫn cứ khác.
Nghe mọi người trong team nói tạo Testcase trên Testlink cho phần mềm mới. Mình đành lên mạng search thì biết được thông tin về phần mềm này.
Testlink là phần mềm mã nguồn mở được viết bằng PHP được sử dụng cho việc quản lý việc testcase cho một phần mềm hoặc một hệ thống nào đó. Ta có thể cài đặt về host riêng cho tất cả mọi người trong team dùng.
Nó có khá nhiều tính năng:
Nhìn chung khá là hay ho, chủ yếu để quản lý testcase mà thôi. Không có tính năng test tự động hay gì đó… Hiện tại đã có nhiều phần mềm test tự động nhưng mình nghe Testlink cũng lâu rồi và thấy khá nhiều người sử dụng nó.
Ứng dụng phê duyệt theo quy trình của mình trên APEX cần thêm tính năng gửi email thông báo tới người nhận thông tin tiếp theo cũng như thông tin phê duyệt hoặc từ chối tới email của người dùng. Mình chỉ việc viết thêm hàm gửi email vào trong mỗi bước phê duyệt hoặc từ chối là xong. Code gửi email được viết bằng PL/SQL trên server Oracle mới đã có sẵn package đã được sử dụng từ trước rồi nhưng khi tiến hành dịch lại trên server này thì lại gặp lỗi thông báo bảng dba_directories không tồn tại. Lỗi này là do table không được phân quyền select trên Oracle.
Thực chất bảng dba_directories này là bảng của hệ thống nhưng với schema đang đăng nhập thì lại không có quyền gì thao tác trên bảng này. Đối với hàm gửi email cần truy cập bảng dba_directories để lấy đường dẫn nên ta phải tiến hành phân quyền select vào bảng dba_directories cho user (hay còn gọi là schema) chạy hàm gửi email này. Bởi vì bảng dba_directories là bảng của hệ thống nên ta phải sử dụng quyền sysdba để tiến hành phân quyền.
Đối với server database Oracle chạy hệ điều hành Windown thì ta tiến hành các bước sau để phân quyền:
Sau khi đã phân quyền xong thì biên dịch lại package không còn bị lỗi nêu trên nữa.
Một số bài viết liên quan đến quản trị hệ thống Oracle:
Sử dụng Linux để học ML và AI, ta cần cài đặt thư viện Keras để vọc thử.
nên cài đặt và đặt mặc định Python 3 để sử dụng.
pip install --upgrade tensorflow
pip install numpy scipy
pip install scikit-learn
pip install pillow
pip install h5py
pip install keras
https://www.pyimagesearch.com/2016/11/14/installing-keras-with-tensorflow-backend/
Tiếp theo làm ứng dụng luôn: Sử dụng Keras – Deep learning để phân loại ảnh