2010-01-07 7 views
5

Próbuję odtajnić BLOB bazy danych, który został zamrożony przy użyciu Przechowywanie na 64-bitowej maszynie Solaris (produkcja). Kiedy próbuję odtajać na 32-bitowym komputerze z systemem Windows (rozwojowym), otrzymuję komunikat "Błędna kolejność nie jest zgodnym błędem".Jak mogę użyć 32-bitowego pliku Perla, aby odtajać coś zamrożonego za pomocą 64-bitowego magazynu?

perl -v (on solaris) 
This is perl, v5.8.8 built for i86pc-solaris-64 

perl -v (on Windows) 
This is perl, v5.10.1 built for MSWin32-x86-multi-thread 

Dokładny błędu:

(Unable to read: Byte order is not compatible at blib\lib\Storable.pm (autosplit into blib\lib\auto\Storable\thaw.al) line 415, at ../handlers/Search/actions/SearchSendQueue.pm line 124) 

Linia 124 SearchSendQueue.pm:

my $object = thaw($item->{object}); 

Czy ktoś wie jak mogę rozmrożenia ten obiekt na komputerze 32-bitowym?

Uwaga: Obiekt jest ważny i działa na maszynie produkcyjnej 64-bitowej. Próbowałem już "$ Storable :: interwork_56_64bit = 1;" jak zasugerowano na innych forach.

+1

Jeśli to tylko kwestia zamawiania bajtów, możesz spróbować odwrócić kolejność bajtów za pomocą funkcji pack()? – Ether

+1

Nie odpowiada to bezpośrednio na twoje pytanie, ale 64-bitowe komputery Intela są tanie i Solaris jest bezpłatny. Nawet jeśli chcesz w większości korzystać z systemu Windows, pomocna może być maszyna wirtualna Solaris. Cieszę się, że mogę używać jednej maszyny do rozwijania się na prawie każdej wybranej przeze mnie platformie. :) –

Odpowiedz

8

Storable dokumentacja mówi:

Chowany pisze nagłówek pliku zawierającego rozmiary różnych typów w języku C dla kompilatora C, która zbudowała magazynować (gdy nie pisanie w porządku sieciowym) i odmówi ładowania plików napisany przez Starzonego nie na tej samej (lub zgodnej) architekturze.

W tej samej sekcji, sugerują, że podstawowym wykorzystanie Chowany jest lokalnym i FAST metoda wytrwałość. Można jednak użyć nstore, aby zachować utrwaloną strukturę w kolejności bajtowej sieci. W rezultacie będzie czytać i przechowywać wolniej, ale działa na wszystkich platformach.

Sugeruje się, że będziesz musiał użyć 64-bitowego komputera do odczytu i ponownego zapisania danych w porządku sieciowym przy użyciu nstore.

+0

Czy to działa dla przerw 32/64-bitowych lub tylko dla procesorów big-endian/little-endian? – fennec

+0

@fennec: To powinno działać w przypadku całkowicie przenośnych przechowywanych plików. Sekcja, do której się odwołałem, dotyczy w szczególności architektury 64-bitowej. – Axeman

+0

Próbowałem uniknąć odwilży/nfreeze na serwerze produkcyjnym. Jednak wydawało się, że to jedyny sposób, więc to właśnie zrobiłem. – uxnow

5

Wiem, że dokumenty wskazują, że powinno być możliwe, ale nigdy nie udało mi się go uruchomić, chyba że za pomocą nfreeze/nstore * na 64-bitowym komputerze.

Powiązane problemy