---
title: "Chuyển Oracle sang SQLite trên trình duyệt"
description: "Di chuyển cơ sở dữ liệu Oracle sang SQLite: chuyển bản xuất từ SQL Developer hoặc SQLcl 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/oracle-sang-sqlite
last_updated: 2026-10-15
---

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

Thả tệp .sql mà Database Export của SQL Developer hoặc SQLcl ghi, với các bảng và câu lệnh Insert, và tải xuống tập lệnh SQLite với cùng bảng, khóa, chỉ mục và dữ liệu. Mọi giá trị SQLite không chứa được nguyên trạng, và mọi đối tượng nó không hỗ trợ, đều được liệt kê trong báo cáo.

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

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

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

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 Oracle | Trong SQLite | Dòng báo cáo |
| --- | --- | --- |
| BOOLEAN (23ai) | INTEGER 0 hoặc 1 kèm CHECK |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | TEXT |  |
| NUMBER, NUMBER(p,s), FLOAT(b) | INTEGER, hoặc NUMERIC giữ chính xác dưới dạng văn bản khi quá 15 chữ số | `decimal_as_text` |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | TEXT với văn bản của Oracle, ví dụ +01-06 | `type_replaced` |
| DATE, TIMESTAMP(p) | DATETIME dạng văn bản ISO 8601, giữ mọi chữ số |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP dạng văn bản ISO 8601 theo UTC | `moments_as_utc` |
| JSON (21c), and CLOB holding JSON | TEXT |  |
| BLOB, RAW(n), LONG RAW | BLOB |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | TEXT | `type_replaced` |
| collations that ignore case (BINARY_CI) | so sánh chính xác | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | INTEGER PRIMARY KEY AUTOINCREMENT, tiếp tục sau id lớn nhất |  |
| identity columns the target can't count | INTEGER không có bộ đếm | `counter_dropped` |
| CREATE SEQUENCE | không được tạo | `sequence_not_converted` |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | GENERATED ALWAYS AS, STORED khi PERSISTED, nếu không thì VIRTUAL |  |
| virtual 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 (SYS_GUID(), ||) | 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` |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | không được tạo | `check_not_enforced` |
| function-based, bitmap and domain indexes | không được tạo | `index_skipped` |
| foreign keys | trong CREATE TABLE, nạp không kiểm tra, rồi liệt kê bằng PRAGMA foreign_key_check |  |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | không được tạo | `foreign_key_skipped` |
| partitioned tables | một bảng chứa các hàng của mọi phân vùng | `partitions_dropped` |
| several schemas in one export | một tệp, mỗi bảng có tên schema ở đầu | `schemas_merged` |
| NOT NULL columns with values that become NULL | bỏ NOT NULL | `not_null_relaxed` |
| views, synonyms, types, packages, procedures, functions and other triggers | được liệt kê trong báo cáo | `not_converted_objects` |
| exports without CREATE TABLE (data only) | kiểu suy ra từ giá trị | `no_schema` |
| expressions in INSERT values other than the ones exports write | NULL | `expression_value` |
| types IntoSQL doesn't know, and object types | TEXT | `unknown_type` |
| dates before year 1 and time zones given as region names | NULL | `date_out_of_range` |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | Infinity thành 9e999; NaN thành NULL |  |
| NUL characters in text | được giữ |  |
| text that isn't valid in its encoding | 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 SQLite

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
sqlite3 -bail mydb.sqlite < oracle.sqlite.sql
```

Khóa ngoại được khai báo trong từng bảng và các hàng được nạp khi tắt kiểm tra khóa ngoại. Sau đó tập lệnh liệt kê mọi hàng trỏ tới hàng không tồn tại, thay vì thất bại giữa chừng.

Với bản dump lớn, hãy nạp vào một tệp mới trên ổ đĩa cục bộ. Tập lệnh nạp mọi thứ trong một giao dịch với đồng bộ đĩa tắt, nên chạy ở tốc độ của ổ đĩa, và lần nạp dừng giữa chừng không để lại bảng dở dang.

Dòng lệnh nạp tệp thẳng vào cơ sở dữ liệu SQLite, không cần tạo tập lệnh. Hoàn toàn miễn phí.

## Tạo bản dump Oracle để 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 đó:

- Trong SQL Developer, chọn Tools, Database Export, với DDL và định dạng dữ liệu Insert. SQLcl ghi ra cùng nội dung với SET SQLFORMAT INSERT.
- Chạy ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' trước khi xuất: định dạng mặc định ghi ngày mà không có giờ hay thế kỷ.
- Tệp .dmp từ exp hoặc expdp là nhị phân: hãy nhập nó vào một cơ sở dữ liệu Oracle, chẳng hạn Oracle Database Free trong Docker, rồi xuất bằng SQL Developer.

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

Khung nhìn, gói, thủ tục, hàm, trình kích hoạt, kiểu và từ đồng nghĩa được viết bằng PL/SQL. 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 SQLite.

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

### 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ó chuyển đổi được tệp .dmp từ exp hoặc expdp không?

Không trực tiếp: Data Pump và Export gốc ghi một định dạng nhị phân mà chỉ Oracle đọc được. Hãy nhập nó vào bất kỳ cơ sở dữ liệu Oracle nào, Oracle Database Free chạy trong Docker, rồi xuất bằng Database Export của SQL Developer hoặc SQLcl. Trình chuyển đổi sẽ báo điều này khi nhận được tệp .dmp.

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

Bản xuất từ SQL Developer và SQLcl, với định nghĩa bảng của DBMS_METADATA, từ Oracle 11g trở lên. Mọi bản xuất thử nghiệm đến từ Oracle 21c và 23ai, trong các phiên kiểu Mỹ, Đức và ISO, và được so với nguồn từng ô một.

### NUMBER, DATE và các kiểu Oracle khác sẽ ra sao?

NUMBER thành INTEGER cho số nguyên và giữ mọi chữ số trong trường hợp khác; DATE thành văn bản DATETIME kèm giờ; CLOB thành TEXT, BLOB và RAW thành BLOB. Infinity được giữ; NaN thành NULL.

### Cột identity và sequence có được giữ không?

Cột identity tạo thành toàn bộ khóa chính của bảng sẽ thành INTEGER PRIMARY KEY AUTOINCREMENT và tiếp tục sau id lớn nhất. SQLite không có sequence, nên chúng được báo cáo.

### Còn gói PL/SQL, thủ tục 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 SQLite nào?

SQLite 3.31 trở lên. Mọi bản xuất thử nghiệm đều nạp được trên 3.31 và 3.54, và dừng ở lỗi đầu tiên nếu có sự cố.

## Từ Oracle

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

## Sang SQLite

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

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

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