---
title: "Chuyển SQLite sang Oracle trên trình duyệt"
description: "Di chuyển cơ sở dữ liệu SQLite sang Oracle: chuyển tệp .db hoặc bản dump thành tập lệnh cùng bảng, khóa và dữ liệu, kèm báo cáo mọi thay đổi."
canonical: https://intosql.com/vi/sqlite-sang-oracle
last_updated: 2026-10-15
---

# Chuyển SQLite sang Oracle trên trình duyệt

Thả tệp cơ sở dữ liệu SQLite (.db, .sqlite, .sqlite3) hoặc đoạn SQL mà lệnh .dump của sqlite3 ghi ra, và tải xuống tập lệnh Oracle với cùng bảng, khóa, chỉ mục và dữ liệu. Mỗi cột nhận kiểu mà giá trị của nó vừa, và mọi giá trị Oracle không chứa được nguyên trạng đều được liệt kê trong báo cáo.

[Hướng dẫn di chuyển SQLite sang Oracle](https://intosql.com/docs/migrations/sqlite-to-oracle)

[Kiểu dữ liệu từ SQLite sang Oracle](https://intosql.com/docs/types/sqlite-to-oracle)

## Những gì thay đổi từ SQLite sang Oracle

Mỗi hàng là một quy tắc trình chuyển đổi áp dụng, kèm dòng báo cáo được ghi khi quy tắc thay đổi dữ liệu của bạn.

| Trong SQLite | Trong Oracle | Dòng báo cáo |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | kiểu mà mọi giá trị trong cột đều vừa |  |
| BOOLEAN, BOOL | NUMBER(1) kèm CHECK 0 và 1 |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | VARCHAR2(n CHAR) khi mọi giá trị vừa, nếu không thì CLOB |  |
| TEXT and VARCHAR(n) longer than 4000 bytes | VARCHAR2(4000 CHAR) khi mọi giá trị vừa 4000 byte (750 ký tự trong khóa), nếu không thì CLOB | `text_as_lob` |
| DECIMAL(p,s), NUMERIC | kiểu chính xác khi mọi giá trị đều vừa, nếu không thì double |  |
| BLOB, and columns holding bytes | BLOB |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | DATE hoặc TIMESTAMP(p), tùy giá trị chứa gì |  |
| JSON holding JSON text | CLOB |  |
| Infinity in REAL columns | giữ thành BINARY_DOUBLE_INFINITY |  |
| INTEGER PRIMARY KEY, AUTOINCREMENT | GENERATED BY DEFAULT ON NULL AS IDENTITY, tiếp tục sau id lớn nhất hoặc giá trị của sqlite_sequence |  |
| COLLATE NOCASE | so sánh chính xác | `case_insensitive_collation` |
| generated columns | cột ảo | `stored_as_virtual` |
| generated columns with functions IntoSQL doesn't write, and the || operator | một cột thường | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | không có giá trị mặc định | `default_not_translated` |
| CHECK constraints | được chuyển đổi |  |
| CHECK constraints with functions IntoSQL doesn't write | không được tạo | `check_skipped` |
| partial and expression indexes | không được tạo | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | sau dữ liệu ENABLE NOVALIDATE, rồi xác thực |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | bị bỏ | `foreign_key_action_unsupported` |
| empty strings and empty blobs | NULL | `empty_string_null` |
| foreign keys to tables the dump doesn't create | không được tạo | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | bỏ NOT NULL | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | được liệt kê trong báo cáo | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | kiểu suy ra từ giá trị | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | được giữ |  |
| text that isn't valid UTF-8 | byte lỗi thành ký tự thay thế | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | sao chép nguyên trạng | `mojibake_suspected` |

## Nạp tập lệnh vào Oracle

Tập lệnh tạo bảng, sao chép các hàng, rồi thêm khóa, chỉ mục và khóa ngoại, nên nạp nhanh và dừng ở lỗi đầu tiên.

```shell
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @sqlite.oracle.sql
```

Khóa ngoại được thêm với ENABLE NOVALIDATE, nên hàng mới được kiểm tra ngay, rồi được xác thực. Nếu một hàng cũ trỏ tới hàng không tồn tại, tập lệnh cho biết ràng buộc nào và để nó ở trạng thái chưa xác thực, thay vì thất bại giữa chừng.

Với bản dump lớn, hãy chạy SQL*Plus trên cùng máy với cơ sở dữ liệu. Tập lệnh commit sau mỗi 100 hàng. Người dùng chạy tập lệnh cần quyền CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER và CREATE PROCEDURE, cùng hạn mức trên tablespace của mình.

## Tạo bản dump SQLite để có kết quả tốt nhất

Trình chuyển đổi đọc những gì bản dump chứa. Các tùy chọn sau giữ lại nhiều dữ liệu hơn trong đó:

- Chính tệp cơ sở dữ liệu được chuyển đổi nguyên trạng, đọc từng trang trong trình duyệt của bạn. Hãy đóng ứng dụng đang ghi vào tệp trước, để không thay đổi nào bị bỏ lại trong tệp -wal của nó.
- sqlite3 app.db .dump > app.sql ghi cùng cơ sở dữ liệu đó dưới dạng SQL, cũng chuyển đổi được, dạng .sql hoặc .sql.gz.
- DB Browser for SQLite ghi đoạn SQL đó qua File, Export, Database to SQL file, và iterdump() của Python cũng vậy.

## Những gì không được chuyển đổi

Khung nhìn và trình kích hoạt được viết bằng ngôn ngữ riêng của SQLite. Chúng được liệt kê theo tên trong báo cáo, không bao giờ bị bỏ âm thầm, để bạn viết lại cho Oracle. Bảng ảo, như FTS5 và R*Tree, cũng được liệt kê, còn các bảng bóng của chúng bị bỏ qua.

## Câu hỏi về SQLite sang Oracle

### Bản dump của tôi có bị tải lên không?

Không. Trình chuyển đổi chạy trong trình duyệt và đọc bản dump từ ổ đĩa theo từng phần, nên nó không bao giờ rời khỏi máy tính của bạn. Ứng dụng máy tính và dòng lệnh cũng chuyển đổi ngay trên máy tính của bạn.

### Bản dump có thể lớn đến đâu?

Trình chuyển đổi không bao giờ giữ toàn bộ bản dump trong bộ nhớ: nó đọc tệp hai lần, theo từng đoạn, và ghi tập lệnh trong lúc đọc. Bản dump nhiều gigabyte vẫn chuyển đổi được trong trình duyệt, trong ứng dụng máy tính và bằng dòng lệnh.

### Tôi có thể chuyển đổi trực tiếp tệp .db không?

Có. Thả tệp .db, .sqlite hoặc .sqlite3: tệp được đọc trong trình duyệt của bạn và không bao giờ được tải lên. Văn bản có ký tự NUL và mọi chữ số của một giá trị double đều đến đúng như đã lưu, điều mà .dump có thể cắt bớt.

### Bản dump có thể đến từ những phiên bản SQLite nào?

Tệp cơ sở dữ liệu từ SQLite 3.0 trở lên, dạng UTF-8 hoặc UTF-16, và bản dump từ lệnh .dump của shell sqlite3 hoặc iterdump() của Python. Mọi tệp và bản dump thử nghiệm đến từ sqlite3 3.31 đến 3.54, gồm cả bảng STRICT và WITHOUT ROWID, và được so với nguồn từng ô một.

### Kiểu cột được quyết định thế nào khi SQLite không áp đặt chúng?

Kiểu đã khai báo chỉ là gợi ý và giá trị mới quyết định: cột trở thành NUMBER, BINARY_DOUBLE, DATE, TIMESTAMP, BLOB, VARCHAR2 hoặc CLOB khi mọi giá trị đều vừa. Chuỗi rỗng thành NULL, như cách Oracle lưu chúng, và báo cáo đếm chúng.

### INTEGER PRIMARY KEY và AUTOINCREMENT có được giữ không?

Có. INTEGER PRIMARY KEY trở thành cột identity, mỗi hàng giữ id của nó, và id tiếp theo tiếp tục sau id lớn nhất, hoặc sau giá trị của sqlite_sequence khi có AUTOINCREMENT.

### Còn khung nhìn và trình kích hoạt thì sao?

Chúng được liệt kê theo tên trong báo cáo và không được chuyển đổi, vì mỗi cơ sở dữ liệu viết chúng bằng ngôn ngữ riêng.

### Tập lệnh nạp được trên những phiên bản Oracle nào?

Oracle 19c trở lên. Mọi bản dump thử nghiệm đều nạp được trên 21c và 23ai, và dừng ở lỗi đầu tiên nếu có sự cố.

## Từ SQLite

- [SQLite sang PostgreSQL](https://intosql.com/vi/sqlite-sang-postgresql)
- [SQLite sang MySQL](https://intosql.com/vi/sqlite-sang-mysql)
- [SQLite sang MariaDB](https://intosql.com/vi/sqlite-sang-mariadb)
- [SQLite sang SQLite](https://intosql.com/vi/sqlite-sang-sqlite)
- [SQLite sang SQL Server](https://intosql.com/vi/sqlite-sang-sql-server)

## Sang Oracle

- [MySQL sang Oracle](https://intosql.com/vi/mysql-sang-oracle)
- [MariaDB sang Oracle](https://intosql.com/vi/mariadb-sang-oracle)
- [PostgreSQL sang Oracle](https://intosql.com/vi/postgresql-sang-oracle)
- [SQL Server sang Oracle](https://intosql.com/vi/sql-server-sang-oracle)
- [Oracle sang Oracle](https://intosql.com/vi/oracle-sang-oracle)

## Hướng dẫn và mọi cặp

- [Oracle sang SQLite](https://intosql.com/vi/oracle-sang-sqlite)
- [Hướng dẫn di chuyển SQLite sang Oracle](https://intosql.com/docs/migrations/sqlite-to-oracle)
- [Kiểu dữ liệu từ SQLite sang Oracle](https://intosql.com/docs/types/sqlite-to-oracle)
- [Mọi cặp cơ sở dữ liệu](https://intosql.com/vi/chuyen-co-so-du-lieu)
