Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

SSIS không thể lưu các gói và khởi động lại Visual Studio

Tôi khuyên bạn nên đọc dữ liệu theo từng phần:

Thay vì tải toàn bộ bảng, hãy cố gắng chia dữ liệu thành nhiều phần và nhập chúng vào SQL Server. Từ một lúc, tôi đã trả lời một câu trả lời tương tự liên quan đến SQLite, tôi sẽ cố gắng tái tạo nó để phù hợp với cú pháp Oracle:

Hướng dẫn từng bước

Trong ví dụ này, mỗi đoạn chứa 10000 hàng.

  1. Khai báo 2 biến loại Int32 (@[User::RowCount]@[User::IncrementValue] )
  2. Thêm một Execute SQL Task thực thi select Count(*) lệnh và lưu Bộ kết quả vào biến @[User::RowCount]

  1. Thêm Vòng lặp For với các tùy chọn sau:

  1. Bên trong vùng chứa vòng lặp for, hãy thêm một Data flow task
  2. Bên trong tác vụ luồng dữ liệu, hãy thêm ODBC SourceOLEDB Destination
  3. Trong Nguồn ODBC, chọn SQL Command và viết SELECT * FROM TABLE truy vấn * (chỉ để truy xuất siêu dữ liệu`
  4. Ánh xạ các cột giữa nguồn và đích
  5. Quay lại Control flow và nhấp vào Data flow task và nhấn F4 để xem cửa sổ thuộc tính
  6. Trong cửa sổ thuộc tính, hãy chuyển đến biểu thức và Gán biểu thức sau cho [ODBC Source].[SQLCommand] thuộc tính: (để biết thêm thông tin, hãy tham khảo Cách chuyển các biến SSIS trong biểu thức ODBC SQLCommand?)

    "SELECT * FROM MYTABLE ORDER BY ID_COLUMN
    OFFSET " + (DT_WSTR,50)@[User::IncrementValue] + "FETCH NEXT 10000 ROWS ONLY;"
    

Ở đâu MYTABLE là tên bảng nguồn và IDCOLUMN là khóa chính hoặc cột nhận dạng của bạn.

Ảnh chụp màn hình luồng điều khiển

Tài liệu tham khảo

  • Nguồn ODBC - Máy chủ SQL
  • Làm cách nào để chuyển các biến SSIS trong biểu thức lệnh ODBC SQLC?
  • CÁCH SỬ DỤNG NGUỒN VÀ SỰ KHÁC BIỆT CỦA SSIS ODBC GIỮA OLE DB VÀ ODBC?
  • Làm cách nào để giới hạn số hàng được trả về bởi một truy vấn Oracle sau khi đặt hàng?
  • Bắt đầu từ n đến n hàng từ db2

Cập nhật 1 - Các cách giải quyết khác có thể có

Trong khi tìm kiếm các vấn đề tương tự, tôi đã tìm thấy một số cách giải quyết bổ sung mà bạn có thể thử:

(1) Thay đổi bộ nhớ tối đa của SQL Server

  • SSIS:Trình quản lý bộ đệm không thực hiện được cuộc gọi phân bổ bộ nhớ

    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'max server memory', 4096;
    GO
    RECONFIGURE;
    GO
    

(2) Bật đường ống được đặt tên

  • [Đã sửa] Trình quản lý bộ đệm phát hiện hệ thống sắp hết bộ nhớ ảo nhưng không thể hoán đổi bất kỳ bộ đệm nào

    1. Đi tới Bảng điều khiển -> Công cụ quản trị -> Quản lý máy tính
    2. Trên Giao thức dành cho Phiên bản SQL -> Đặt Ống được Đặt tên =Enabled
    3. Khởi động lại Dịch vụ phiên bản SQL
    4. Sau đó, hãy thử nhập dữ liệu và nó sẽ tìm nạp dữ liệu theo từng phần ngay bây giờ thay vì tìm nạp tất cả cùng một lúc. Hy vọng điều đó sẽ hiệu quả với các bạn và tiết kiệm thời gian của bạn.

(3) Nếu sử dụng SQL Server 2008, hãy cài đặt các hotfix

  • Quy trình thời gian chạy SSIS 2008 gặp sự cố khi bạn chạy gói SSIS 2008 trong điều kiện bộ nhớ thấp

Cập nhật 2 - Hiểu lỗi

Trong liên kết MSDN sau, nguyên nhân lỗi được mô tả như sau:

Bộ nhớ ảo là một tập hợp siêu bộ nhớ vật lý. Các quy trình trong Windows thường không chỉ định chúng được sử dụng, vì điều đó sẽ (rất nhiều) hạn chế cách Windows có thể đa nhiệm. SSIS cấp phát bộ nhớ ảo. Nếu Windows có thể, tất cả các phân bổ này được lưu giữ trong bộ nhớ vật lý, nơi truy cập nhanh hơn. Tuy nhiên, nếu SSIS yêu cầu nhiều bộ nhớ hơn khả dụng vật lý, thì bộ nhớ ảo đó sẽ tràn vào đĩa, làm cho gói hoạt động theo thứ tự cấp độ chậm hơn. Và trong trường hợp xấu nhất, nếu không có đủ bộ nhớ ảo trong hệ thống, thì gói sẽ bị lỗi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra xem một mục không tồn tại trong bảng khác hay không

  2. 2 Hàm lấy Ngày, Tháng và Năm từ một Ngày trong Oracle

  3. Điều chỉnh hiệu suất PL / SQL cho các truy vấn ký tự đại diện LIKE '% ...%'

  4. xóa các hàng trùng lặp khỏi Oracle

  5. Thứ tự của các bảng được tham chiếu trong mệnh đề ON của hàm JOIN có quan trọng không?