Chủ Nhật, 20 tháng 8, 2017

How To Create an SSL Certificate on Nginx

1. Install Nginx
sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
Note: maybe user nginx repo
Create file repo: /etc/yum.repo.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1


2.Create the SSL Certificate
sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
openssl: This is the basic command line tool for creating and managing OpenSSL certificates, keys, and other files.
req: This subcommand specifies that we want to use X.509 certificate signing request (CSR) management. The "X.509" is a public key infrastructure standard that SSL and TLS adheres to for its key and certificate management. We want to create a new X.509 cert, so we are using this subcommand.
-x509: This further modifies the previous subcommand by telling the utility that we want to make a self-signed certificate instead of generating a certificate signing request, as would normally happen.
-nodes: This tells OpenSSL to skip the option to secure our certificate with a passphrase. We need Nginx to be able to read the file, without user intervention, when the server starts up. A passphrase would prevent this from happening because we would have to enter it after every restart.
-days 365: This option sets the length of time that the certificate will be considered valid. We set it for one year here.
-newkey rsa:2048: This specifies that we want to generate a new certificate and a new key at the same time. We did not create the key that is required to sign the certificate in a previous step, so we need to create it along with the certificate. The rsa:2048 portion tells it to make an RSA key that is 2048 bits long.
-keyout: This line tells OpenSSL where to place the generated private key file that we are creating.
-out: This tells OpenSSL where to place the certificate that we are creating.

The entirety of the prompts will look something like this:

Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Bouncy Castles, Inc.
Organizational Unit Name (eg, section) []:Ministry of Water Slides
Common Name (e.g. server FQDN or YOUR name) []:your_domain.com
Email Address []:admin@your_domain.com

3. Configure Nginx to Use SSL
Your server block may look something like this:

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.html index.htm;

        server_name your_domain.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

The only thing we would need to do to get SSL working on this same server block, while still allowing regular HTTP connections, is add a these lines:

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        listen 443 ssl;

        root /usr/share/nginx/html;
        index index.html index.htm;

        server_name your_domain.com;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        location / {
                try_files $uri $uri/ =404;
        }
}
When you are finished, save and close the file.
More configure:
# SSL
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_timeout 5m;
ssl_session_cache  shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
ssl_stapling on;
Creat dhparam :(Diffie-Hellman)

openssl dhparam 2048 -out /etc/nginx/ssl/dhparam.pem

Add to config file :
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

Now, all you have to do is restart Nginx to use your new settings:

sudo service nginx restart


Test your setup
http://server_domain_or_IP
https://server_domain_or_IP 


4. Install Comodo SSL Certificate
mkdir -p /etc/nginx/ssl/
Create server private key:
$ openssl genrsa -out /etc/nginx/ssl/10tut.com.key 2048
Generate CSR Key
$ openssl req -new -key /etc/nginx/ssl/10tut.com.key -out /etc/nginx/ssl/10tut.com.csr
$ cat /etc/nginx/ssl/10tut.com.csr
-----BEGIN CERTIFICATE REQUEST-----
...CERTIFICATE...
-----END CERTIFICATE REQUEST-----
Order Certificate https://ssl.comodo.com/free-ssl-certificate.php

Read More

Thứ Bảy, 19 tháng 8, 2017

How to Install PHP 5.6 or PHP 7.1 on Ubuntu 16.04, 14.04 using PPA

Install PHP 5.6 on Ubuntu

Use the following set of command to add PPA for PHP 5.6 in your Ubuntu system and install PHP 5.6.
$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get update
$ sudo apt-get install -y php5.6
apt-get install libapache2-mod-php5.6 php5.6-cli php5.6-common php5.6-curl php5.6-gd php5.6-mysql php5.6-mysqli php5.6-json php5.6-mcrypt php5.6-odbc php5.6-xmlrpc php5.6-mbstring php5.6-soap php5.6-xml -y

Switch Between PHP Version’s

If you have installed multiple php versions and want to use different than default. Use following steps to switch between php5.6 and php7.1 version. You can use the same command for other php versions.

From PHP 5.6 => PHP 7.1

Apache:-

$ sudo a2dismod php5.6
$ sudo a2enmod php7.1
$ sudo service apache2 restart

CLI:-

$ update-alternatives --set php /usr/bin/php7.1

Read More

Set static IP Ubuntu

sudo nano /etc/network/interfaces
and paste this under # The primary network interface:
auto enp0s25
iface enp0s25 inet static
address 192.168.0.16
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.4.4 8.8.8.8
sudo ip addr flush enp0s25
sudo systemctl restart networking.service
Then verify it is correct:
ip add
Read More

How to reset lost user password ubuntu on VMWare server

How to reset lost user password ubuntu on VMWare server

edit the virtual machine's configuration (.vmx) and add or edit this option:
bios.bootDelay = "15000"
Reset Your Ubuntu Password
Reboot your computer, and then as soon as you see the GRUB Loading screen, make sure to hit the ESC key so that you can get to the menu.

If you have the option, you can choose the “recovery mode” item on the menu, usually found right below your default kernel option.
Then choose “Drop to root shell prompt” from this menu.

mount -rw -o remount /
passwd /


Read More

Thứ Năm, 17 tháng 8, 2017

How to Fix _default_ VirtualHost overlap on port 80, the first has precedence

Question :
I running wordpress blog on apache web server on Virtual private server (VPS). I had the problem when i restarted the httpd service on my VPS. This error came after i setup multiple domain on my httpd config file, meaning i used more than one VirtualHost on httpd.conf :
[root@vps ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: [Thu May 01 00:01:03 2014] [warn] _default_ VirtualHost overlap on port 80, the first has precedence
                                                           [  OK  ]
Solution :
After a few hours troubleshooting and googling to internet, i managed to fix the issue. When we decide to run multiple domain in one web server or web hosting world called it shared hosting service, you need to configure name-based virtual hosts on your apache httpd service. NameVirtualhost is require to be included in httpd.conf file as below :
..
..
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80
#
# NOTE: NameVirtualHost cannot be used without a port specifier
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
#
..
..
Then restart the apache httpd. Issue resolved!
Read More

Thứ Tư, 16 tháng 8, 2017

Các lệnh cơ bản mongodb

Sử dụng mongodb cũng chỉ cần thông qua một số câu lệnh đơn giản, chủ yếu là insert, update, find và remove.
1. Kết nối đến mongodb.
Tương tự khi sử dụng sql thì phải kết nối đến database, mongodb cũng vậy:
$m = new Mongo(“mongodb://${username}:${password}@localhost”);
Lệnh này khởi tạo kết nối đến server cài đặt mongodb, mặc định nếu không có tham số sẽ là localhost với cổng port = 27017.
Tiếp theo là lệnh chọn database
$db = $m->google; //Với database có tên “google”;
Tiếp theo chọn collection (collection tương tự như chọn một bảng trong cơ sở dữ liệu quan hệ sql):
$collection = $db->user;
Vậy là quá trình kết nối đã hoàn tất, để nắm rõ hơn quá trình này thì các bạn có thể truy cập trực tiếp vào trang chủ php.net theo đường dẫn: http://www.php.net/manual/en/mongo.connecting.php
2. Lệnh insert:
Lệnh được sử dụng để thêm dữ liệu mới vào collection tương tự như lệnh insert trong sql
Ví dụ: thêm một bản ghi về user vào collection user đã kết nối ở trên:
$aryUser = array(‘username’=>’google’, ‘age’=>27, ‘phone’=>’098888888’);
$collection ->insert($aryUser);
3. Lệnh update:
Khi muốn thay đổi thong tin của một bản ghi thì các bạn có thể dùng lệnh update, tương tự lệnh update trong sql
Ví dụ: thay đổi tuổi của user có username là google:
$aryUser = array(‘username’=>’google’);
$set = array( ‘$set’ => array(‘age’ => 28) );
$collection->update($aryUser, $set);
4. Lệnh find:
Được dùng để truy vấn vào collection để lấy các bản ghi cần thiết.
Ví dụ: lấy thông tin user có username là ‘google’
$infoUser = $collection->find(array(‘username’=>’google’));
foreach ($infoUser as $user) {
print_r($user);
}
Kết quả sẽ là:
Array ( [_id] => MongoId Object ( [$id] => … ) [username’] => ’google’ [age’] => 28 [phone]=>098888888)
Trên đây là một số lệch cơ bản hay dùng khi thao tác với cơ sở dữ liệu NoSQL MongoDB, để nắm được rõ hơn cá lệnh khi chuyển từ SQL sang MongoDB các bạn có thể tham khảo bảng sau:
SQL Statement
Mongo Statement
CREATE TABLE USERS (a Number, b Number)implicit; can also be done explicitlywithdb.createCollection(“mycoll”)
ALTER TABLE users ADD …implicit


INSERT INTO USERS VALUES(3,5)db.users.insert({a:3,b:5})


SELECT a,b FROM usersdb.users.find({}, {a:1,b:1})
SELECT * FROM usersdb.users.find()
SELECT * FROM users WHERE age=33db.users.find({age:33})
SELECT a,b FROM users WHERE age=33db.users.find({age:33}, {a:1,b:1})
SELECT * FROM users WHERE age=33 ORDER BY namedb.users.find({age:33}).sort({name:1})
SELECT * FROM users WHERE age>33db.users.find({age:{$gt:33}})
SELECT * FROM users WHERE age!=33db.users.find({age:{$ne:33}})
SELECT * FROM users WHERE name LIKE “%Joe%”db.users.find({name:/Joe/})
SELECT * FROM users WHERE name LIKE “Joe%”db.users.find({name:/^Joe/})
SELECT * FROM users WHERE age>33 AND age<=40db.users.find({‘age’:{$gt:33,$lte:40}})
SELECT * FROM users ORDER BY name DESCdb.users.find().sort({name:-1})
SELECT * FROM users WHERE a=1 and b=’q’db.users.find({a:1,b:’q’})
SELECT * FROM users LIMIT 10 SKIP 20db.users.find().limit(10).skip(20)
SELECT * FROM users WHERE a=1 or b=2db.users.find( { $or : [ {a:1} , {b:2} ] } )
SELECT * FROM users LIMIT 1db.users.findOne()
SELECT order_id FROM orders o, order_line_items li
WHERE li.order_id=o.order_id AND li.sku=12345
db.orders.find({“items.sku”:12345},{_id:1})
SELECT customer.name FROM customers,orders
WHERE orders.id = “q179”
AND orders.custid = customer.id
var o = db.orders.findOne({_id:”q179″});var name = db.customers.findOne({_id:o.custid})


SELECT DISTINCT last_name FROM usersdb.users.distinct(‘last_name’)
SELECT COUNT(*y)FROM usersdb.users.count()
SELECT COUNT(*y)FROM users where AGE > 30db.users.find({age: {‘$gt’: 30}}).count()
SELECT COUNT(AGE) from usersdb.users.find({age: {‘$exists’: true}}).count()


CREATE INDEX myindexname ON users(name)db.users.ensureIndex({name:1})
CREATE INDEX myindexname ON users(name,ts DESC)db.users.ensureIndex({name:1,ts:-1})


EXPLAIN SELECT * FROM users WHERE z=3db.users.find({z:3}).explain()


UPDATE users SET a=1 WHERE b=’q’db.users.update({b:’q’},{$set:{a:1}},false,true)
UPDATE users SET a=a+2 WHERE b=’q’db.users.update({b:’q’},{$inc:{a:2}},false,true)


DELETE FROM users WHERE z=”abc”db.users.remove({z:’abc’});
Read More

Thứ Ba, 15 tháng 8, 2017

Kiến trúc Oracle Database 11g

Kiến trúc Oracle Database 11g

Xét 1 server Oracle cơ bản, chúng ta có 3 kiến trúc:
Kiến trúc bộ nhớ (Memory Structure)
+ Kiến trúc process (Process Structure)   
==> Instance
Kiến trúc lưu trữ (Storage Structure) ==> Database

Với nonclustered database system, mỗi database sẽ chạy trên 1 instance. Trên 1 server, bạn tạo ra 3 database, thì sẽ có 3 instance, mỗi instance chạy cho 1 database.

Với clustered database system, mỗi database sẽ chạy trên nhiều instance. VD bạn có thể có 3 server cùng chạy 1 database, mỗi server là 1 instance.

Kiến trúc bộ nhớ của Oracle gồm 2 phần:

– System Global Area (SGA): bao gồm Shared pool, database buffer cache, redo log buffer... chứa thông tin về hoạt động database, thông tin về các session, process, code thực thi, dữ liệu đọc từ phần lưu trữ lên…

– Program Global Area (PGA): phần bộ nhớ riêng cho mỗi server process (user session) hay background process.

System Global Area (SGA)

SGA là phần bộ nhớ cực kỳ quan trọng trong Oracle instance. SGA chứa các dữ liệu, thông tin hoạt động của database, và được dùng chung cho các server/background processes.

Trong SGA chia ra làm nhiều phần bộ nhớ nhỏ hơn, bao gồm:
Shared Pool

Shared pool bao gồm 1 số phần bộ nhớ nhỏ như sau:
– Library cache: chứa những câu lệnh SQL, PL/SQL của các user, cũng như parse tree, execution plan của các câu lệnh. Do là bộ nhớ chia sẻ, nên có thể chứa các câu lệnh giống nhau của các session, cũng như khi đã có execution plan cho 1 câu lệnh, lần tiếp theo câu lệnh đó được chạy sẽ có execution plan để chạy luôn, tiết kiệm thời gian phân tích.
– Data dictionary: chứa các database table của user SYS và SYSTEM, là các table chứa các thông tin về database, cấu trúc database, thông tin về user… để hỗ trợ trong việc thực thi các câu lệnh. Nếu phần này nhỏ, việc đọc thông tin từ data dictionary sẽ tốn thêm I/O, gọi là recursive calls
– Server Result Cache: gồm SQL query result cache và PL/SQL function result cache, chứa 1 số kết quả thực thi để có thể dùng lại cho các câu lệnh tương tự.

Database Buffer Cache
Database buffer cache là phần bộ nhớ để chứa các block dữ liệu đọc từ đĩa lưu trữ lên. Khi 1 session cần dữ liệu, Oracle sẽ kiểm tra có trong Database buffer cache chưa. Nếu có rồi (cache hit), thì đọc luôn trong buffer cache. Nếu chưa có (cache miss), Oracle sẽ phải đọc từ thiết bị lưu trữ lên.

Buffer trong Database buffer cache được quản lý theo thuật toán LRU (Least Recently Used). Những buffer cũ ít xài sẽ được xóa dữ liệu đi để lấy chỗ cho dữ liệu mới cần thiết.

Ngoài Database buffer cache, phần KEEP buffer pool được dùng để chứa những dữ liệu cần sử dụng lâu hơn, phần RECYCLE buffer pool được dùng để chứa những dữ liệu cần xóa nhanh hơn, phần nK buffer cache sẽ dùng để chứa dữ liệu từ những block khác size mặc định (vd 16k, 32k).

Redo Log Buffer
Redo log buffer là phần bộ nhớ chứa những thay đổi trên database, do các câu lệnh DML, DDL hay do các hoạt động nội bộ trong database. Khi Redo log buffer đầy 1/3 hoặc cứ sau mỗi 3 giây, Log writer process sẽ ghi vào Redo log files, để lấy chỗ cho những nội dung thay đổi mới.

Do Redo log buffer chứa những thay đổi trên database, nên để đảm bảo toàn vẹn dữ liệu, 1 transaction chỉ được coi là đã commit khi đã ghi những thay đổi trong Redo log buffer vào Redo log files, đảm bảo nếu có sự cố có thể recover được những thay đổi gần nhất.

Large Pool

Large pool có khả năng cấp phát 1 lượng lớn block buffer, dùng cho các hoạt động lớn trong database, như các transaction liên quan tới nhiều database, các parallel query, backup/restore, các hoạt động I/O của server process, Advanced Queuing memory table…

Large pool không dùng thuật toán LRU để quản lý.


Java Pool

Phần bộ nhớ này được dùng để lưu tất cả những code và data Java trong session của user, cũng như của máy ảo Java (JVM). Khi chạy export/import chẳng hạn, phần bộ nhớ này sẽ được sử dụng.

Streams Pool

Streams Pool phục vụ cho Oracle Streams. Nếu cấu hình Streams Pool bằng 0, phần bộ nhớ cho các hoạt động Streams set được cấp phát từ Shared pool và tối đa là 10% Shared pool.

Program Global Area (PGA)

Có 1 phần bộ nhớ trong hệ thống chứa thông tin về session, gọi là User Global Area (UGA).

Trong trường hợp instance dùng cấu hình shared server, UGA sẽ nằm trong SGA luôn.

Còn trường hợp instance cấu hình dedicated server, UGA sẽ nằm trong PGA.



PGA là phần bộ nhớ riêng cho mỗi server process. Ngoài UGA, PGA còn chứa Private SQL Area và SQL Work Areas.

– Private SQL Area: chứa các bind variables, thông tin về câu query (ví dụ như số dòng khi thực hiện full table scan)…

– SQL Work Areas: vùng bộ nhớ này dùng cho các hoạt động khác liên quan đến câu query như:

    sort area dùng cho việc sắp xếp
    hash area dùng cho thao tác hash join
    bitmap merge area cho thao tác merge bitmap từ bitmap index scan…



Ngoài SGA và PGA, Oracle instance còn sử dụng Software code area, là 1 phần bộ nhớ riêng biệt, chứa code thực thi của Oracle. Phần bộ nhớ này là read-only, thường cố định và chỉ thay đổi khi update/reinstall software.


Các tiến trình thực hiện các hoạt động trong hệ thống.

Khi user mở 1 tool ứng dụng lên, chẳng hạn như SQL*Plus, Toad… và kết nối đến database, ta gọi đó là user process. Mấy cái đó thì khỏi nói hen.
Phần process chúng ta sẽ tìm hiểu ở đây là các process chạy trên instance, bao gồm server process và các background process.

Server process

Server process là các process được sinh ra để phục vụ request từ user process.

– Trường hợp cấu hình Dedicated server: mỗi user process sẽ được phục vụ bởi 1 server process.

– Trường hợp cấu hình Shared server: các shared server process nằm chung trong 1 pool, dispatcher sẽ chuyển các request đến pool này, từ đó các server process chia nhau phục vụ client request, phục vụ xong lại quay về pool nằm chờ việc

Vậy công việc của server process là gì? Cơ bản có 3 nhiệm vụ:

    Phân tích (parse) và chạy các câu lệnh SQL từ client (user process)
    Đọc dữ liệu cần thiết từ disk lên database buffer cache nếu chưa có
    Trả kết quả về cho client
Background process

Cùng với các server process "chạy vòng ngoài", Oracle Database còn có các background process, là các process thực hiện các công việc nội tại database: quản lý memory, process, quản lý I/O, giao tiếp giữa các thành phần…

Database Writer Process (DBWn)

DBW có nhiệm vụ ghi những dữ liệu đã thay đổi (dirty buffer) xuống disk. Có thể cấu hình tối đa 20 process DBW (từ DBW0 -> DBW9 và DBWa -> DBWj).

Thường DBW sẽ ghi dữ liệu khi Database buffer cache gần đầy, thiếu chỗ trống, trong 1 số trường hợp như khi alter tablespace offline hoặc read only, hoặc ghi để gọi checkpoint.

DBW sẽ ghi dữ liệu theo batch (ghi multiblock) để tăng performance.

Log Writer Process (LGWR)

Log Writer Process chịu trách nhiệm ghi dữ liệu từ redo log buffer cache vào redo log file. LGWR là 1 trong những process hoạt động nhiều nhất, do phải ghi dữ liệu liên tục. LGWR ghi dữ liệu mỗi 3 giây, hoặc khi:

– Redo log buffer đầy 1/3

– User commit transaction, hoặc trước khi DBWn ghi dirty buffer vào disk (để đảm bảo không mất dữ liệu)

Archiver Process (ARCn)

Process này chỉ có nếu database chạy ở ARCHIVE LOG mode. Sau khi switch log, process này chịu trách nhiệm ghi redo log file ra file archive để lưu trữ. Ngoài ra process này còn thực hiện chuyển dữ liệu qua hệ thống standby nếu có cấu hình.

Checkpoint Process (CKPT)

Process này cập nhật checkpoint (thông tin về System Change Number (SCN)) trong control file và data header. CKPT cập nhật checkpoint khi redo log đầy, hoặc trước khi DBW ghi dữ liệu, để đánh dấu vị trí cần khôi phục khi instance crash (đảm bảo tất cả dữ liệu trước SCN đó đã ghi vào disk, đánh dấu điểm thực hiện quá trình instance recovery). Do đó giúp làm giảm thời gian chạy instance recovery (MTTR – Mean Time to Recovery).

System Monitor Process (SMON)

Khi hệ thống bị crash (vd cúp điện, 1 process khác chết làm instance crash) và được start lại, SMON sẽ thực hiện recovery, cập nhật dữ liệu từ redo log file vào datafile. Ngoài ra SMON còn dọn dẹp temporary segment trong các tablespace nếu không còn sử dụng nữa.

Process Monitor Process (PMON)

PMON làm nhiệm vụ theo dõi các user process. Nếu 1 user process không còn kết nối đến database nữa, nó sẽ rollback transaction của user nếu còn transaction dang dở, release lock của user nếu có, “thả” những block của user trong buffer cache ra, và xóa process ID khỏi danh sách active process.

PMON còn theo dõi dispatcher và server process, restart lại nếu chúng bị lỗi.

Ngoài ra, PMON đăng ký thông tin dispatcher, instance với listener để phục vụ cho việc nhận kết nối từ user.

Recoverer Process (RECO)

Process này theo dõi các transaction liên quan giữa database hiện tại với các database khác (distributed transaction). Trong trường hợp distributed transaction lỗi, RECO sẽ rollback transaction và dọn dẹp những thông tin liên quan đến  transaction đó trên các database.

Các process khác
Trên đây là các process cơ bản của instance database. Ngoài ra ta còn gặp 1 số background process khác trên hệ thống như:

– CJQ0 – Job Queue Coordinator: lấy job từ data dictionary và tạo ra các Job slave process để chạy job
– Jnnn – Job Slave process: các process con của CJQ0 thực hiện chạy job
– QMNC – AQ Coordinator Process: quản lý các hoạt động liên quan đến Advanced Queue, Oracle Streams
– Qnnn – AQ Slave process: các process con của QMNC thực hiện các công việc liên quan
– SMCO – Space Management Coordinator Process: quản lý dung lượng
– Wnnn – Space Management Slave process: các process con của SMCO thực hiện các công việc liên quan
– PSP0 – Process Spawner Process: process này tạo ra các background process sau khi instance startup
– MMAN – Memory Manager Process: quản lý instance memory
– MMON – Manageability Monitor Process: thực hiện các công việc liên quan đến quản trị, như AWR, ADDM…
– MMNL – Manageability Monitor Lite Process: thực hiện các công việc liên quan đến ASH, metrics…
– VKTM – Virtual Keeper of Time Process: quản lý giờ giấc, thời gian của instance
– DIAG – Diagnostic Capture Process: tạo ra các diagnostic dump
– DBRM – Database Resource Manager Process: quản lý các công việc liên quan đến Resource plan
– DIA0 – Diagnostic Process: xác định và giải quyết deadlock, sự cố treo trong hệ thống
– Pnnn – Parallel Query Slave Process: các process thực hiện query, DML, DDL parallel

ASM Background process

Trong trường hợp sử dụng ASM cho hệ thống lưu trữ, sẽ có thêm 1 số background process như:

    ASMB – ASM Background Process: quản lý ASM instance
    RBAL – ASM Rebalance Master Process: quản ly hoạt động rebalance trên ASM instance, và quản lý diskgroup trên database instance
    GMON – ASM Disk Group Monitor Process: monitor ASM diskgroup
    Onnn – ASM Connection Pool Process: quản lý giao tiếp với ASM instance

Có những process ít quan trọng và có thể được tạo lại khi bị crash, như ARC, CJQ0, MMON… Có những process là quan trọng và bắt buộc phải có, nếu process bị crash thì instance sẽ bị crash ngay, chẳng hạn như SMON, PMON, DBWR, …


Kiến trúc lưu trữ trong Oracle Database.
logical structure và physical structure
Phyical structure – kiến trúc vật lý – chính là các tập tin, là những gì chúng ta có thể thấy được trực tiếp trên hệ điều hành, được lưu trữ trên hệ thống lưu trữ (có thể là local disk, SAN, NAS…, disk có thể format theo file system như ext3, hay format thành ASM disk…), bao gồm:

Data files

Đúng như tên gọi, data files là các tập tin chứa dữ liệu của database, bao gồm cả dữ liệu của user hay ứng dụng, data dictionary của Oracle database.

Mỗi data file chỉ thuộc về 1 tablespace, có thể tự tăng kích thước (AUTOEXTEND) và tối đa đến 1 giới hạn (MAXSIZE) nếu ta cấu hình khi tạo.

Data file có thể là:

    Datafile: các tập tin chứa dữ liệu
    Tempfile: các tập tin chứa dữ liệu tạm thời phục vụ cho hoạt động của database
    Undo datafile: các tập tin chứa dữ liệu undo phục vụ cho hoạt động của database

Các tập tin này hay có đuôi là .dbf

Control files

Đây là tập tin hết sức quan trọng với database, nếu không có nó sẽ không open được database. Tập tin này chứa metadata về database, như tên database, vị trí các data files, redo log files, thông tin về backup,…

Do là tập tin quan trọng, nên chúng ta cần nhân bản (multiplex) file này ra làm 2, 3 bản ở các vị trí lưu trữ khác nhau, để trong trường hợp 1 file bị hư vẫn còn các file còn lại, đảm bảo hệ thống hoạt động.

Các tập tin này hay có đuôi là .ctl
Online redo log files

Đây chính là các tập tin mà process LGWR ghi dữ liệu ra từ Redo log buffer. Các tập tin này cần thiết trong trường hợp instance crash, phải recover lại.

Các redo log files được chia vào các log group. Mỗi log group cũng nên có 2 redo log files trở lên (cũng multiplex như control file), để đảm bảo khi có 1 file hư thì vẫn còn file còn lại để hệ thống hoạt động.

Do được sử dụng xoay vòng, cần ít nhất 2 log group trong database.



Khi hoạt động, log group có thể có các trạng thái sau:

    UNUSED: log group mới tạo, chưa sử dụng bao giờ
    CURRENT: log group đang được ghi dữ liệu
    ACTIVE: log group đang không ghi dữ liệu, nhưng đang cần phòng trường hợp instance crash
    INACTIVE: log group đang không ghi dữ liệu, không cần trong trường hợp instance crash

Archived redo log files

Nếu database chạy trong chế độ ARCHIVELOG, các redo log file khi đầy / khi switch sẽ được ghi ra archived log files. Các archived redo log files này dùng với các bản backup để đảm bảo có thể restore hệ thống đến 1 thời điểm xác định. Ngoài ra, archived redo log files còn dùng cho các tính năng khác như Data Guard.

Initialization files

Đây là tập tin chứa các tham số cấu hình liên quan đến bộ nhớ, vị trí control files, vị trí các thư mục log, các tham số cấu hình hoạt động của database… được dùng khi startup instance. Có 2 loại file:

    Pfile (parameter file): là dạng file text, thường có tên init<SID>.ora
    Spfile (server parameter file): là dạng file binary, thường có tên spfile<SID>.ora

Các tập tin này thường nằm trong ORACLE_HOME/dbs. Nếu dùng ASM để lưu trữ thì spfile hay nằm trong ASM.

Spfile có nhiều ưu điểm hơn pfile và thường được dùng chính cho database. Tuy vậy pfile cũng cần thiết trong nhiều trường hợp. Việc nắm vững thao tác với 2 loại file này sẽ rất có ích.

Password files

Tập tin này chứa password của các user được cấp quyền SYSDBA hay SYSOPER, cho phép các user có quyền admin này kết nối từ xa để thực hiện các thao tác cần xác thực bên ngoài database, chẳng hạn như startup.

Tập tin này thường có tên orapw<SID> nằm trong ORACLE_HOME/dbs.

Alert log & Trace files

Alert log là tập tin ghi lại log các hoạt động chính của database (startup, shutdown, switch log…), các thao tác liên quan đến tablespace và datafile, ALTER DATABASE, ALTER SYSTEM, các lỗi liên quan đến hoạt động database…

Đây là tập tin cần thường xuyên theo dõi kiểm tra để đảm bảo hoạt động của database. Tập tin này thường có tên alert_<SID>.log

Trace files là các file log ghi lại các lỗi xảy ra trên các background process và server process. Ngoài ra cũng có lúc DBA chủ động ghi trace file để kiểm tra 1 số thông tin rõ ràng hơn.
Backup files

Backup files là các file sao lưu lại nội dung database, mục đích chính là phòng trường hợp có hư hỏng gì thì dùng để khôi phục database.

Backup files có thể là các file copy của các file khác (data file, control file, redo log, archived log…) nếu sử dụng “cold backup”, hoặc có thể là các tập tin do RMAN sinh ra nếu dùng RMAN để backup.

Logical Structure

Nếu như trên OS ta thấy các tập tin database đơn giản chỉ là … các tập tin, thì trong database, việc lưu trữ logic lại tổ chức phức tạp hơn, theo nhiều cấp.


Oracle data block

Data block là cấp độ lưu trữ logic nhỏ nhất trong Oracle database. Thường 1 Oracle data block sẽ gồm nhiều OS block để tăng I/O. Mặc định block size là 8KB. Tuy nhiên khi tạo tablespace, có thể đặt block size khác tùy theo nhu cầu. 
Extents

Extent là mức độ lưu trữ cao hơn, bao gồm nhiều data block liền kề (về mặt logical, còn về mặt physical có thể là các block rải rác trên disk). Khi 1 object cần tăng thêm kích thước, Oracle sẽ cấp phát thêm ở mức độ extent.
Segments

Segment là đơn vị lưu trữ logic bao gồm nhiều extent. Có 4 loại segment chính:

    Data segment: là segment tạo nên table. Mỗi table được lưu hoàn toàn trong 1 segment (với partitioned table thì mỗi partition là 1 segment)
    Index segment: là segment tạo nên index.  Mỗi index được lưu hoàn toàn trong 1 segment (với partitioned index thì mỗi partition là 1 segment)
    Undo segment: các segment lưu trữ thông tin undo trong undo tablespace
    Temporary segment: các segment lưu trữ thông tin tạm thời trong temporary tablespace

Tablespace

Việc lưu trữ nhìn từ trong database, ở mức độ cao nhất sẽ là các tablespace.

Tablespace là tập hợp các data files (quan hệ giữa physical và logical nhìn thấy rõ nhất là đây), mục đích tất nhiên là … để lưu trữ dữ liệu. Có 3 loại tablespace lưu trữ:

    Data tablespace: tablespace chứa dữ liệu. Khi cài đặt thường có sẵn tablespace SYSTEM và SYSAUX, là các tablespace hệ thống chứa dữ liệu của Oracle (ta không nên lưu trữ dữ liệu khác vào đây), 1 tablespace USERS để chứa dữ liệu của user/ứng dụng. Thường ta sẽ tạo thêm các tablespace khác để quy hoạch việc lưu trữ
    Undo tablespace: là các tablespace chứa dữ liệu undo, liên quan đến hoạt động của database, do Oracle quản lý. Chỉ có 1 undo tablespace trong database
    Temporary tablespace: là các tablespace chứa dữ liệu tạm thời, liên quan đến hoạt động của database, cũng do Oracle quản lý. Có thể có nhiều temporary tablespace trong database

Về cách tổ chức, tablespace có thể được tổ chức theo 1 trong 2 kiểu:

    Smallfile tablespace: tablespace gồm nhiều datafile, kích thước tối đa mỗi datafile phụ thuộc vào kích thước block (vd với block 8KB thì kích thước datafile tối đa là 32GB)
    Bigfile tablespace: tablespace chỉ có 1 datafile duy nhất, tuy nhiên kích thước tối đa rất lớn (vd với block 8KB thì kích thước datafile tối đa là 32TB)

Read More

Thứ Hai, 14 tháng 8, 2017

Oracle 11g Enterprise Manager DB Control Changing Accessibility Mode Disabled to Enabled

I was using the OEM11G, when after the logon with my credential users, I saw the follow message “Accessibility Mode Disabled” as the image below:
09
To solve it, you need to change the status of the accessibility-mode in the file “uix-config.xml”. This file can be found on directory:  $ORACLE_HOME/j2ee/OC4J_EM/applications/em/em/WEB-INF/. Then, you need to do the follow steps:
  1. vi $ORACLE_HOME/j2ee/OC4J_EM/applications/em/em/WEB-INF/uix-config.xml (Look the status “inaccessible” in the picture below):10
  2. Change the status of the accessibility mode in the file  from inaccessible to accessible.11
  3. After you changed the accessibility mode, save and close the file.
  4. Now, you can acess the OEM follow the image below:
12
I hope this post can help you!
Read More