Bakground: Tôi đã có ứng dụng cũ mà tôi đang sử dụng để sử dụng các loại DATE cho phần lớn thời gian lưu trữ trong cơ sở dữ liệu. Tôi muốn thử cập nhật một số bảng này để chúng có thể sử dụng múi giờ vì điều này đang gây ra sự cố với người dùng ở các khu vực khác nhau từ nơi db (xem A bên dưới). Điều này là dành cho Oracle 10g.Di chuyển các cột Oracle DATE thành TIMESTAMP với múi giờ
Quetions:
1) Tôi có thể di chuyển "tại chỗ" không. Tôi có thể chuyển đổi như vậy
DATE_COL = type:DATE => DATE_COL = type:TIMESTAMP
... hoặc tôi sẽ phải sử dụng tên cột khác?
Hãy nhớ rằng dữ liệu cần được giữ lại. Nếu điều này có thể được thực hiện bán dễ dàng trong một kịch bản di chuyển nó sẽ làm việc cho mục đích của tôi.
2) Loại chuyển đổi này có tương thích ngược không? Chúng tôi có thể có một số tập lệnh hoặc báo cáo sẽ nhấn vào bảng này mà chúng tôi có thể không biết. Có lẽ chúng ta có thể đối phó với nó nhưng tôi muốn biết loại tổ ong nào mà tôi đang bước vào.
3) Tôi nên theo dõi những cạm bẫy nào?
Cảm ơn,
EDIT:
(một phần để đáp ứng với Gary)
Tôi tốt với một quá trình gồm nhiều bước.
1) di chuyển dữ liệu sang cột Dấu thời gian mới (TEMP được điều chỉnh) với một số loại chuyển đổi 2) thả cột cũ (chúng tôi gọi nó là MY_DATE) 3) tạo cột dấu thời gian mới với tên cột ngày cũ (MY_DATE) dữ liệu 4) di chuyển đến cột MY_DATE 5) thả cột TEMP
Một Gary cũng muốn làm rõ về vấn đề múi giờ cụ thể. Tôi đã sao chép câu trả lời của tôi từ bên dưới để giữ cho nó dễ đọc hơn.
Về cơ bản, dữ liệu sẽ được truy cập từ một số khu vực khác nhau. Chúng tôi cần có khả năng chuyển đổi sang/từ múi giờ địa phương nếu cần. Chúng tôi cũng có các bộ kích hoạt sử dụng sysdate làm phức tạp thêm những thứ. dấu thời gian với múi giờ làm giảm rất nhiều nỗi đau này.
Oh và cảm ơn câu trả lời cho đến thời điểm này.
Tôi đoán những gì tôi muốn làm rõ là nếu tôi thay thế các cột với một tem thời gian (như tôi mô tả trong bản cập nhật của tôi), sẽ báo cáo và truy vấn sử dụng các lĩnh vực này choke trên một dấu thời gian? (Điều này sẽ được đọc chỉ) Tôi có thể xem xét một dấu thời gian là một lớp con của ngày hoặc có đủ tinh tế oracle để làm cho rằng một giả định rất xấu? –
'TIMESTAMP' là một kiểu dữ liệu khác - các báo cáo và truy vấn sẽ phải được xem xét để tác động. Nó không phải là db sẽ "nghẹt thở", nhưng các chức năng/etc có khả năng không được linh hoạt trên datatype vì vậy họ sẽ phải được cập nhật cho phù hợp. –
'TIMESTAMP' không ghi lại múi giờ là câu hỏi cần thiết. Bạn nên sử dụng 'TIMESTAMP WITH TIME ZONE' hoặc' TIMESTAMP WITH LOCAL TIME ZONE'. Xem http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/ch4datetime.htm. Trước đây lưu trữ ngày và múi giờ trong cột trong khi sau đó lưu trữ ngày được chuẩn hóa theo múi giờ cơ sở dữ liệu, nhưng dịch nó thành thời gian phiên người dùng khi người dùng truy vấn cột. –