Cách Tạo Job Trong Sql Server Và Cách Tạo Bảng Động Định Kỳ

Như chúng ta đã biết đối với các hệ thống Logging thì dữ liệu luôn được cập nhật hàng tháng, hàng ngày vì vậy đòi hỏi CSDL phải tương thích có nghĩa là Log trong tháng nào thì hệ thống sẽ Insert vào tháng đó tương ứng tráng việc Insert nhiều trong cùng 1 bảng dẫn đến việc Select chậm khi trả về kết quả. Vì vậy đối với Log của mỗi tháng chúng ta sẽ tạo ra các bảng vd: Tháng 1 năm 2010 hệ thống sẽ tự động tạo ra bảng tbl_Month_1_2010 Tháng 2 năm 2010 hệ thống sẽ tự động tạo ra bảng tbl_Month_2_2010 … Tháng 12 năm 2010 hệ thống sẽ tự động tạo ra bảng tbl_Month_12_2010 Như vậy làm sao để hệ thống có thể tự tạo ra các bảng tương ứng với năm và tháng như vậy ? Giải pháp của tôi là sử dụng SQL Job trong SQL Server, cái này bắt buộc bạn phải có Full quyền Administrator trên Server Database Các bước như sau:

B1: Trong SQL Server bạn kéo xuống dưới có phần SQL Server Agent bạn phải Start nó lên nếu nó đang Stop

B2: Tại đây bạn được yêu cầu nhập Name: Tên của Job ở đây tôi chọn là CreateTableLogging và owner là sa

Bạn chọn tiếp Database là tên Database bạn muốn thực thi Phần Command bạn gõ câu lệnh sau để tạo bảng động

DECLARE @strCreateTable AS VARCHAR(1000) SET @strCreateTable = ‘CREATE TABLE tbl_Month_’ SET @strCreateTable += Cast(MONTH(GETDATE()) as varchar) SET @strCreateTable += ‘_’ SET @strCreateTable += Cast(YEAR(GETDATE()) as varchar) SET @strCreateTable +='(‘ SET @strCreateTable +=’ID int PRIMARY KEY IDENTITY,’ SET @strCreateTable +=’Name nvarchar(50)’ SET @strCreateTable +=’)’ –PRINT(@strCreateTable) EXEC(@strCreateTable)

Sau đó bạn ấn OK

B4: Tiếp đến bạn chọn phần Schedules (để đặt lịch chạy cho Job) ban chọn New Schedule ở đây bạn được yêu cầu nhập Schedule Name cho Job tôi chọn là ScheduleCreateTable, Phần tần suất (Frequency) tôi chọn Occurs chạy vào ngày 15 hàng tháng (Monthly) lúc 12h đêm.

B5: sau đó bạn ấn OK để hoàn tất việc đặt lịch chạy cho Job và OK để hoàn tất Job và đây là kết quả

B7: Nếu nó báo thế này thì có nghĩa là Job của bạn đã chạy chính xác

B8: Kiểm tra

Như vậy mới hoàn thành xong phần tạo bảng bước tiếp chúng ta phải insert vào bảng đó thế nào

DECLARE @strValue AS NVARCHAR(50) DECLARE @strSQL AS VARCHAR(1000) SET @strValue += Cast(GETDATE() as varchar)

SET @strSQL = ‘INSERT INTO tbl_Month_’ SET @strSQL += Cast(MONTH(GETDATE()) as varchar) SET @strSQL += ‘_’ SET @strSQL += Cast(YEAR(GETDATE()) as varchar) SET @strSQL += ‘([Name]) VALUES(”’ SET @strSQL += @strValue SET @strSQL += ”’)’ –PRINT(@strSQL) EXEC(@strSQL)

trong bảng tbl_Month_xx_xxxx này tôi có 2 trường là ID (tự tăng) và Name sau khi insert xong dữ liệu của tôi sẽ là thế này

ID Name

Share this:

Twitter

Facebook

Like this:

Số lượt thích

Đang tải…

Tạo Job Schedule Backup Trong Oracle

DBMS_SCHEDULER là 1 package của Oracle (có từ version 10) cung cấp các procedure giúp tạo job.

 Tạo Oracle Job gồm 3 bước:

Tạo time schedule – dbms_scheduler.create_schedule

Tạo program declaration – dbms_scheduler.create program

Tạo job (conflation) – dbms_scheduler.create_job

Lưu ý

: login vào với vai trò sys và gán quyền cho user cần tạo job:

GRANT create any directory TO fhr; GRANT create procedure TO fhr; GRANT create table TO fhr;

GRANT create job TO fhr; GRANT manage scheduler TO fhr;

begin -- daily from Monday to Sunday at 22:00 (10:00 p.m.) dbms_scheduler.create_schedule -- run every hour, every day dbms_scheduler.create_schedule(   -- run every 5 minute, every day dbms_scheduler.create_schedule( -- run every minute, every day dbms_scheduler.create_schedule( -- run every Sunday at 18:00 (06:00 p.m.) dbms_scheduler.create_schedule end; begin -- Call a procedure of a database package dbms_scheduler.create_program ); end; begin -- Connect both dbms_scheduler parts by creating the final job dbms_scheduler.create_job end; begin -- change start time DBMS_SCHEDULER.SET_ATTRIBUTE( ); -- change repeat interval DBMS_SCHEDULER.SET_ATTRIBUTE( ); end; begin dbms_scheduler.run_job('JOB_COLLECT_SESS_DATA',TRUE); end; begin dbms_scheduler.disable('JOB_COLLECT_INST_INFO'); dbms_scheduler.enable('JOB_COLLECT_INST_INFO'); end; -- All jobs select * from user_scheduler_jobs; -- Get information to job select * from user_scheduler_job_log order by log_date desc; -- Show details on job run select * from user_scheduler_job_run_details; -- View all running jobs, Run the following query from SQL*Plus SELECT chúng tôi c.serial#, chúng tôi a.failures, to_char(a.this_date, 'mm/dd/yyyy hh:mi pm') startdatetime, b.what FROM dba_jobs_running a, dba_jobs b, v$session c WHERE chúng tôi = chúng tôi AND chúng tôi = chúng tôi order by a.this_date; -- View all jobs, Run the following query from SQL*Plus SELECT job, to_char(last_date, 'mm/dd/yyyy hh:mi pm') lastdate, to_char(next_date, 'mm/dd/yyyy hh:mi pm') nextdate, failures, broken, what FROM dba_jobs ORDER BY next_date;

Ý hay là khi muốn kill 1 job mà không muốn nó tự restart lại là hãy đánh dấu broken. Chạy lệnh sau từ SQL*Plus:

-- Võìi job_id lâìy týÌ câu truy vâìn “View all running jobs”. execute dbms_job.broken(job_id, true);

Sau đó, kill session bằng 1 trong 2 cách:

#1: (the best / fast way to kill a session)

-- Find the thread you want to kill SELECT sid, spid as thread, osuser, s.program FROM sys.v_$process p, sys.v_$session s WHERE chúng tôi = s.paddr; -- Run the following for Oracle on Linux, sid is the name given to the Oracle Instance -- (the name given in the chúng tôi fle) orakill sid thread

#2:

-- Run the following query from SQL*Plus -- sid and serial# came from the "View all running jobs" query. -- The problem with this option is it can sometimes take a long time to kill the session alter system kill session 'sid, serial#'

Để remove hoàn toàn job, chạy lệnh:

-- job_id is obtained from the "View all running jobs" query. execute dbms_job.remove(job_id)

Nếu chỉ muốn stop job để fix chứ không muốn remove hoàn toàn, hãy fix job và restart bằng lệnh:

-- job_id is obtained from the "View all running jobs" query execute dbms_job.broken(job_id, false);

Ghi chú: Khi nào job trở thành ‘broken’?

Oracle thực hiện job thành công sau 16 lần cố gắng thực hiện (có lỗi khi thực hiện job). hoặc

Người dùng đánh dấu job là ‘broken’, dùng proc DBMS_JOB.BROKEN.

Khi 1 job được đánh dấu là ‘broken’. Oracle sẽ không cố gắng thực hiện job nữa đến khi job được đánh dấu không còn ‘broken’ hoặc bị ép thực thi bằng lời gọi DBMS_JOB.RUN.

10. Tạo job mà không cần time scheduler và program declaration

begin dbms_scheduler.create_job ( end;

Hướng Dẫn Lập Lịch Tự Động Thực Hiện Câu Lệnh Sql Sử Dụng Sql Agent Jobs

Xin chào các bạn, bài viết hôm nay mình sẽ tiếp tục hướng dẫn các bạn cách lập lịch tự động thực hiện câu lệnh SQL sử dụng SQL Agent Jobs.

+ Yêu cầu:

Ví dụ: các bạn muốn thực hiện công việc như sau.

Đầu tiên các bạn tạo lệnh tăng ca cho nhân viên, nhưng các bạn muốn là vào lúc 12h00 thì các lệnh này mới được tự động kích hoạt.

Để thực hiện công việc này, SQL Agent Jobs sẽ giúp các bạn lập lịch dễ dàng.

Để thực hiện các bạn cần kích hoạt dịch vụ SQL Agent trong services.msc

USE msdb go CREATE procedure [dbo].[sp_add_job_quick] @job nvarchar(128), @mycommand nvarchar(max), @servername nvarchar(28), @startdate nvarchar(8), @starttime nvarchar(8) as -- Thêm một jobs EXEC dbo.sp_add_job @job_name = @job ; EXEC sp_add_jobstep @job_name = @job, @step_name = N'process step', @subsystem = N'TSQL', @command = @mycommand -- Cấu hình thời gian chạy job exec sp_add_jobschedule @job_name = @job, @name = 'MySchedule', @freq_type=1, @active_start_date = @startdate, @active_start_time = @starttime -- Thêm job vào sqlserver EXEC dbo.sp_add_jobserver @job_name = @job, @server_name = @servername

Sau khi các bạn, chạy procedure xong, bây giờ bạn muốn lập lịch chạy câu lệnh SQL server, bạn sẽ thực hiện như sau:

exec dbo.sp_add_job_quick @job = 'myjob', -- Tên job của bant @mycommand = 'UPDATE tbl_lenhtangca SET status=1', -- Gõ câu lệnh T-SQL @servername = 'serverName', -- Nhập tên server name, nếu server bạn chạy ở local, các bạn có thể thay bằng đoạn sau @servername=@@Servername @startdate = '20241231', -- Ngày 31/12/2024 @starttime = '070000' -- Thời gian, 07:00:00 -- https://laptrinhvb.net

Để xóa một jobs các bạn thực hiện câu lệnh sau:

EXEC sp_delete_job @job_name = N'myjob' ; -- nhập tên job của bạn vào GO

Liệt kê danh sách tất cả các bạn đang có trong hệ thống server của bạn.

SELECT job_id, [name], * FROM msdb.dbo.sysjobs;

HAVE FUN 🙂

Khởi Tạo Database Trong Sql Server

Dẫn nhập

Trong bài lần trước, chúng ta đã tìm hiểu SƠ LƯỢC VỀ SQL và hướng dẫn cài đặt SQL MANAGEMENT STUDIO cùng công cụ hỗ trợ. Bạn đã chuẩn bị để bắt đầu chứ?

Ở bài này, Kteam sẽ hướng dẫn bạn cách KHỞI TẠO DATABASE trong SQL Server. Chúng ta bắt đầu nào!

Nội dung chính

Trong bài này chúng ta sẽ cùng tìm hiểu một số vấn đề

Database trong SQL

Khởi tạo Database trong SQL Server

Xóa Database trong SQL Server

Một số lưu ý trong SQL

Comment trong SQL

Lưu Query chứa lệnh.

Database trong SQL (Cơ sở dữ liệu)

CSDL dùng để tổ chức và truy xuất những thông tin cần thiết, một cách tối đa hóa hỗ trợ hoạt động quản lý kinh doanh, nhân sự, điểm,….

Database (Cơ sở dữ liệu) là gì?

Một Database là tập hợp của rất nhiều dữ liệu phản ánh thế giới thực hoặc một phần của thế giới thực.

Có cấu trúc, được lưu trữ tuân theo quy tắc dựa trên lý thuyết toán học.

Được các Hệ cơ sở dữ liệu khai thác xử lý, tìm kiếm, tra cứu, sửa đổi, bổ sung hay loại bỏ dữ liệu trong Database.

Ở mức logic, một DATABASE gồm nhiều bảng (TABLE), mỗi bảng được xác định bằng một tên, bảng chứa dữ liệu có cấu trúc và các ràng buộc (CONSTRAINT) định nghĩa trên các bảng. Ngoài ra, Database còn có khung nhìn (VIEW), các thủ tục/ hàm….

Ở mức vật lý, DATABASE của SQL Server được lưu trữ dưới 3 loại tập tin:

Tập tin dữ liệu (Data-file): gồm 1 tập tin lưu trữ dữ liệu chính (*.mdf) chứa các dữ liệu khởi đầu và các tập tin dữ liệu thứ cấp (*.ndf) chứa dữ liệu phát sinh hoặc không lưu hết trong tập tin lưu trữ chính.

Tập tin nhật ký thao tác (*.ldf) chứa thông tin giao tác, thường dùng để khôi phục Database nếu xảy ra sự cố.

Tại sao phải tạo Database?

Như việc truy xuất, đóng mở tập tin thông thường, bạn cần tạo file lưu trữ trước khi truy xuất. Tương tự vậy, bạn cần tạo một DATABASE để lưu trữ dữ liệu trong SQL Server để tiện cho việc truy vấn sau này.

SQL Server sẽ giúp bạn quản lý, truy xuất những dữ liệu này một cách có cấu trúc và dễ dàng hơn.

Khởi tạo Database trong SQL Server Tạo Database bằng giao diện (UI)

Cấu trúc đặt tên nên sử dụng là

Lưu ý:

Mỗi Database chỉ tồn tại với một TÊN DUY NHẤT, không trùng lặp với tên các Database sẳn có.

Chữ viết hoa hay thường không gây ảnh hưởng đến cú pháp trong SQL.

Tạo Database bằng giao diện có tên SQLDBUI

Tạo Database bằng code

Hộp thoại Message xuất hiện báo lệnh khởi tạo thành công.

Ví dụ:

CREATE DATABASE SQLDBQUERY Xóa Database trong SQL Server

Để xóa một Database tồn tại trong danh sách ta dùng hai cách

Cách 1 Cách 2 Một số lưu ý trong SQL Database đã tồn tại

Trong quá trình tạo Database bằng UI, nếu bạn gặp phải lỗi sau thì có nghĩ tên Database bạn muốn khởi tạo trùng với tên Database đã có sẵn trong SQL Server.

Tương tự, khi bạn khởi tạo một Database đã tồn tại trong danh sách bằng code. Hộp thoại Message sẽ báo lỗi như sau:

Giải pháp là thay đổi tên Database khác với các tên Database đã có trong danh sách để việc khởi tạo được hoàn tất.

Không tìm thấy database vừa khởi tạo hoặc vẫn nhìn thấy database đã xóa trong danh sách

Trong một số trường hợp, có thể bạn sẽ không nhìn thấy Database vừa khởi tạo, hoặc vẫn thấy tên của Database đã xóa trong danh sách Database bên trái sau khi thực thi lệnh thành công.

Thực thi lệnh trong Query

Trong quá trình thực thi lệnh (Excute) trong Query:

Khi bạn bôi đen dòng lệnh nào thì chỉ dòng lệnh đó được thực thi.

Nếu không bôi đen dòng lệnh cần thực thi mà nhấn Excute (F5) thì toàn bộ lệnh trong query đó đều được thực thi. Việc nào dễ gây ra lỗi trùng lặp dữ liệu, hoặc không thể thực thu lệnh, câu lệnh bị lỗi,…

Comment trong SQL

Để tạo COMMENT trong SQL, chúng ta sử dụng cú pháp

Lưu query chứa lệnh

Query được lưu như một file thông thường. Chọn Save hoặc phím tắt Ctrl + S

Kết

Trong bài này, chúng ta đã biết cách KHỞI TẠO VÀ THAO TÁC TRÊN DATABASE.

Bài sau, chúng ta sẽ tìm hiểu cách KHỞI TẠO, XÓA,SỬA TABLE TRONG SQL SERVER.

Tải xuống Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Khởi tạo Database trong SQL Server dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện chúng tôi để nhận được sự hỗ trợ từ cộng đồng.

Tạo Bảng Với Create Table Kiểu Dữ Liệu Cột Trong Sql

Tạo bảng SQL CREATE TABLE

Một cơ sở dữ liệu chứa trong nó hàng trăm bảng, mỗi bảng có chứa trong nó các quy tắc riêng nàm trong mô tả cơ sở dữ liệu. Bảng xây dựng theo cấu trúc gồm cột và hàng. Các cột của bảng tương tứng lưu trữ nhiều kiểu dữ liệu khác nhau, có thể là số, chữ, ngày tháng thậm chí là file.

Mệnh đề CREATE TABLE để tạo ra bảng mới. Quy tắc cơ bản nó phải đưa ra định nghĩa tên các cột và kiểu dữ liệu của cột. Cú pháp cơ bản nhất như sau:

CREATE TABLE table_name ( column_name1 data_type(size), column_name2 data_type(size), column_name3 data_type(size), .... columnN data_type(size) )

column_names là tên các cột muốn tạo trong bảng

data_type tham số định nghĩa kiểu dữ liệu mà cột lưu trữ, ví dụ int lưu trữ số nguyên

size chỉ ra chiều dài lớn nhất của dữ liệu.

Ví dụ 1: Tạo bảng

Tạo bảng có tên là Persons, bảng đó có các cột: PersionID dữ liệu số nguyên, LastName, FirstName, Address, City là text dài 255 ký tự

CREATE TABLE Persons ( PersonIDint, LastNamevarchar(255), FirstNamevarchar(255), Addressvarchar(255), Cityvarchar(255) );

Sau khi thi hành lệnh trên, SQL sẽ tạo ra bảng, bạn có thể dùng các lệnh SQL khác nhau đã biết để kiểm tra.

Ở đây có một file CSDL mẫu dạng SQLite, bạn có thể tải về nghiên cứu, thực hành: CSDL SQLite mẫu. Hoặc sử dụng trực tiếp công cụ Online: Chạy SQL

Trong câu lệnh trên bạn có thấy đã sử dụng int và varchar là kiểu dữ liệu cho cột

Kiểu dữ liệu trong SQL Kiểu dữ liệu trong MySQL

CHAR(size)

Lưu trữ chuỗi chiều dài cố định (size), tối đa 255 ký tự.

VARCHAR(size)

TINYTEXT

Chuỗi ký tự với chiều dài tối đa 255 chữ

TEXT

Chuỗi ký tự, dài tối đa 65,535 chữ

BLOB

Lưu trữ BLOBs (Binary Large OBjects). Lưu giữ tới 65,535 bytes dữ liệu.

MEDIUMTEXT

Chuỗi ký tự, dài tối đa 16,777,215

MEDIUMBLOB

Lưu trữ BLOBs (Binary Large OBjects). Lưu được 16,777,215

LONGTEXT

Chuỗi ký tự, dài tới 4,294,967,295 chữ

LONGBLOB

BLOBs (Binary Large OBjects). Lưu tới 4,294,967,295 byte (4GB)

ENUM(x,y,z,etc.)

Cho phép bạn lưu trữ dữ liệu kiểu ENUM, giá trị mộ tả bở ENUM có thể tới 65535 giá trị khác nhau. Nếu giá trị chèn vào không thuộc danh sách giá trị, một giá trị trống được thay thế. Ví dụ bạn định nghĩa ENUM(‘red’,’green’,’blue’) khi tạo cột, thì cột đó có thể gán các gí trị ‘red’, ‘green’, ‘blue’

SET

Tương tự ENUM nhưng mô tả tối đa 64 giá trị

DATE()

Ngày dạng YYYY-MM-DD

DATETIME()

Ngày giờ dạng YYYY-MM-DD HH:MI:SS

TIMESTAMP()

Thời gian UNIX

Kiểu dữ liệu SQLite

Tham khảo danh sách đầy đủ các kiểu dữ liệu SQLite hỗ trợ tại: SQLite

Kiểu dữ liệu MS SQL Server

Tham khảo danh sách đầy đủ các kiểu dữ liệu MS SQL Server hỗ trợ tại: MS SQL Server

Kiểu dữ liệu MS Access

Tham khảo danh sách đầy đủ các kiểu dữ liệu MS Access hỗ trợ tại: MS Access

Khóa chính Primary Key

Khóa chính là giá trị duy nhất cho một bản ghi (dòng) trong bảng. Một bảng có thể định nghĩa một cột là khóa chính Primary, Khóa chính giúp cho việc tìm kiếm, lọc dữ liệu.

Để thiết lập khóa chính khi tạo bảng sử dụng thêm: PRIMARY KEY(tên-cột)

Ví dụ tạo bảng trên, sửa lại và thiết lập PersonID là khóa chính

CREATE TABLE Persons ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY(PersonID) );

Chú ý nếu bảng Persons đã có trong database! Bạn có thể xóa nó bằng DROP để tạo lại (hoặc thay đổi cấu trúc bảng đang tồn tại để tránh mất dữ liệu với TABLE ALTER)

Sau khi chạy lệnh trên, bảng được tạo và lức này bạn có thể sử dụng INSERT INTO để chèn dữ liệu